def calculate_replenishment(sku_id, store_id, lead_time):
recent_sales = fetch_sales(sku_id, store_id, days=14)
avg_demand = sum(recent_sales) / max(len(recent_sales), 1)
# Накинем 20% сверху, чтобы полка не пустовала. Экспертная эвристика.
safety_stock = avg_demand * lead_time * 0.2
return (avg_demand * lead_time) + safety_stock
Усреднение прошлого — это финансовое самоубийство. Скользящая средняя убивает маржу. Если ядро вашей системы автозаказа выглядит примерно так, сеть ежедневно спонсирует складские площади из чистой прибыли.
В Morana Labs мы строим индустриальный ИИ: предиктивную аналитику, reinforcement learning, тяжелый инференс на edge-железе прямо в закрытых контурах клиентов (данные не покидают периметр). Мы вычищаем подобные куски кода из легаси-систем энтерпрайза регулярно. И каждый раз за этими строками стоят миллионы замороженных рублей.
Симптоматика всегда одинаковая. Директор по закупкам открывает сводку: склад забит, оборачиваемость падает, деньги омертвлены. Операционный директор кричит, что в прайм-тайм полки с трафикогенераторами пустые. Дефицит полки (Out-of-Stock, OOS) и оверсток существуют одновременно. Причина кроется в подходе. Человек с Excel или классическая ERP-эвристика не способны управлять многомерными временными рядами.
Категорийный менеджер физически не может просчитать эластичность спроса на 50 000 SKU по 500 магазинам. Он закладывает риск. За пустую полку его лишат премии, а раздутый склад размажется по корпоративному P&L. Мотивация диктует простое решение: тащить больше, перезакладывать страховые запасы. Итог предсказуем. Неликвид на распределительном центре и упущенные продажи на популярных позициях, потому что бюджет закупок уже вычерпан.
Прогнозирование спроса в ритейле: как срезать оверсток на 25% и убрать дефицит полки
Спрос нелинеен. Это не прямая линия, которую можно экстраполировать из прошлых двух недель. На него влияет сетка факторов, которые человек в принципе не удержит в голове.
Первый слой — каннибализация и гало-эффект. Вы вешаете желтый ценник с минус 30% на премиальную пасту. Продажи этой пасты взлетают. Что происходит с базовой пастой в этот момент? Ее продажи рушатся. Если ваш автозаказ об этом не знает, он привезет стандартную партию базовой пасты, опираясь на ее исторические темпы. Результат — мгновенный оверсток. Гало-эффект работает в обратную сторону: скидка на пиво жестко тащит за собой продажи чипсов.
Второй слой — погода и локация. Дождь бьет по трафику гипермаркетов на окраинах, но поднимает выручку магазинов у дома рядом с метро. Температура напрямую управляет эластичностью спроса на воду, мороженое и уголь для мангалов.
Третий слой — календарные сдвиги. Пасха каждый год в разные дни. Восьмое марта выпадает то на вторник, то на субботу. Поведение покупателя меняется кардинально. Сравнивать текущую неделю с аналогичной неделей прошлого года — ошибка уровня стажера.
Прогноз обязан жить на уровне конкретной гранулы: SKU плюс конкретный магазин. Никаких «в среднем по макрорегиону». В спальном районе подгузники покупают вечером в пятницу, в деловом центре готовые обеды выметают с 12 до 14 часов. Работа с гранулярностью такого уровня требует тяжелых вычислений. Это хардкорный high-load. Чтобы успеть пересчитать потребность всей сети до закрытия окна заказов, инференс должен быть оптимизирован на уровне железа.
Самая разрушительная ошибка алгоритмов в ритейле — обучение на фактических продажах. Если товара не было на полке три дня, в базе логгируется ноль. Простая модель считает, что спрос упал до нуля, и снижает объем следующего заказа. Приходит урезанная партия, ее выметают за пару часов. Снова ноль. Это алгоритмическая спираль смерти.
Реальный спрос равен сумме фактических продаж и неудовлетворенного спроса в периоды дефицита. Восстановление истинного спроса (OOS-реконструкция) — фундамент пайплайна. Модель учится понимать, сколько бы мы продали, если бы товар физически лежал на полке.
Еще один гвоздь в гроб классических систем — виртуальные остатки. ERP думает, что на полке три бутылки дорогого коньяка. Автозаказ молчит. По факту бутылки давно украли или разбили. Интеллектуальный контур выявляет такие аномалии: если предсказанный спрос высокий, вероятность покупки в этот час 95%, а чеков нет уже сутки — генерируется алерт директору магазина на немедленную ручную инвентаризацию.
Внедрение ИИ: архитектура пайплайна под нагрузкой
Прогноз ради дашборда не имеет смысла. Точная цифра в вакууме не приносит денег. Эффект наступает исключительно тогда, когда предиктивная модель напрямую отдает команды в систему автозаказа. Вы должны перевести алгоритмы из режима descriptive (что было) в predictive (что будет), а затем в prescriptive (какой квант отгрузить прямо сейчас).
Работающий пайплайн разворачивается жестко и поэтапно:
- Разметка и очистка. Восстанавливаем дефициты, размечаем промо, вычищаем оптовые аномалии (когда B2B-клиент выкупил весь стеллаж). Сырые данные из БД напрямую в сетку пихать нельзя.
- Feature Engineering. Модель не ест даты. Она ест фичи. Оконные функции, лаги, индикаторы близости зарплатных дней по городу, векторы цен конкурентов.
- Квантильное прогнозирование. Градиентные бустинги или нейросетевые архитектуры для временных рядов. Выдаем не точечный прогноз в вакууме, а квантили, гарантируя покрытие спроса вплоть до p99.
- Слой оптимизации. Транслируем прогноз в заказ. Учитываем кратность коробок, минимальные партии поставщика (MOQ), графики поставок и срок годности (чтобы не заказать объем фреша, который сгниет до реализации).
- Reinforcement Learning. Вместо формул страхового запаса из учебников 90-х натравливаем RL-агента. Его функция потерь штрафует систему за замороженный капитал и одновременно за упущенную маржу из-за пустой полки. Агент балансирует систему математически безупречно.
Математика бьет интуицию эксперта на любом масштабе. Точный гранулярный ИИ-прогноз радикально срезает избыточный страховой запас. Оверсток сжимается на 25%. Высвобождаются гигантские объемы оборотных средств, которые раньше лежали мертвым грузом в паллетах.
Бесперебойная подача товара точно под пик трафика ликвидирует дыры на полках, что моментально дает ап-лифт выручки. Попутно бизнес забирает до 15% прямой экономии на закупках — алгоритм агрегирует потребности точек так, чтобы оптимизировать плотность загрузки фур и минимизировать холостые пробеги логистики.
Перестаньте пытаться угадать спрос. Начните его вычислять.