Точность прогноза запасов определяется свойствами спроса, а не выбором модели. На позиции, которая расходится каждую неделю ровным потоком, простое среднее за три месяца даст ошибку 15–20 % на месяц вперёд, и никакая нейросеть не улучшит её вдвое. На позиции, которая продаётся четыре раза в год по одной штуке, ошибка будет 100 % и больше у любого метода — потому что предсказывать там нечего. Поэтому первый шаг проекта — не выбор системы, а разделение номенклатуры на то, что прогнозируется, и то, что не прогнозируется в принципе.

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

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

Три группы номенклатуры и реальная ошибка в каждой

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

ГруппаПризнак по историиВ модели из 500 позицийОшибка на месяц вперёдЧем управлять
Стабильный спросПродажи не реже чем в 3 неделях из 4, недельные объёмы отличаются меньше чем в полтора раза140 позиций, 6 600 000 ₽ запаса12–20 %, в модели 15 %Прогноз плюс точка заказа, пересчёт норм раз в месяц
Сезонный спросПродажи регулярные, но с выраженным годовым профилем; нужно минимум два полных цикла истории90 позиций, 2 750 000 ₽ запаса25–35 %, в модели 30 %Прогноз с сезонным коэффициентом плюс ручное решение по объёму закупки под сезон
Редкий штучный спросПродажи реже чем в 1 неделе из 4, часто по 1–2 штуки270 позиций, 1 650 000 ₽ запаса80–150 % и вышеПрогноз не применяется: правило минимального запаса или заказ под клиента

Итог этой таблицы важнее самих цифр: прогноз имеет смысл на 230 позициях из 500, но эти 230 держат 9 350 000 ₽ из 11 000 000 ₽ запаса — 85 % замороженных денег. Остальные 270 позиций — половина карточек и 15 % денег. Работать с ними моделью бессмысленно, а вот регулярно вычищать из них залежавшееся — обязательно, и это отдельная задача: разбор ассортиментной матрицы и неликвида.

графикprognoz-zapasov-na-sklade--01
Столбиковая диаграмма ошибки прогноза по трём группам: 15, 30 и 118 процентов

Столбиковая диаграмма из трёх столбцов, ось Y — средняя ошибка прогноза на месяц вперёд в процентах. Столбцы: «Стабильный спрос, 140 позиций» — 15 %, «Сезонный, 90 позиций» — 30 %, «Редкий штучный, 270 позиций» — 118 %. Под каждым столбцом второй подписью доля запаса в деньгах: 60 %, 25 %, 15 %. Через диаграмму горизонтальная пунктирная линия на 35 % с подписью «граница, за которой прогноз перестаёт быть основанием для закупки». Чертёжный стиль, подписи по-русски.

Ошибка задаётся группой спроса, а не моделью: на редких позициях она не лечится
Что это значитОшибка прогноза

Средняя абсолютная процентная ошибка: по каждой позиции берём модуль разницы прогноза и факта, делим на факт и усредняем по всем позициям. У метрики есть неприятное свойство — при малых продажах она разлетается: промах на одну штуку при факте в две даёт 50 %, а при факте в одну — 100 %. Поэтому 118 % на редкой группе — не аномалия расчёта, а свойство самой задачи.

Почему история продаж — это не история спроса

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

Сколько спроса не видно в истории продаж, одна позиция за год
Продано по данным учёта за год430 шт
Рабочих дней в году250
Дней, когда остаток по позиции был нулевым47
Средние продажи в дни, когда товар был: 430 ÷ 2032,12 шт/день
Ненаблюдённый спрос за дни дефицита: 47 × 2,12100 шт
Надбавка на отказы, не дошедшие до менеджера (клиент увидел ноль на сайте) — 15 % к ненаблюдённой части15 шт
ИтогоРеальный спрос — около 545 штук против 430 в истории. Модель, обученная на сырой истории продаж, занижает потребность на 21 %

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

Минимальный набор данных: что нужно и чего обычно нет

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

ДанныеГде обычно лежатЧто ломается без них
Продажи по позициям с датами, минимум 24 месяцаДокументы реализации в учётной системеМеньше двух полных циклов — сезонность неотличима от тренда, и модель принимает прошлогодний всплеск за рост
Признак дефицита: дни с нулевым остатком по позицииРегистр остатков на дату; чаще всего история остатков не хранится вовсеПрогноз занижен на всех дефицитных позициях — в примере выше на 21 %
Акции, распродажи, разовые крупные отгрузкиСкидка в документе, маркетинговый календарь, отдельный признак в заказеВсплеск попадает в базовую линию, и весь год склад держит запас под спрос, которого не будет
Календарь сезонности и производственный календарьВнутренний документ, обычно не формализованПеренос праздников и длинные выходные сдвигают недельный профиль, и модель считает это падением спроса
Замены и аналоги внутри номенклатурыСправочник номенклатуры, свойства и категорииСпрос, ушедший на аналог, выглядит падением сразу по двум позициям, и обе получают заниженную норму
Дубли номенклатуры делят историю пополам

Если один и тот же товар заведён двумя карточками — с разным написанием артикула или в разных единицах измерения, — история продаж делится между ними, и обе позиции выглядят редкими. Перед прогнозом справочник приводят в порядок: это отдельная работа на 20–40 часов на каждые несколько тысяч позиций, и делать её должен товаровед, а не подрядчик, потому что решение «это один товар или два» — коммерческое.

Что прогноз даёт в деньгах: расчёт на 500 позициях

Эффект складывается из трёх слагаемых, и только третье видно в отчёте о прибылях. Первое — стоимость денег, которые перестали лежать в запасе. Второе — уценка и списание того, что залежалось. Третье — продажи, которые состоялись, потому что товар был на месте.

Эффект нормирования и прогноза на 500 закупаемых позициях
Средний запас по 500 позициям в себестоимости11 000 000 ₽
Прогнозируемая часть — 230 позиций стабильной и сезонной групп9 350 000 ₽
Снижение страхового запаса на прогнозируемой части12 % → высвобождается 1 122 000 ₽
Стоимость денег для компании, 2 % в месяц: 1 122 000 × 2 %22 440 ₽/мес
Уценка и списание залежавшегося: было 46 000 ₽/мес, стало 33 000 ₽/мес13 000 ₽/мес
Случаев нехватки по прогнозируемым позициям: было 34 в месяц, стало 19 — снято 1515 случаев
Цена одного случая: 12 000 ₽ себестоимости × 25 % наценки × 55 % несостоявшихся продаж1 650 ₽
Возврат по снятым дефицитам: 15 × 1 65024 750 ₽/мес
Итого60 190 ₽ в месяц, 722 280 ₽ в год

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

Смета проекта на 500 позициях
Разбор истории продаж, восстановление признака дефицита, чистка акций: 40 часов инженера × 3 000 ₽120 000 ₽
Классификация 500 позиций по прогнозируемости и правила по каждой группе: 30 часов × 3 000 ₽90 000 ₽
Модель, проверка на закрытом хвосте, разбор промахов: 35 часов × 3 000 ₽105 000 ₽
Вывод норм в учётную систему, отчёт закупщику, опытная эксплуатация 3 недели65 000 ₽
Поддержка и ежемесячный пересчёт норм18 000 ₽/мес
Итого380 000 ₽ разово. При возврате 60 190 ₽ и расходах 18 000 ₽ чистый эффект 42 190 ₽ в месяц, окупаемость 9 месяцев
сравнениеprognoz-zapasov-na-sklade--02
Три слагаемых эффекта: 22 440, 13 000 и 24 750 рублей в месяц с пометкой достоверности

Горизонтальная линейчатая диаграмма из трёх полос: «Стоимость высвобожденных денег — 22 440 ₽/мес», «Уценка и списание — 13 000 ₽/мес», «Снятые дефициты — 24 750 ₽/мес». Первые две полосы сплошные с пометкой «проверяется по документам», третья заштрихована с пометкой «оценка, считать по своей статистике отказов». Справа итог 60 190 ₽/мес и подпись «консервативная граница 35 440 ₽». Чертёжный стиль, подписи по-русски.

Два слагаемых из трёх проверяются по документам, третье придётся оценивать

Как проверить подрядчика до подписания договора

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

  1. 1
    Отдайте историю с закрытым хвостом

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

  2. 2
    Требуйте прогноз по позициям, а не по группе

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

  3. 3
    Сравните с двумя тупыми правилами

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

  4. 4
    Спросите, что модель делает с днями дефицита

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

  5. 5
    Спросите цену ошибки в обе стороны

    Модель обязана знать, что перезаказ и дефицит стоят по-разному. Если у вас маржа 25 %, а стоимость денег 2 % в месяц, дефицит дороже излишка примерно в шесть раз — и прогноз должен смещаться в сторону излишка сознательно, а не случайно.

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

ГруппаПрогноз модели на 3 закрытых месяцаФактОшибка по сумме группыОшибка по отдельной позиции
Стабильные, 140 позиций4 180 шт4 520 шт8 %15 %
Сезонные, 90 позиций1 960 шт2 640 шт26 %30 %
Редкие, 270 позиций640 шт1 180 шт46 %118 %

Обратите внимание на две последние колонки. Разрыв между 8 % и 15 % на стабильной группе — это и есть та самая разница между цифрой в презентации и цифрой, по которой закупщик будет принимать решения. Именно первую обычно и называют «точностью прогноза 92 %».

этапыprognoz-zapasov-na-sklade--03
Лента из 24 месяцев истории: 21 месяц открыт для обучения, последние 3 закрыты для проверки

Горизонтальная лента из 24 равных сегментов-месяцев. Первые 21 залиты и подписаны «отдаём подрядчику для обучения», последние 3 заштрихованы и подписаны «факт остаётся у вас». Ниже три стрелки к трём результатам: «прогноз модели», «продажи прошлого месяца», «среднее за три месяца» — и общая подпись «сравниваем все три с фактом по каждой позиции». Чертёжный стиль, подписи по-русски.

Закрытый хвост — единственная проверка прогноза, которую можно сделать до оплаты

Что делать с редким штучным спросом

На 270 позициях редкой группы прогноз заменяется правилом, и это не компромисс, а более дешёвое и более точное решение. Правило состоит из трёх решений, каждое из которых принимает товаровед один раз в год.

  1. 1Держим или не держим. Если позицию спрашивают реже двух раз в год, а срок поставки укладывается в ожидания клиента, товар не хранится вообще и заказывается под заказ. В модели так закрываются около 90 позиций из 270.
  2. 2Минимальный запас, если держим. Одна-две штуки на полке, точка заказа равна нулевому остатку: продали — заказали. Формула точки заказа здесь бесполезна, потому что среднедневной расход в 0,04 штуки не значит ничего; как формула устроена и где она врёт, мы разбирали в отдельной статье.
  3. 3Срок жизни на полке. Позиция, не проданная за 12 месяцев при наличии остатка, попадает в список на уценку автоматически. Без этого правила редкая группа медленно превращается в неликвид: она занимает половину мест хранения и не оборачивается.
схема процессаprognoz-zapasov-na-sklade--04
Развилка для редкой группы: 270 позиций делятся на заказ под клиента и минимальный запас

Схема-развилка. Слева блок «Редкая группа: 270 позиций, 1 650 000 ₽ запаса». Первый вопрос: «Спрашивают чаще двух раз в год?» — ветка «нет» ведёт в блок «Заказ под клиента, на складе не держим, около 90 позиций», ветка «да» — в блок «Минимальный запас 1–2 штуки, продали — заказали». Ниже обоих блоков общая рамка «Не продано 12 месяцев при наличии остатка → автоматически в список на уценку». Чертёжный стиль, стрелки подписаны, всё по-русски.

На редкой группе решение принимается один раз в год и не требует пересчёта
Правило дешевле модели

Три решения выше настраиваются за 8–12 часов работы и не требуют ни поддержки, ни пересчёта. Модель на тех же позициях стоила бы части проектного бюджета и давала бы ошибку 118 %. Отказ от прогноза на редкой группе — не экономия на качестве, а правильный инженерный выбор.

Когда прогноз запасов не нужен

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

  • Истории меньше 24 месяцев. Один цикл не позволяет отделить сезонность от тренда. До накопления второго цикла работает правило минимального запаса и ручное решение по сезону — и это нормально.
  • Остатки в системе не совпадают с полкой. Прогноз, посчитанный по недостоверным остаткам, ошибается там, где ошибается склад. Сначала достоверный остаток в реальном времени, потом нормы, потом автопополнение заявки поставщику.
  • Ассортимент обновляется быстрее, чем копится история. Одежда, обувь, электроника с коротким жизненным циклом: к моменту, когда по позиции набирается 24 месяца, её уже нет в продаже. Здесь работает прогноз по аналогам и по свойствам товара, а не по истории конкретной карточки, и это другой проект и другая цена.
  • Меньше 150 закупаемых позиций. На таком объёме закупщик держит ассортимент в голове, и разница между его решением и моделью укладывается в ошибку самой модели. Деньги на этом объёме лежат не в прогнозе, а в сроках поставки и выборе поставщика.

И отдельно про обещания. Фраза «точность прогноза 95 %» не значит ничего, пока не сказано, на какой группе номенклатуры, на каком горизонте и считалась ли ошибка по позициям или по сумме. По состоянию на сентябрь 2026 года ни один доступный в России инструмент — ни модуль учётной системы, ни отдельная модель — не даёт на позиционном уровне ошибку меньше 10–12 % на стабильном спросе. Всё, что обещано сверх этого, обычно оказывается ошибкой по агрегату.