Цель бизнеса всегда состояла в том, чтобы обслуживать спрос своих клиентов в ожидаемом количестве, ожидаемой цене и ожидаемом качестве. Эти ожидания создают необходимость оценить правильное количество, цену и качество продукта, чтобы он имел смысл для целевых клиентов.

Оценка правильного количества всегда была проблемой в каждом бизнесе.

В этом посте я хотел бы сосредоточить остальную часть обсуждения на оценке количества или, другими словами, оценке спроса.

Оценка или предсказание будущего всегда была сложной задачей, и проблема становится еще более сложной, когда вам нужно оценить спрос на более низких уровнях. Сложность проблемы экспоненциально возрастает по мере того, как мы переходим от уровня компании к уровню бизнес-подразделения, от уровня семейства продуктов к уровню SKU.

Оценка спроса на более высоких уровнях дает нам опережающие индикаторы для лучшего бизнес-планирования. Тем не менее, на уровне реального производства и розничного магазина нам часто требуется оценивать спрос на каждую SKU, чтобы использовать наши ресурсы наилучшим образом и следить за постоянно растущими уровнями запасов, сохраняя при этом прекрасный баланс с уровнем обслуживания клиентов.

Подход

Я хотел бы разделить подход к решению этой проблемы на две широкие категории уровня:

1) Прогнозирование временных рядов

2) Прогнозирование машинного обучения

Прогнозирование временных рядов

Под временными рядами я подразумеваю традиционный способ оценки будущего переменной, которой в данном случае является спрос, с использованием исторических данных той же переменной. Таким образом, мы пытаемся извлечь любую скрытую тенденцию или закономерность в историческом спросе на продукт и экстраполировать эту закономерность, чтобы предсказать будущий спрос. Теперь наиболее распространенная техника, к которой мы обычно прибегаем в таких сценариях, — это ARIMA. Я не буду вдаваться здесь в подробности методологии ARIMA, но одна методология, с которой мы обычно сталкиваемся во время наших академических курсов или исследований, включает оценку параметров ARIMA — p, d, q (или, в некоторых случаях, их сезонных значений). равные части), выполнив тесты на стационарность, а затем визуально проверив графики автокорреляции или частичной автокорреляции, чтобы получить соответствующие оценки для параметров ARIMA. Хотя этот метод дает нам лучшее понимание внутренней структуры временных рядов, он создает проблемы, когда одно и то же упражнение необходимо повторить в большем масштабе, скажем, для десятков тысяч временных рядов.

К счастью, Роб Хайндман значительно облегчил нашу работу, особенно в тех случаях, когда визуальная проверка каждого отдельного временного ряда может оказаться невыполнимой.

Опять же, этот метод можно разделить на два потока:

а) Без экзогенных переменных

В случае, если спрос на продукт в различных исторических временных метках является единственной доступной информацией, мы должны опробовать различные семейства методологий временных рядов, такие как ETS, ARIMA, TBATS и т. д., и выбрать тот, который дает минимальную ошибку или потерю информации при проверке. набор. Вместо того, чтобы принимать решение на основе одного набора проверок, мы пробуем метод перекрестной проверки, а затем выбираем подход с минимальной ошибкой перекрестной проверки. Единственное, что следует иметь в виду в таких сценариях, — это своеобразный характер данных временных рядов. В отличие от традиционного подхода к машинному обучению, при котором мы произвольно разделили бы набор данных (или сделали бы стратифицированную выборку), каждый набор перекрестной проверки, полученный из данных временного ряда, должен быть взят из непрерывного блока временных меток, поскольку шаблон или взаимосвязь обычно оцениваются на основе на относительном отставании во времени исторических показаний.

б) С экзогенными переменными

В некоторых случаях, помимо исторических данных о спросе для каждой SKU, у нас также есть некоторые другие независимые точки данных, такие как прогноз от отдела продаж, прогноз от клиентов, объемы спроса в отрасли или сегменте, рекламные планы и т. д. Чтобы использовать эти факторы при создании прогнозные числа, мы можем включить в модель и эти внешние параметры. Такие методы известны под названиями ARIMAX или Dynamic Regression (как предлагает Роб Хайндман). Идея состоит в том, что мы сначала применяем метод временных рядов, такой как ARIMA, используя исторические данные, а оставшиеся члены ошибки из этого упражнения дополнительно регрессируют по доступным внешним переменным. Основная концепция основана на объяснении максимальной вариации данных с использованием как временных рядов, так и линейной регрессии. Подходящий метод для каждой SKU может быть затем выбран снова с использованием ошибки перекрестной проверки.

Однако если вы реализуете это в R с помощью пакета forecast, вам, возможно, придется написать собственную функцию для части перекрестной проверки, поскольку функции по умолчанию могут не поддерживать перекрестную проверку напрямую с использованием динамической регрессии.

Прогнозирование машинного обучения

Подход машинного обучения также можно разделить на две части:

A) Без кластеризации

Идея здесь состоит в том, чтобы упорядочить данные, доступные на каждом уровне SKU, и преобразовать их из одномерной структуры данных в многомерную структуру входных данных.

а) Без экзогенных переменных

Когда внешние переменные недоступны, мы можем преобразовать данные, доступные с разным лагом, во входной набор функций. Значение спроса, присутствующее на временном шаге прогнозирования, становится целевой переменной в таких сценариях.

Начальное значение задержки, N, следует рассматривать на основе понимания бизнеса, и мы также можем попробовать набор значений N и использовать поиск по сетке для оценки числа. лагов, которые необходимо учитывать при построении модели. Шаг прогнозирования h снова будет варьироваться от бизнеса к бизнесу, и мы обычно стараемся сохранить значение h таким образом, чтобы у остальной части цепочки поставок было достаточно времени, чтобы отреагировать на изменение в спрос, если таковой имеется. Расположение данных в такой столбчатой ​​структуре позволяет использовать даже древовидные алгоритмы машинного обучения, и мы больше не ограничены линейными отношениями. Модели временных рядов в некотором роде рассматривают только линейную зависимость по отношению к различным задержкам, и, следовательно, в этом случае могут быть получены значительно разные результаты с использованием разных непараметрических моделей машинного обучения.

б) С экзогенными переменными

В случае, когда внешние рыночные сигналы или другие внутренние сигналы спроса присутствуют на уровне SKU, их также можно включить в модель машинного обучения.

Б) С кластеризацией

Этот подход будет сильно отличаться от подходов, которые были упомянуты до сих пор в этом посте, поскольку в этом случае мы не будем создавать отдельные модели для каждого из SKU. Мы скорее попытаемся понять историческую модель спроса на все SKU, а затем попытаемся сгруппировать вместе те, которые следуют аналогичной модели спроса. Мы можем либо использовать фактические данные о спросе, либо создать сводную статистику исторических показателей спроса, чтобы разделить SKU с аналогичным распределением спроса.

Как только мы сможем определить правильные сегменты или кластеры SKU, следующим шагом будет создание индивидуально оптимизированных моделей для каждого из этих сегментов.

Этот подход помогает нам в двух отношениях: во-первых, он снижает сложность разработки и управления таким количеством отдельных моделей; Во-вторых, теперь у нас было бы достаточно данных для фактической настройки параметров модели, и, если точек данных в каждом кластере достаточно, мы могли бы даже попробовать нейронные сети (если вам это нравится).

Опять же, включение внешних переменных будет варьироваться от случая к случаю в зависимости от того, доступны ли соответствующие внешние переменные в вашей отрасли или нет.

Когда я впервые начал работать в этой области, мне пришлось потратить много времени на формулировку правильного подхода, где необходимо масштабное прогнозирование спроса. Надеюсь, что этот пост даст вам преимущество, если вы планируете работать над подобной проблемой.

P.S. Я не коснулся здесь вопросов, связанных с разреженностью данных, которые потребовали бы тщательного анализа данных при построении моделей на детальном уровне. Возможно, вам захочется понять, как такие параметры, как коэффициент вариации (CoV), могут помочь вам сначала оценить прогнозируемость соответствующих SKU или категорий, даже до того, как приступить к разработке модели.