Планирование продаж и прогнозирование спроса в розничной торговле часто означает необходимость корректировки будущих продаж для некоторых особых дат и/или периодов, таких как промо-акции или праздники. Как прогнозировать продажи? Те ажиотажные продажи, которые мы наблюдаем до или после официальных, неофициальных или религиозных праздников, часто обусловлены “естественными” потребительскими привычками: покупатели хотят “накрыть большой стол” для масштабного празднования или, наоборот, пополнить свои запасы после такового. Иногда они пользуются значительными скидками, или у них просто достаточно свободного времени (по причине официальных выходных дней) для шопинга в период праздников. Возникает вопрос: «Как составить прогноз продаж?».
В RBC Group, мы всегда учитываем календарь национальных праздников в наших прогнозных моделях. Некоторые алгоритмы, которые мы иногда используем для того, чтобы сделать прогноз продаж, такие как Prophet, уже имеют довольно удобный встроенный функционал для моделирования праздников и повторяющихся событий. Кроме того, он позволяет легко задать “праздничные” дни в пределах некоторого окна вокруг определенной даты. Например, вы вполне обосновано можете объединить Сочельник и Рождество, или захотите использовать Черную пятницу как дополнение ко Дню благодарения. Давайте разберемся, как решить такую задачу автоматически, чтобы сделать прогноз продаж.
Реальная проблема заключается в том, чтобы решить, какой размер окна использовать в каждом конкретном случае, так как у каждого нашего клиента — своя специфика бизнеса. Следовательно, необходимо ответственно подойти к вопросу: «Как построить прогноз продаж?». Таким образом, настройка праздничного окна может осуществляться либо исключительно с учетом экспертных знаний владельца бизнеса (хотя это может быть и не лучший способ), либо аналитически (то, как мы предпочитаем это делать). В последнем случае основная идея заключается в сборе статистических данных о продажах, связанных с праздниками, в течение исторического периода и расчете среднего окна для каждой такой особенной даты, чтобы охватить все “ажиотажные” продажи. Как рассчитать прогноз продаж? Далее мы продемонстрируем такой подход на наборе из знаменитого M5 Forecasting — Accuracy competition на Kaggle.
После загрузки данных мы сузим нашу первичную обработку данных до одного штата – «Калифорния» (просто для упрощения):
Так как мы не собираемся работать на уровне «магазин-товар«, нам нужно объединить все три набора данных и присвоить наш целевой показатель – «ежедневные продажи» – как продукт в колонках «количество» и «цена продажи» .
Далее, мы будем суммировать продажи для всех магазинов в штате Калифорния, чтобы получить ежедневные продажи компании. Теперь мы можем установить правило для маркировки “ажиотажных” продаж, связанных с праздниками — для этой демонстрации мы будем рассматривать их как те, которые выше 7-дневного скользящего среднего.
Для того, чтобы “ажиотажные” продажи считались «связанными с праздниками» необходимо, чтобы они имели место непосредственно до или после праздничного дня, т.е. непосредственно примыкали к событию. На графике можно легко наблюдать такие продажи над черной кривой (7-дневное скользящее среднее) вблизи красных вертикальных линий (праздники и особые мероприятия):
Далее приведено аналитическое отображение диаграммы (1 – выше обычных продаж, 0 – обычные продажи). С помощью такой таблицы можно без проблем рассчитать среднее (годовое) число близлежащих дат к каждому празднику.
Составление прогноза продаж можно считать оконченным после завершения расчета, и мы можем полностью автоматически получить наш праздничный календарь, например, в формате для последующего использования в Prophet.
Теперь пришло время оценить эффективность модели Prophet с/без использования праздников в качестве дополнительной опции для прогнозирования продаж (мы проведем наш тест на 143 наблюдениях 2016 года, заранее исключенных изо всех предыдущих расчетов):
Посмотрите, насколько заметно модель улучшила прогнозирование объемов продаж для дней непосредственно перед Суперкубком (2016-02-07), Пасхой (2016-03-27) или Синко де Майо (2016-05-05). Таким образом, становится понятно, как спрогнозировать объем продаж в зависимости от праздничных дней. Все эти изменения были произведены с помощью нескольких строк кода с учетом исключительно исторических данных о продажах. У каждого мероприятия есть отдельное окно для дальнейшего моделирования в зависимости от особенностей бизнеса, в то время как мы использовали общий календарь с датами праздников в качестве основных входных данных, чтобы осуществить прогнозирование объема продаж.