Чтобы спрогнозировать спрос на складе, сначала отделите спрос от продаж (уберите влияние дефицита, акций, возвратов и разовых заказов), затем разделите ассортимент по ABC/XYZ и посчитайте простые методы: наивный прогноз, скользящее среднее, сезонный профиль. Всё проверяйте на периоде, который метод не видел при настройке. Машинное обучение подключайте только там, где оно обыгрывает простой метод на этой проверке. Страховой запас считайте отдельным шагом: он зависит от разброса ошибки прогноза и срока поставки, а не от самого прогноза.

Прогноз сам по себе ничего не заказывает. Чтобы он стал закупкой, нужны ограничения (минимальная партия, кратность, бюджет, срок годности) и человек, который принимает решение. Ниже порядок работы, таблицы «когда подходит — где ломается», типичные ошибки и чек-лист того, что должно быть готово к старту пилота. Как мы делаем такой расчёт по данным 1С, описано на странице «Прогнозирование спроса и закупок».

Коротко. Сначала простой метод и честная проверка по времени, потом сложная модель, если она выигрывает. Историю нужно очистить от дефицита и акций, ошибку считать на горизонте срока поставки, а страховой запас рассчитывать отдельным шагом. Решение о заказе остаётся у закупщика.

Спрос не равен продажам: что исправить в истории до всякого прогноза

В учёте лежат продажи, а прогнозировать нужно спрос. Они совпадают, только пока товар есть, цена обычная и ничего необычного не происходит. Каждое отклонение — искажение, которое модель выучит как закономерность. Ниже искажения, которые встречаются почти в любой базе.

ИскажениеКак выглядит в данныхЧем опасноЧто делать
ДефицитДни с нулевыми продажами при нулевом остаткеМодель решает, что спрос упал, и заказывает меньше, дефицит повторяетсяВосстановить остаток по дням, пометить такие дни, исключить из обучения или восстановить спрос по соседним периодам и похожим позициям
Акции и скидкиВсплеск продаж, затем провалВсплеск выучивается как сезон, провал после него как падение спросаЗаписывать акции признаком; если они не записаны, разметить периоды вручную по календарю промо
Возвраты и отменыПродажи с минусом; заказы, которые не стали выкупомЗавышенный спрос, особенно где возвраты частыеРешить, что называть спросом (заказ, отгрузка, выкуп), и учитывать возвраты по единому правилу
Разовые крупные заказыОдна отгрузка превышает обычные продажи за месяцПрогноз «прыгает» вслед за выбросомПовторяющийся заказ оставить в истории, разовый учесть отдельно, известный заранее внести планом
Заменители и смена артикуловУ новой позиции нет истории, у старой «спрос ноль»Новый артикул прогнозируется с нуля, старый на спадеСвязать цепочкой замены и перенести историю преемнику
Ограничения продажЛимит на покупателя, предзаказ, резерв под проектПродажи отражают лимит, а не желание купитьПометить такие периоды так же, как дефицит

Удобно оформить первый проход по данным как словарь: что в вашей базе называется спросом, по какой дате он считается (заказа, отгрузки, выкупа), как учитываются возвраты и какие периоды помечены как искажённые. Пока словаря нет, два отчёта по одной позиции дадут разные цифры.

История дефицита требует верных остатков по дням, а это вопрос «кто главный по остаткам», который разбирается в статье «Как выбрать WMS для склада с 1С». Расхождения остатков с площадками разобраны в материале «Остатки 1С и маркетплейса не совпадают», а подготовка данных к проекту в целом — в статье «Как подготовить данные для ИИ-пилота».

ABC и XYZ: что сегментация подсказывает по выбору метода

ABC делит позиции по вкладу (выручка, маржа или оборот): к классу A относится небольшая часть ассортимента с большой долей вклада, к классу C длинный хвост. XYZ делит по стабильности спроса, то есть по тому, насколько продажи по периодам колеблются вокруг среднего (обычно по коэффициенту вариации). Границы классов подбирают под ассортимент, универсальных значений нет. Сетка из двух осей подсказывает, куда вкладывать усилия.

СегментЧто это значитКакой метод разуменНа что смотреть
AX, BXВажные и стабильныеСглаживание или сезонный профиль, простые правилаКачество данных и страховой запас: ошибка мала, а цена сбоя велика
AY, BYВажные, умеренно колеблющиесяСезонный профиль, признаки календаря и акций; проверить, обыгрывает ли модель сглаживаниеСмещение: систематическое завышение замораживает деньги
AZ, BZВажные, но непредсказуемыеМодель с ценами и акциями, прогноз диапазона, а не одного числа; ручная проверкаРазброс ошибки и страховой запас; события, о которых знает закупщик, а данные нет
CX, CYМалозначимые, стабильные или умеренныеПравила min/max или покрытие в дняхНе тратить время на разбор каждой позиции
CZХвост с нестабильным спросомМетоды для прерывистого спроса, группа вместо позиции; решение, держать ли позицию вообщеДоля неходового остатка и правило минимального остатка

Сегментация — это не прогноз, а способ распределить внимание. Пересчитывать её стоит по расписанию, потому что товары переходят из класса в класс. Новинки и позиции с короткой историей по XYZ посчитать корректно нельзя, поэтому для них заводят отдельный класс «мало истории» и считают по аналогам.

Базовые методы и редкие товары: почему начинают с простого

Простой метод — не слабость, а эталон. Любую сложную модель оценивают по тому, насколько она лучше базового прогноза на том же периоде. Если выигрыш не выходит за шум измерения, остаётся простой метод: его проще объяснить закупщику, проверить и сопровождать.

МетодКак считаетсяКогда подходитГде ломается
Наивный прогнозЗначение прошлого периода или того же периода прошлого сезонаЭталон; для очень стабильных позицийПовторяет выбросы и дефицит, не видит тренд
Скользящее среднееСреднее за несколько последних периодов; длина окна подбирается проверкойСтабильный спрос без выраженного сезонаОтстаёт при смене уровня; длинное окно сглаживает нужные пики, короткое повторяет шум
Экспоненциальное сглаживаниеСреднее, в котором свежие периоды весят больше старыхПозиции, где уровень медленно дрейфуетБез учёта сезона и акций пропускает повторяющиеся пики
Сезонный профильУровень, умноженный на индекс сезона по неделям, месяцам или дням неделиПовторяющийся сезон; индексы можно взять с группыНужно не меньше двух циклов; необычный сезон портит индексы

Сезонный профиль требует хотя бы двух полных циклов: с одним годом истории невозможно ни отличить сезон от разового пика, ни проверить профиль на отложенном периоде. В этом случае профиль берут с группы товаров или задают экспертно и честно помечают как непроверенный.

Редкие товары: прерывистый спрос

Когда большинство периодов без продаж, среднее и сглаживание дают неудобный результат: прогноз «треть штуки в неделю» нельзя заказать. У таких позиций две неопределённости: когда случится продажа и какого она будет размера. Методы для прерывистого спроса (их семейство идёт от метода Кростона) оценивают обе по отдельности: средний размер продажи и средний интервал между продажами.

Но и они не решают главного. Для закупки важна не средняя скорость спроса, а то, сколько может уйти за срок поставки с заданной вероятностью. Поэтому для таких позиций оценивают распределение спроса за срок поставки (по истории или симуляцией) и принимают решение о минимальном остатке, а часть позиций вообще выводят из складского ассортимента и переводят под заказ.

Нули при этом должны быть настоящими. Если позиция «редкая» только потому, что её часто не было в наличии, это дефицит из первого раздела, а не прерывистый спрос.

Когда подключать машинное обучение и какие признаки добавлять

Машинное обучение здесь, как правило, означает модели на признаках вроде градиентного бустинга, одна на много позиций сразу. Оно оправдано, когда простые методы упираются в факторы, которых не видят: цены, акции, календарь, смену ассортимента. Условия: много позиций и достаточно истории в целом, размеченные акции, чистая история без дефицита. Одна модель на многие ряды позволяет использовать общие закономерности и может помочь позициям с короткой историей, но это гипотеза, которая проверяется на отложенном периоде.

Признаки добавляют как гипотезы, по одной, каждый раз сравнивая ошибку с признаком и без него. Главное требование к любому признаку: он должен быть известен на момент заказа. Иначе на проверке он «помогает», а в жизни его нет. Это называется утечкой будущего.

ПризнакЗачемГипотеза для проверкиЛовушка
Лаги и скользящие статистики продажУровень и динамикаПоследние недели важнее старыхЕсли считать по продажам с дефицитом, провал воспроизводится сам
Цена и скидкаВлияние цены на спросСнижение цены поднимает продажи этой позиции и сдвигает соседниеЦена меняется вместе с акцией и сезоном, эффекты путаются
АкцииВсплеск и провал после негоЭффект акции повторяется для похожих товаровАкции не записаны или всегда в один сезон, тогда их не отделить
КалендарьДень недели, месяц, праздники, начало месяцаСпрос привязан к календарным событиямДаты праздников сдвигаются; для редких событий мало лет истории
Наличие на начало периодаОтличить низкий спрос от отсутствия товараНизкие продажи при нулевом остатке — не спросОстаток на конец периода на момент заказа неизвестен: это утечка
ПогодаСдвиг сезона у погодозависимых товаровТемпература сдвигает пик спросаНужен прогноз погоды на горизонт, а не факт; польза проверяется, а не предполагается

Правила отбора простые. Признак остаётся, если улучшает ошибку на нескольких сдвигах проверки, а не на одном. Модель остаётся, если выигрыш у базового метода заметен в тех сегментах, где он важен (классы A и Z), а не только в среднем по ассортименту. Если выигрыша нет, остаётся простой метод.

Отдельно о языковых моделях: прогноз по табличной истории — не их задача. Они могут пригодиться для текстового пояснения рекомендации, но числа должен считать код, который можно проверить и воспроизвести.

Как проверять прогноз: разбиение по времени, горизонт и метрики

Разбиение по времени

Данные делят не случайно, а по дате: обучаются на прошлом, проверяют на следующем периоде. Случайная выборка даёт завышенно хорошие цифры, потому что соседние дни почти одинаковы: модель видела вчера и позавчера, а проверяют на сегодняшнем. Одной границы мало. Её сдвигают несколько раз и смотрят на разброс результата: метод, который выигрывает на одном сдвиге и проигрывает на трёх, выбран случайно.

Горизонт

Закупка отвечает за спрос за срок поставки плюс интервал между заказами. Поэтому ошибку считают на сумме прогнозов и фактов за этот период, а не по дням. Дневные ошибки частично гасят друг друга при суммировании, так что качество «по дням» и качество «за срок поставки» — разные числа, и для закупки важно второе.

Метрики и их ловушки

МетрикаЧто показываетЛовушка
Средняя абсолютная ошибкаТипичный промах в штукахНесопоставима между позициями: пять штук для редкой и для ходовой позиции — разные вещи
Средняя процентная ошибка по позициямПромах в долях фактаВзрывается на малых и нулевых продажах; завышение карает сильнее занижения; хвост тянет среднее
Взвешенная ошибкаСумма абсолютных ошибок относительно суммы продажДоминируют крупные позиции, провал на хвосте не виден; считать по сегментам
СмещениеЗнак и величина систематической ошибки: завышаем или занижаемПлюс по одним группам гасит минус по другим; считать по группам и по поставщикам
Среднеквадратичная ошибкаНаказывает крупные промахиЧувствительна к выбросам: одна разовая отгрузка искажает всю оценку
Ошибка относительно наивного прогнозаЛучше метод эталона или хужеБез неё из абсолютных чисел не видно, обыграна ли простая линия

Ни одна метрика не достаточна. Практический набор: взвешенная ошибка по сегментам, смещение по группам и сравнение с наивным прогнозом, всё на горизонте срока поставки. Если прогноз выдаётся не числом, а границей (например, «с высокой вероятностью спрос за срок не превысит такое-то количество»), проверяют калибровку: доля периодов, в которых факт оказался выше границы, должна совпадать с заявленной.

Метрики прогноза — не бизнес-результат. Дополнительно проверяют правило заказа на истории: сколько было бы дней без остатка и сколько запаса лежало бы лишним. Эта проверка приблизительна, потому что реальная история уже искажена прошлыми решениями о закупке и дефицитом, поэтому её цифры называют оценкой, а не результатом.

Страховой запас: как связаны ошибка прогноза и срок поставки

Страховой запас покрывает две неопределённости: спрос оказался выше прогноза и поставка пришла позже срока. Стандартная форма расчёта для одной позиции:

Страховой запас = z × σ × √L

Здесь σ — стандартное отклонение ошибки прогноза за один период (именно ошибки, а не самого спроса), L — срок поставки в тех же периодах, z — коэффициент уровня сервиса из таблицы нормального распределения: чем выше нужный уровень, тем больше z. Если срок поставки сам колеблется, добавляется второй источник разброса:

Страховой запас = z × √(L × σ² + d² × σ_L²)

Здесь d — средний спрос за период, σ_L — стандартное отклонение срока поставки. Условный пример: ошибка прогноза за неделю σ = 8 штук, срок поставки L = 4 недели. Тогда σ × √L = 8 × 2 = 16 штук, и запас равен 16 × z. При прочих равных запас растёт как корень из срока: срок вырос в четыре раза — запас вырос примерно вдвое. А если срок ещё и «плавает», второе слагаемое под корнем может оказаться заметнее первого.

Допущения, без которых формула врёт:

  • Ошибки в разные периоды независимы. На практике они часто связаны, и тогда формула занижает запас, поэтому ошибку лучше измерять сразу на сумме за срок поставки.
  • Ошибки близки к нормальному распределению. Для редких товаров с множеством нулей это не так, и там считают по эмпирическому распределению спроса за срок или симуляцией.
  • Прогноз несмещён. Систематическое занижение не лечится запасом, его исправляют в самом прогнозе.
  • Срок поставки берётся по фактическим поступлениям (распределение), а не из карточки поставщика.
  • Если заказы делаются не в любой день, а с интервалом пересмотра, горизонт — срок поставки плюс интервал между заказами.

Уровень сервиса — решение бизнеса, а не математики: цена дефицита против цены хранения. Его выбирает владелец процесса, обычно разный для разных классов. Формулой выше задаётся вероятность не остаться без товара за цикл заказа; это не то же самое, что доля удовлетворённого спроса, и цели надо различать.

Не путайте страховой запас закупки с запасом-буфером при выгрузке остатков на маркетплейс: тот страхует от задержки обмена и описан в статье про расхождения остатков.

От прогноза к заказу: минимальная партия, кратность, бюджет, срок годности

Прогноз и запас — это ещё не заказ. Порядок превращения в закупку примерно такой:

  1. Горизонт. Срок поставки плюс интервал между заказами.
  2. Целевой уровень. Ожидаемый спрос за горизонт плюс страховой запас за тот же горизонт.
  3. Позиция запаса. Остаток плюс заказанное и находящееся в пути, минус резервы под заказы покупателей.
  4. Потребность. Целевой уровень минус позиция запаса; если получилось ноль или меньше, заказ не нужен.
  5. Ограничения. Округление до кратности, минимальная партия, срок годности, вместимость.
  6. Сборка по поставщику. Минимальная сумма заказа, заполнение машины, дни приёма заказов.
  7. Решение закупщика. Он видит рекомендацию, основание и ограничения, правит и проводит заказ.
ОграничениеКак влияет на рекомендациюГде ломается
Минимальная партияЗаказ либо ноль, либо не меньше партииДля редких позиций партия покрывает месяцы спроса; проще не держать позицию, и это решение по ассортименту, а не по прогнозу
Кратность упаковкиОкругление до целой упаковки или паллетыОкругление всегда вверх даёт скрытое смещение в сторону избытка по всему ассортименту
БюджетОграничивает сумму заказов за периодПропорциональное урезание ломает приоритеты; резать нужно по важности и риску дефицита
Срок годностиПотолок объёма: успеть продать до конца срокаОстаточный срок при поставке меньше полного; нужен учёт партий
Условия поставщикаЗаказ собирается по поставщику, а не по позицииМинимальная сумма и дни приёма заказов могут противоречить оптимуму по отдельной позиции

Вместимость склада и места хранения ограничивают заказ сверху, но эти данные живут в складской системе: как они попадают в 1С, описано на странице «Интеграция 1С с WMS», а порядок на самом складе — в статье «Автоматизация склада: с чего начать». Данные продаж с маркетплейсов подключаются отдельным источником, см. интеграцию 1С с маркетплейсами.

Цикл пересмотра и ручные правки закупщика

Прогноз стареет. Рабочий цикл выглядит так: данные обновляются, прогноз пересчитывается в ритме закупок, закупщик получает рекомендации, принимает или правит их, заказ уходит, факт попадает в данные, качество измеряется. Реже, по расписанию, пересматриваются сегменты ABC/XYZ, параметры методов и выбор модели.

Ручные правки — не враг, а источник информации, если их записывать:

  • каждая правка хранится со значением до и после, причиной (акция, проект, проблема у поставщика, «чувствую») и автором;
  • через период сравнивают три числа: рекомендацию, правку и факт;
  • правки по событиям, которых нет в данных (проект, акция, перебои у поставщика), полезно превращать в данные: в признак или строку плана;
  • правки «на всякий случай» видны по смещению. Если закупщик системно добавляет, значит, страховой запас считается неверно или ему не доверяют, и это разбирают, а не запрещают правки.

Мониторинг строится вокруг нескольких сигналов: доля позиций, где сложная модель проигрывает простой на свежих данных; смещение по группам; число неожиданных дефицитов; рост числа правок. Рост любого из них — повод остановиться и проверить, а не ждать отчёта о потерях. Как решается вопрос об остановке пилота, описано в статье «Когда останавливать пилот ИИ-проекта».

Типичные ошибки

  • Оптимизируют одну ошибку на весь ассортимент. Средняя ошибка по всем позициям — это в основном ошибка ходовых. Хвост и важные нестабильные позиции тонут в ней, поэтому метрики считают по сегментам.
  • Смотрят на среднее вместо хвоста. Метод хорош «в среднем», а закупщик ловит дефицит на самых дорогих позициях. Нужно смотреть на распределение ошибок и на сегмент AZ.
  • Обучают на данных с дефицитом. Модель воспроизводит прошлые провалы наличия и заказывает меньше, чем нужно.
  • Проверяют на случайной выборке. Метрики красивые, а на следующем месяце результат другой.
  • Не сравнивают с простым методом. Сложная модель с приличной ошибкой выглядит успехом, пока кто-нибудь не посчитает скользящее среднее.
  • Путают страховой запас с прогнозом. Завышают прогноз «на всякий случай» вместо расчёта запаса: смещение прячет реальную ошибку, а запас становится невидимым.
  • Игнорируют ограничения закупки. Рекомендация меньше минимальной партии или не кратная упаковке не вызывает доверия, и ею перестают пользоваться.
  • Включают автозаказ с первого дня. Нет обратной связи, нет границ, и первая ошибка модели превращается в заказ поставщику.
  • Нет владельца процесса. Некому решить, какой уровень сервиса допустим и что важнее: дефицит или замороженные деньги.

Чек-лист: что должно быть к старту пилота

Для одной товарной группы или одного склада:

  • выгрузка продаж с датами и ценами за период, включающий не меньше двух сезонов, если сезон важен; при короткой истории честная пометка, что сезон не проверяется;
  • история остатков по дням для тех же позиций или возможность её восстановить из движений учёта;
  • выгрузка заказов поставщикам и поступлений с датами, чтобы получить фактический срок поставки;
  • словарь данных: что такое спрос, по какой дате он считается, как учитываются возвраты и отмены;
  • журнал акций и цен (если он ведётся), список заменителей и цепочек артикулов;
  • закупочные условия таблицей, а не в голове закупщика: минимальная партия, кратность, поставщик, срок годности;
  • закупщик, готовый сравнивать рекомендации со своим решением, и владелец процесса, который выберет уровень сервиса;
  • критерий приёмки, записанный до расчётов: метрика, горизонт, сегменты и размер выигрыша у простого метода, при котором пилот считается успешным;
  • договорённость, что делаем, если модель не обыграла простой метод: остаёмся на простом, и это не провал;
  • доступ к 1С на чтение (лучше к копии базы) и согласование с безопасностью.

Эффект в деньгах до пилота не обещают: как его считать на ваших данных, разобрано в статье «Как посчитать ROI от внедрения ИИ». О том, как вообще подключают ИИ-решения к 1С, есть отдельная статья: «Как подключить ИИ к 1С».

Если проверить это за неделю самостоятельно не получается, подойдёт обследование: 200 000 ₽ за одну-две товарные группы или склад, 2–3 недели, сумма вычитается из следующего этапа. Цены и сроки всех ступеней — на странице тарифов. На выходе карта процесса, словарь данных, требования к данным, план по этапам и вилка бюджета, а исходники и документация остаются у вас. Услуга описана на странице «Прогнозирование спроса и закупок».

Частые вопросы

Сколько истории нужно для прогноза спроса на складе?

Зависит от задачи. Для учёта сезона нужно хотя бы два полных цикла, иначе сезон не отличить от разового пика. Для стабильных позиций хватает меньшего периода. У редких товаров истории часто мало в принципе, и для них работают прогноз по группе и простые правила. Точный ответ даёт проверка на вашей выгрузке.

Какую метрику ошибки выбрать: MAPE, WAPE или смещение?

Одной недостаточно. Практический набор: взвешенная ошибка по сегментам, смещение по группам и сравнение с наивным прогнозом, всё на горизонте срока поставки. Процентную ошибку по позициям используют осторожно: она взрывается на малых продажах и сильнее карает завышение.

Нужно ли машинное обучение для прогноза спроса?

Не всегда. Если ассортимент небольшой, история короткая или спрос определяют проекты, достаточно простых методов и правил. Машинное обучение подключают, когда есть цены, акции, календарь, достаточная история и модель на отложенном периоде заметно обыгрывает простой метод.

Как прогнозировать спрос на новый товар без истории?

По аналогам из вашего ассортимента: группа, цена, назначение. Ориентир показывают закупщику с пометкой, что это оценка, и он может задать свой. По мере продаж подключается собственная история позиции, а первые недели после запуска считают отдельно, чтобы всплеск новизны не попал в базовый уровень.

Как учитывать акции в прогнозе?

Акцию записывают признаком, и модель оценивает эффект: всплеск и провал после него. Если акции нигде не записаны или всегда проходили в один сезон, их эффект нельзя отделить от обычного спроса. Тогда начинают с журнала акций и не обещают точной оценки.

Как рассчитать страховой запас?

Исходная форма: коэффициент уровня сервиса, умноженный на стандартное отклонение ошибки прогноза за период и на корень из срока поставки. Если срок колеблется, добавляется второй источник разброса. Допущения важны: независимость и близость к нормальному распределению ошибок, несмещённый прогноз. Для редких товаров считают по эмпирическому распределению спроса за срок.

Можно ли заказывать по прогнозу автоматически, без закупщика?

Технически можно, но мы не включаем автозаказ с первого дня. Сначала рекомендации идут закупщику параллельно с его решением, ведётся журнал правок, сравниваются рекомендация и факт. Решение об автоматизации части позиций принимает владелец процесса, когда есть записанный критерий и границы.

Как понять, что прогноз перестал работать?

Следить за ошибкой и смещением на свежих данных, за долей позиций, где сложная модель проигрывает простой, за числом неожиданных дефицитов и ростом ручных правок. Рост этих сигналов — повод остановиться и разобраться, а затем вернуть проблемные позиции к простому методу.

Сколько стоит прогноз спроса по данным 1С?

По тарифам: обследование одной-двух товарных групп или склада — 200 000 ₽ и 2–3 недели, нескольких систем — 350 000 ₽ и 3–4 недели; цена точная и вычитается из следующего этапа. Лёгкий пилот — 150 000 – 400 000 ₽, 2–8 недель; несколько складов с возвратом в 1С — 400 000 – 1 200 000 ₽, 2–3 месяца. Вывод в продуктив — от 1 500 000 ₽ этапами, сопровождение — от 20 000 ₽ в месяц.