Хабр, привет! На сайте много статей о прогнозировании распродаж различных категорий 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-х основных).
Мы взяли 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, это легко объяснимо.
Если на верхнем уровне кажется, что все товары — братья-близнецы, то, спускаясь в подкатегории, мы видим различия.
Прогнозирование машинного обучения
Основным недостатком стандартных методов является недостаточная глубина расчетов, поскольку мы не используем всю доступную информацию.Например, история событий: обычно при классическом подходе мы должны вычесть из истории произошедшие трубы, сделать базовый прогноз и добавить запланированные трубы с соответствующим календарем.
Если учет событий недостаточно точен, результат может оказаться неутешительным (в случае с Холтом-Уинтерсом мы достигли точности в 5 процентных пунктов).
Причин можно представить множество – например, категории КАМ занижают объемы, чтобы показать перевыполнение и получить бонусы.
Если отойти от подхода ( Прогноз = Базовый уровень + Трубы ) к прогнозу на основе функций, тогда мы сможем добавить некоторую доступную нам дополнительную информацию.
Для этого мы составили список из 50 признаков (цены, основные данные, продажи, разделение клиентов и т. д.).
Из библиотеки Sklearn мы взяли базовый Lasso/Ridge/KNN Regressor, которые часто дают быстрый выигрыш, но в нашем случае нас порадовал только KNN с точностью 0,44. Случайный лес хорошо работает на небольших выборках; в нашем случае точность составляет 0,48. И, конечно же, мы не забыли про Xgboost, который после небольшой перекрестной проверки дал лучший результат — 0,51. Ниже приведен график точности каждой модели.
Обеспокоенность
Какие опасения могут возникнуть у вас в отношении использования машинного обучения в прогнозировании продаж? Например, обратная связь: ряд эком- и офлайн-ритейлеров используют нейросети и градиентный бустинг и периодически пугают людей сумасшедшими заказами.Да, конечно, если ритейлер замерит точность прогноза, результат может быть оптимистичным, но это в определенной степени самосбывающееся пророчество: если ошибка, то распродажа/черная пятница/день рождения сети, и т. д. включено.
Поэтому нам важно показать, что результат Xgboost не только более точный, но и более стабильный (а не случайная рулетка, как может показаться неподготовленному планеру).
Для этого мы сравнили распределения ошибок HoltWinters и Xgboost и убедились, что результаты последнего были более плотными с центром вокруг нуля и с легким хвостом.
Промежуточные результаты
С начала написания статьи/прогноза первого запуска еще 2 бренда декоративной косметики перешли на Xgboost из-за положительных результатов.По итогам ноября средний прирост уровня сервиса составил +16%, т.е.
достигнут средний уровень компании.
Бренд | SL 19 ноября финансового года | SL20 ноября финансового года | СЛ Дельта |
---|---|---|---|
Бренд1 | 73% | 89% | 16% |
Бренд2 | 80% | 85% | 5% |
Бренд3 | 63% | 93% | 30% |
Общий | 73% | 89% | 16% |
-
Основы Ускорения Работы Вашего Компьютера
19 Oct, 24 -
Microsoft Наносит Удар По Шпионскому По!
19 Oct, 24 -
Ит-Переезд. Из Бангкока В Сидней
19 Oct, 24 -
Мы Работаем С Usb-Стеком Nrf24Lu1+. Часть 2
19 Oct, 24 -
Новая Жизнь Старому Синтезатору. Часть 2
19 Oct, 24 -
Наш Программируемый Мозг. Часть Третья
19 Oct, 24 -
Что Такое Цифровая Рукописная Подпись (Dhs)
19 Oct, 24