🏢 Ситуация
Операционный директор в панике: склад забит зимними товарами, а популярные позиции кончаются за 3 дня до поставки. Закупки планируются «как в прошлом месяце».
Лена:
«Классика прогноза спроса. Нужен прогноз продаж на 4 недели вперёд по 2000 топовых SKU. Особенность временных рядов: порядок данных — это информация, и все привычные приёмы валидации тут работают иначе. Начни с наивных бейзлайнов — в прогнозировании их побить сложнее, чем кажется.»
🎯 Ваша задача
- Понять компоненты ряда: тренд, сезонность, шум.
- Построить признаки: лаги, скользящие окна, календарь.
- Валидировать честно (без взгляда в будущее) и побить наивный бейзлайн.
📚 Теория
Компоненты временного ряда
- Тренд — долгосрочное направление (магазин растёт).
- Сезонность — повторяющиеся циклы: недельная (пик в выходные), годовая (ёлки в декабре).
- События — праздники, промо, изменения цены.
- Шум — необъяснимая часть.
Наивные бейзлайны — их надо уважать
- Naive: завтра = сегодня.
- Seasonal naive: следующая среда = прошлая среда.
- Скользящее среднее за 4 недели.
В ритейле seasonal naive часто даёт 80% качества сложных моделей. Модель, не бьющая его, — выброшенное время.
Два подхода к прогнозу
- Классические модели ряда (ARIMA, ETS, Prophet): хороши для одного ряда с явной структурой.
- ML на табличных признаках (бустинг): превращаем ряд в таблицу «признаки → значение следующего периода». Для тысяч SKU одной моделью — стандарт индустрии (так побеждали в соревнованиях M5).
Признаки для ML-подхода
- Лаги: продажи 1, 7, 14, 28 дней назад.
- Скользящие статистики: среднее/медиана/std за 7/28 дней (⚠️ окно заканчивается до прогнозируемого дня).
- Календарь: день недели, месяц, праздники, дни до/после праздника.
- Атрибуты SKU и события: категория, цена, флаг промо.
Валидация: только вперёд
Случайный K-fold запрещён: модель увидит будущее. Используем rolling/expanding window: обучение до T → прогноз [T, T+4 недели] → сдвиг → повтор. Это имитирует реальное использование.
Метрики: MAE/WAPE (доля ошибки от объёма) — понятны закупкам; MAPE опасна при нулевых продажах.