Почему прогнозирование продаж ломается на сезонных сдвигах
Ручное планирование обычно выглядит так: берут продажи прошлого периода, умножают на коэффициент и добавляют запас «на всякий случай». Пока спрос ровный, такая таблица попадает в цель. Но сезонные колебания спроса редко повторяются день в день — пик сдвигается на две-три недели, и закупка приходит к концу всплеска, когда полка уже пуста.
Второй источник промаха — запаздывание данных. Факт из учётной системы приезжает выгрузкой раз в сутки или реже, часть каналов закрывается с задержкой в несколько дней, а решение о закупке и отгрузке принимается раньше, чем видно текущее движение. Отдельно расходятся справочники: в рознице, на маркетплейсах и в опте один товар живёт под разными кодами и в разных единицах, поэтому свести каналы в одну картину вручную не получается.
Акции и новинки ломают историю ещё сильнее. Всплеск от распродажи в данных выглядит как устойчивый рост, его переносят в будущий план и закупают лишнее. Новый товар приходит без сезонного профиля и без понимания, какие позиции он заберёт у соседних.
Цена ошибки двойная: склад заполняется тем, что не продаётся, а по ходовым позициям возникает дефицит и упущенная выручка, которую уже не вернуть. Разбираем, как это закрывается: где в контуре прогнозирования продаж появляются данные, как считаются сезонные индексы и как план сверяется с фактом.
Что даёт управляемый прогноз спроса: эффект в цифрах
Эффект от модели виден не в отчётах об обучении, а в операционных метриках: как часто ходовой товар кончается, сколько оборотных средств замерло на складе, насколько ровно загружены площади и смены. Ниже четыре измерения, по которым мы сравниваем состояние до и после запуска прогнозирования продаж.
Точность прогноза на дневном и недельном горизонте
Модель на CatBoost считает прогноз по каждой позиции отдельно, а не по средней категории: история отгрузок, сезонность, промо-календарь, доступность товара на полке. На дневном горизонте ошибка по ходовым позициям сокращается примерно вдвое — закупка идёт от прогноза, а не от среднего за прошлый период.
Дефицит ходовых позиций
Раньше всплеск спроса обнаруживался по факту — когда полка уже пуста, а поставка придёт через неделю. Интервальная оценка прогноза поднимает сигнал заранее: доля дней «нет в наличии» по топу сокращается в разы, а упущенный спрос не уходит в отмены и переход к конкуренту.
Замороженные остатки и оборачиваемость запасов
Обратная сторона ручного плана — страховой запас «на всякий случай» по всему ассортименту. Модель задаёт разную глубину запаса для стабильных и волатильных позиций: оборачиваемость запасов ускоряется, доля неликвида и товара, пережившего свой сезон, падает на треть.
Снятый класс ошибок планирования
Промо, скачок цен, задержка поставки — ручной план ломается целиком и молча. Мы проверяем прогноз на устойчивость и помечаем позиции с высокой неопределённостью для ручного решения: класс ошибок «сдвиг заметили слишком поздно» уходит, изменение спроса видно за недели до дефицита.
Форматы моделей прогнозирования продаж: регрессия и ансамбли
Выбор модели прогнозирования продаж диктует структура данных, а не сложность алгоритма: длина истории, горизонт планирования, число рядов и то, как часто появляются промо, смена цены и новые позиции. Ниже — четыре реальные альтернативы, между которыми обычно идёт выбор, с честными ограничениями каждой.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Простая регрессия на лагах и признаках | Устойчивый тренд, десятки рядов, горизонт в пределах одного цикла сделки | Не держит нелинейные взаимодействия «промо × канал», разъезжается на редких событиях |
| Сезонные модели (декомпозиция и экспоненциальное сглаживание) | Выраженная недельная или годовая сезонность, стабильная история на два сезона и больше | Тяжело переживает структурные сдвиги и открытие новых точек, параметры нужно перенастраивать вручную |
| Ансамбль моделей (градиентный бустинг на деревьях и на временных рядах) | Сотни и тысячи позиций, десятки признаков, частая цена и промо | Нужны витрина признаков и мониторинг дрейфа: без него ошибка растёт незаметно, объяснимость ниже |
| Гибридный подход: модель плюс правила экспертов | Запуск новых категорий, дефицит истории, жёсткие правила по минимальной партии и лимитам склада | Правила надо версионировать и поддерживать, есть риск зашить в них мнение эксперта вместо данных |
На практике вариант не выбирают «на глаз»: сначала считаем базовый прогноз и наивную модель как точку отсчёта, затем прогоняем кандидатов на скользящем окне и смотрим ошибку отдельно по топовым позициям, новинкам и промо-неделям. Часто итогом становится ансамбль или гибрид — но уже с цифрами, показывающими, где именно сложная модель выигрывает у простой.
Как мы внедряем прогнозную модель: этапы работы
Прогноз продаж перестаёт приносить пользу, когда его строят в отрыве от данных и от процесса планирования. Поэтому маршрут начинается не с выбора алгоритма, а с аудита источников, и заканчивается приёмкой качества прогноза на вашей стороне — на согласованных метриках, а не на обещаниях.
- Аудит данных. Разбираем источники: учётную систему, склад, веб-аналитику, выгрузки из маркетплейсов. Смотрим глубину истории, задержки поступления, дубли, пропуски и смену справочников — фиксируем, чего не хватает и что придётся восстанавливать.
- Схема и витрина. Согласуем гранулярность (день или неделя, точка продаж, товарная группа), ключи и правила пересчёта истории. Получаем воспроизводимый слой, из которого модель берёт данные одинаково при каждом запуске.
- Проектирование признаков. Сезонность и календарные лаги, акции, цены, наличие, поведение постоянных клиентов. Каждый признак проверяем на устойчивость по годам и на отсутствие утечки данных из будущего.
- Обучение и валидация модели. Историю делим по времени, а не случайно: иначе качество на проверке оказывается завышенным. Сравниваем результат с простым базовым прогнозом и с текущим планированием, смотрим ошибку отдельно по горизонтам и группам товаров.
- Внедрение прогноза. Обновление по расписанию, выдача в удобном контуре — отчёт, витрина или прямая передача в вашу систему. Сразу настраиваем мониторинг: расхождение факта с прогнозом, деградация, сдвиг сезонности.
- Приёмка и передача в эксплуатацию. Регламент переобучения, разбор инцидентов, обучение вашей команды. Приёмка идёт по метрикам качества прогноза, зафиксированным до начала работ.
Каждый этап закрывается артефактом: схемой данных, набором признаков, отчётом о качестве, регламентом. Если на аудите видно, что данных для честного прогноза не хватает, скажем об этом до старта, а не после.
Что вы получаете на руки: артефакты и регламенты
Передаём не отчёт с графиком, а работающий контур прогнозирования: от описания источников до регламента, по которому модель обновляет ваша команда. У каждого артефакта есть владелец и версия в репозитории, состав фиксируется при сдаче — решение можно развивать своими силами или передать другому подрядчику без археологии по коду.
- Схема потоков данных — какие системы отдают факты продаж, с какой периодичностью, где происходит очистка и агрегация и какие поля обязательны на входе модели.
- Словарь метрик — единые определения выручки, отгрузок, возвратов и периода признания; согласуем до старта, чтобы прогноз и отчётность считали одно и то же одинаково.
- Настроенный контур пересчёта — прогноз обновляется по расписанию, ведётся журнал запусков, при сбое приходит оповещение с указанием упавшего шага.
- Регламент переобучения — триггеры (просадка качества, смена ассортимента или промо-календаря), порядок запуска и критерии приёмки новой версии модели.
- Контроль дрейфа — сравнение распределения входных данных и целевой переменной с эталонным периодом, отчёт «прогноз против факта» по группам товаров.
- Регламент эксплуатации — кто владеет моделью, как откатиться на предыдущую версию, что делать при деградации качества и куда обращаться при инциденте.
- Документация и обучение команды — описание признаков, инструкции по запуску, разбор типовых сбоев и практические занятия с вашими аналитиками.
Кейс: точность планирования в рознице до и после
Сеть с тремя каналами сбыта — розничные точки, интернет-магазин и маркетплейсы — планировала поставки в электронных таблицах. Закупщик брал средние продажи за прошлый период и вручную правил их под акции, а решение о дозаказе принималось по текущему остатку и опыту.
Что было до внедрения
Базовую линию снимали две недели по трём группам метрик: доля позиций в дефиците, объём избыточных запасов и трудозатраты планировщиков. На старте дефицит держался на 11–14% ассортимента, оборачиваемость товарных запасов доходила до 74 дней, а двое планировщиков тратили на пересчёт плана около 30 часов в неделю.
Что изменилось после
Модель считает спрос на уровне «позиция — точка — неделя», отдельно учитывает промо, сезонность и график поставок, пересчёт идёт ежедневно. Планировщик больше не строит план с нуля: он разбирает только позиции с отклонением выше порога — это 5–8% ассортимента. Такой переход мы делали для сети «Меридиан».
За два квартала дефицит опустился до 4–6%, оборачиваемость сократилась до 51 дня, точность отгрузок в срок выросла с 82% до 96%, а списания по срокам годности упали почти вдвое. Трудозатраты на планирование — около 9 часов в неделю вместо 30; высвободившееся время ушло на работу с поставщиками и локальные акции.
Чем потоковый пересчёт отличается от ночного пакетного
Разница в том, в какой момент считается прогноз. При пакетном пересчёте задание раз в сутки читает всю историю продаж, переобучает модель и записывает результат в витрину — до следующего запуска числа не меняются. Задержка прогноза равна периоду расписания, зато нагрузка на систему предсказуема: тяжёлый пересчёт идёт ночью, когда с ним конкурируют только регламентные выгрузки.
Потоковое обновление работает по событиям: заказ, возврат, изменение остатка попадают в очередь, и модель пересчитывает прогноз по мере поступления. Задержка падает до минут, но нагрузка становится ровной и круглосуточной, а к модели добавляется контроль смещения — иначе потоковый пересчёт постепенно уводит прогноз в сторону, и это замечают только по факту промаха.
Потоковый режим оправдан там, где на прогнозе стоят действия: динамическая цена, пополнение склада, приоритет отгрузки, отсечение подозрительных заказов. Где решение принимается раз в неделю — план закупок, бюджет, загрузка производства — ночного пакетного пересчёта достаточно, и он дешевле в сопровождении.
На практике чаще ставят гибрид: ночью модель переобучается на полной истории, днём поток дообучает её на свежих данных и пересчитывает только затронутые позиции. Такое расписание мы собираем в Apache Airflow — один контур отвечает и за пакетный пересчёт, и за потоковое обновление, поэтому расхождение между витриной и моделью не накапливается.
Частые технические сомнения перед стартом
Перед стартом обсуждаем не выбор модели, а два вопроса: хватает ли данных и как прогноз встроится в текущий учётный контур. Ниже — четыре сомнения, которые чаще всего тормозят проект, и как мы их закрываем.
Сколько истории нужно, чтобы прогноз работал?
Для сезонных рядов нужно минимум два полных годовых цикла, лучше три: иначе тренд не отделяется от разового всплеска. При короткой истории подключаем внешние ряды — акции, праздники — и стартуем с прогноза по категориям, а не по каждой позиции.
Данные лежат в разных системах — это помеха?
Помеха не в разрозненности, а в отсутствии общего ключа. Сводим учёт, кассы, склад и интернет-магазин в единый слой, справочники товаров и точек приводим к одному идентификатору. Расхождения не прячем, а показываем: несходимость остатков в пару процентов обычно объясняет часть ошибки прогноза.
Как прогнозировать новинки, по которым нет истории?
По новому артикулу учить нечего, поэтому переносим закономерности с похожих позиций — по категории, ценовому сегменту, сезону и полке. Первые недели прогноз идёт по группе, дальше вес собственных продаж растёт, и модель переходит на историю самого товара.
Как встроить прогноз в учётную систему?
Учёт не подменяем: прогноз возвращается в него выгрузкой с разбивкой по горизонтам и версиями, чтобы любую версию можно было пересчитать и сравнить с фактом. Планировщик остаётся в привычном интерфейсе и видит рядом прогноз, факт и отклонение.
Обсудим вашу задачу и вернёмся с планом работ
Чтобы обсуждение задачи превратилось в расчёт сроков, а не в пересказ общих слов, начнём с разговора о ваших данных и процессе планирования. Нам важно понять, какие источники истории продаж доступны, с какой детализацией и что уже известно о будущем периоде: от этого зависит и класс модели, и объём работ.
- какие выгрузки есть сейчас — глубина истории, детализация по точкам и каналам, полнота данных по возвратам и отменам;
- что известно о будущем периоде: график акций и скидок, поставки, сезонные ограничения, изменения ассортимента;
- как план строится сегодня, кто им пользуется и как часто он пересчитывается — от этого зависит горизонт прогноза;
- какие системы отдают данные и можно ли забирать их по расписанию, без ручных выгрузок;
- какая ошибка прогноза критична: переоценка ведёт к затовариванию склада, недооценка — к дефициту и упущенным продажам;
- кто со стороны заказчика отвечает за данные, приёмку результата и дальнейшую эксплуатацию.
Возвращаемся с планом работ: перечень этапов, оценка сроков по каждому, состав команды и требования к данным, которые нужно закрыть до старта. Отдельно описываем передачу модели — документацию по признакам и метрикам качества, обучение вашей команды, порядок переобучения и контроль точности после запуска. Опишите задачу — вернёмся с оценкой и планом.







