О Планировании Спроса, Холте-Винтерсе И Xgboost

Хабр, привет! На сайте много статей о прогнозировании распродаж различных категорий FMCG, тогда как другие категории товаров не так популярны.

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

В качестве дополнительного вызова стоит рассматривать консервативность значительной части дистрибьюторов в вопросе выбора технологий прогнозирования.

Практику прогнозирования продаж среднестатистической компании представить довольно легко: сбор продаж из SAP + мастер-данные в самодельном Excel Tool, автоматизация в таких случаях ограничивается достаточно простым методом прогнозирования, который недалеко уступает среднему.

/линейный тренд с ракетостроением в форме ХолтВинтерса.

Так получилось, что по долгу службы я наткнулся на производителя бренда недорогой декоративной косметики (около 500 SKU) и увидел печальные последствия консервативного прогнозирования в виде низких KPI. Пришлось внести небольшие изменения в систему планирования, в том числе в процесс прогнозирования, и тогда я расскажу о своих исследованиях.



Статус-кво до войны

Главной головной болью бренда уже несколько лет остается крайне низкий уровень сервиса ( США = отправлено/заказано ), значительно ниже среднего показателя по компании, что усугубляется прогнозом, основанным на средних продажах ( Прогноз = Средний объем продаж ).

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

Исходя из этого, было решено прогнозировать не продажи, а очищенные от повторов заказы (т. е.

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

После повышения уровня обслуживания разница между условиями нивелируется.

Для оценки точности прогноза компания использует формулу ( Точность прогноза = (1 - Сумма модулей расхождений между фактическим и прогнозом)/Прогноз ), мы тоже им воспользуемся.

Важный момент: прогноз в данном случае — это прогноз с лагом 2, т.е.

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

Принято считать, что результат более 35% можно трактовать как удовлетворительный.

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

Работа над обучающей выборкой не заняла много времени — хоть у компании и нет аналитической СХД, но есть выгрузка заказов по месяцам, которые собирал и чистил небольшой цикл на Python. Аналогичным образом мы получили основные данные.

События и акции пришлось не учитывать в расчетах из-за излишнего шума (мы боялись добавить больше шума, чем полезной информации), так как крупнейший ритейлер периодически проводил акции без договоренностей и уведомлений, оценка объема мероприятий приблизительная, и т. д. В качестве модели мы решили использовать 3 ветки — Naive, Exponential Smoothing и MachineLearning.

Наивное прогнозирование

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

Действительно, если в компании принято детально анализировать каждый код, используя метод «5 Почему», то прогноз, основанный на среднем значении, подходит идеально.

Клиент заказывает в среднем 10 штук в месяц? Логично, что в следующем месяце он закажет штук 10. Результат не тот, что мы ожидали и клиент заказал 50 штук? Вероятно, клиент просто не умеет прогнозировать/сломался автозаказ/робот сошел с ума и т. д., следует реализовать Совместное прогнозирование и обмен файлами, чтобы снять напряжение и повысить точность прогноза (конечно, шутка, но с долей правды).

Чтобы добавить немного актуальности методам, мы предположили, что сезонность товаров идентична сезонности категории (для выявления сезонности использовался пакет statmodels; на рисунке показан результат для 3-х основных).



О планировании спроса, Холте-Винтерсе и XGboost

Мы взяли 4 метода — средний и медианный за всю историю продаж (точность 0,32 и 0,30 соответственно) и за последние 6 пунктов (0,36 и 0,26).

0,36 будет нашим ориентиром — в будущем мы обязаны добиться лучших результатов.



ESM-прогнозирование

Экспоненциальное сглаживание часто является мечтой планирования спроса, и легко понять, почему.

Прямые оценки точности показывают как минимум сопоставимые результаты для ESM и ML с точки зрения точности, они включены во все промышленные системы прогнозирования (JDA, Oracle RDF и т. д.), расчет происходит быстрее и легче интерпретируется — вот почему классика самая живая.

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

Для прогнозирования мы использовали тот же пакет statmodels. Для начала мы взяли класс Холта для всей истории продаж со очищенной групповой сезонностью и для последних 6 пунктов (точность 0,34 и 0,37).

Далее мы разделили SKU на 2 группы — продукты с долгой историей мы прогнозировали как класс HoltWinters, а с короткой историей оставляли Holt на 6 баллах.

Результат оказался гораздо лучше – 0,44, это легко объяснимо.

Если на верхнем уровне кажется, что все товары — братья-близнецы, то, спускаясь в подкатегории, мы видим различия.



О планировании спроса, Холте-Винтерсе и XGboost



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

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

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

Если учет событий недостаточно точен, результат может оказаться неутешительным (в случае с Холтом-Уинтерсом мы достигли точности в 5 процентных пунктов).

Причин можно представить множество – например, категории КАМ занижают объемы, чтобы показать перевыполнение и получить бонусы.

Если отойти от подхода ( Прогноз = Базовый уровень + Трубы ) к прогнозу на основе функций, тогда мы сможем добавить некоторую доступную нам дополнительную информацию.

Для этого мы составили список из 50 признаков (цены, основные данные, продажи, разделение клиентов и т. д.).

Из библиотеки Sklearn мы взяли базовый Lasso/Ridge/KNN Regressor, которые часто дают быстрый выигрыш, но в нашем случае нас порадовал только KNN с точностью 0,44. Случайный лес хорошо работает на небольших выборках; в нашем случае точность составляет 0,48. И, конечно же, мы не забыли про Xgboost, который после небольшой перекрестной проверки дал лучший результат — 0,51. Ниже приведен график точности каждой модели.



О планировании спроса, Холте-Винтерсе и XGboost



Обеспокоенность

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

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

Поэтому нам важно показать, что результат Xgboost не только более точный, но и более стабильный (а не случайная рулетка, как может показаться неподготовленному планеру).

Для этого мы сравнили распределения ошибок HoltWinters и Xgboost и убедились, что результаты последнего были более плотными с центром вокруг нуля и с легким хвостом.



О планировании спроса, Холте-Винтерсе и XGboost



О планировании спроса, Холте-Винтерсе и XGboost



Промежуточные результаты

С начала написания статьи/прогноза первого запуска еще 2 бренда декоративной косметики перешли на Xgboost из-за положительных результатов.

По итогам ноября средний прирост уровня сервиса составил +16%, т.е.

достигнут средний уровень компании.

Бренд SL 19 ноября финансового года SL20 ноября финансового года СЛ Дельта
Бренд1 73% 89% 16%
Бренд2 80% 85% 5%
Бренд3 63% 93% 30%
Общий 73% 89% 16%
Теги: #Машинное обучение #Интеллектуальный анализ данных #прогнозирование спроса #логистика #цепочка поставок #прогнозирование временных рядов #эконометрика
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.