Точность прогноза запасов определяется свойствами спроса, а не выбором модели. На позиции, которая расходится каждую неделю ровным потоком, простое среднее за три месяца даст ошибку 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 % денег. Работать с ними моделью бессмысленно, а вот регулярно вычищать из них залежавшееся — обязательно, и это отдельная задача: разбор ассортиментной матрицы и неликвида.
Столбиковая диаграмма из трёх столбцов, ось Y — средняя ошибка прогноза на месяц вперёд в процентах. Столбцы: «Стабильный спрос, 140 позиций» — 15 %, «Сезонный, 90 позиций» — 30 %, «Редкий штучный, 270 позиций» — 118 %. Под каждым столбцом второй подписью доля запаса в деньгах: 60 %, 25 %, 15 %. Через диаграмму горизонтальная пунктирная линия на 35 % с подписью «граница, за которой прогноз перестаёт быть основанием для закупки». Чертёжный стиль, подписи по-русски.
Средняя абсолютная процентная ошибка: по каждой позиции берём модуль разницы прогноза и факта, делим на факт и усредняем по всем позициям. У метрики есть неприятное свойство — при малых продажах она разлетается: промах на одну штуку при факте в две даёт 50 %, а при факте в одну — 100 %. Поэтому 118 % на редкой группе — не аномалия расчёта, а свойство самой задачи.
Почему история продаж — это не история спроса
Учётная система хранит то, что вы продали, а не то, что у вас хотели купить. Дни, когда товара не было на остатке, выглядят в истории как дни нулевого спроса. Модель честно учится: «в эти недели спрос был низкий» — и занижает норму. Дальше запас снова кончается раньше срока, в историю попадает новый ноль, и цикл замыкается. Это самая частая причина, по которой прогноз «не работает» на позициях, которые как раз важнее всего.
Лечится это не моделью, а данными: нужен признак дефицита — отметка, что в такой-то день остаток по позиции был нулевым. Восстановить его задним числом можно, если система хранит остатки на каждую дату; если хранится только текущий остаток, признак придётся накапливать вперёд, и первые нормы будут считаться на неполных данных. Это одна из причин, почему проект прогноза начинают с наведения порядка в остатках — что для этого нужно и сколько это стоит, мы разбирали отдельно.
Минимальный набор данных: что нужно и чего обычно нет
Список короткий, и он же обычно становится главным сюрпризом проекта: половины данных в компании нет не потому, что их сложно собрать, а потому, что их никто никогда не просил.
| Данные | Где обычно лежат | Что ломается без них |
|---|---|---|
| Продажи по позициям с датами, минимум 24 месяца | Документы реализации в учётной системе | Меньше двух полных циклов — сезонность неотличима от тренда, и модель принимает прошлогодний всплеск за рост |
| Признак дефицита: дни с нулевым остатком по позиции | Регистр остатков на дату; чаще всего история остатков не хранится вовсе | Прогноз занижен на всех дефицитных позициях — в примере выше на 21 % |
| Акции, распродажи, разовые крупные отгрузки | Скидка в документе, маркетинговый календарь, отдельный признак в заказе | Всплеск попадает в базовую линию, и весь год склад держит запас под спрос, которого не будет |
| Календарь сезонности и производственный календарь | Внутренний документ, обычно не формализован | Перенос праздников и длинные выходные сдвигают недельный профиль, и модель считает это падением спроса |
| Замены и аналоги внутри номенклатуры | Справочник номенклатуры, свойства и категории | Спрос, ушедший на аналог, выглядит падением сразу по двум позициям, и обе получают заниженную норму |
Если один и тот же товар заведён двумя карточками — с разным написанием артикула или в разных единицах измерения, — история продаж делится между ними, и обе позиции выглядят редкими. Перед прогнозом справочник приводят в порядок: это отдельная работа на 20–40 часов на каждые несколько тысяч позиций, и делать её должен товаровед, а не подрядчик, потому что решение «это один товар или два» — коммерческое.
Что прогноз даёт в деньгах: расчёт на 500 позициях
Эффект складывается из трёх слагаемых, и только третье видно в отчёте о прибылях. Первое — стоимость денег, которые перестали лежать в запасе. Второе — уценка и списание того, что залежалось. Третье — продажи, которые состоялись, потому что товар был на месте.
Три слагаемых имеют разную степень достоверности, и это надо понимать до того, как считать окупаемость. Стоимость высвобожденных денег проверяется по остаткам и ставке кредита. Уценка проверяется по документам списания. А вот число снятых дефицитов и доля несостоявшихся продаж — оценки, и их надо брать по своей статистике отказов, а не по цифрам из статьи. Если такой статистики нет, считайте эффект по первым двум слагаемым: 35 440 ₽ в месяц — это консервативная граница, и она уже даёт окупаемость меньше двух лет.
Горизонтальная линейчатая диаграмма из трёх полос: «Стоимость высвобожденных денег — 22 440 ₽/мес», «Уценка и списание — 13 000 ₽/мес», «Снятые дефициты — 24 750 ₽/мес». Первые две полосы сплошные с пометкой «проверяется по документам», третья заштрихована с пометкой «оценка, считать по своей статистике отказов». Справа итог 60 190 ₽/мес и подпись «консервативная граница 35 440 ₽». Чертёжный стиль, подписи по-русски.
Как проверить подрядчика до подписания договора
Проверка занимает две недели и не требует ни доступа к вашим системам, ни оплаты. Смысл — не поймать подрядчика на слове, а увидеть, чем его модель отличается от арифметики, которую закупщик и так делает в голове.
- 1Отдайте историю с закрытым хвостом
Выгрузка продаж по позициям за 24 месяца, но последние три месяца вы оставляете себе. Подрядчик считает прогноз на этот период, не зная факта. Файл с фактом храните отдельно и не показывайте до получения прогноза.
- 2Требуйте прогноз по позициям, а не по группе
Ошибка по сумме всей группы всегда меньше, чем ошибка по отдельной позиции: промахи в разные стороны гасят друг друга. Закупка делается по каждой позиции, значит и ошибку надо смотреть по каждой позиции.
- 3Сравните с двумя тупыми правилами
Посчитайте сами два прогноза: продажи прошлого месяца и среднее за три месяца. Если модель подрядчика не бьёт оба этих правила хотя бы на стабильной группе, платить не за что — вы можете сделать то же самое формулой в таблице.
- 4Спросите, что модель делает с днями дефицита
Правильный ответ звучит примерно так: «дни с нулевым остатком исключаются из обучения или восстанавливаются по средним продажам доступных дней». Ответ «мы берём продажи как есть» означает, что нормы будут занижены на всех проблемных позициях.
- 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 %».
Горизонтальная лента из 24 равных сегментов-месяцев. Первые 21 залиты и подписаны «отдаём подрядчику для обучения», последние 3 заштрихованы и подписаны «факт остаётся у вас». Ниже три стрелки к трём результатам: «прогноз модели», «продажи прошлого месяца», «среднее за три месяца» — и общая подпись «сравниваем все три с фактом по каждой позиции». Чертёжный стиль, подписи по-русски.
Что делать с редким штучным спросом
На 270 позициях редкой группы прогноз заменяется правилом, и это не компромисс, а более дешёвое и более точное решение. Правило состоит из трёх решений, каждое из которых принимает товаровед один раз в год.
- 1Держим или не держим. Если позицию спрашивают реже двух раз в год, а срок поставки укладывается в ожидания клиента, товар не хранится вообще и заказывается под заказ. В модели так закрываются около 90 позиций из 270.
- 2Минимальный запас, если держим. Одна-две штуки на полке, точка заказа равна нулевому остатку: продали — заказали. Формула точки заказа здесь бесполезна, потому что среднедневной расход в 0,04 штуки не значит ничего; как формула устроена и где она врёт, мы разбирали в отдельной статье.
- 3Срок жизни на полке. Позиция, не проданная за 12 месяцев при наличии остатка, попадает в список на уценку автоматически. Без этого правила редкая группа медленно превращается в неликвид: она занимает половину мест хранения и не оборачивается.
Схема-развилка. Слева блок «Редкая группа: 270 позиций, 1 650 000 ₽ запаса». Первый вопрос: «Спрашивают чаще двух раз в год?» — ветка «нет» ведёт в блок «Заказ под клиента, на складе не держим, около 90 позиций», ветка «да» — в блок «Минимальный запас 1–2 штуки, продали — заказали». Ниже обоих блоков общая рамка «Не продано 12 месяцев при наличии остатка → автоматически в список на уценку». Чертёжный стиль, стрелки подписаны, всё по-русски.
Три решения выше настраиваются за 8–12 часов работы и не требуют ни поддержки, ни пересчёта. Модель на тех же позициях стоила бы части проектного бюджета и давала бы ошибку 118 %. Отказ от прогноза на редкой группе — не экономия на качестве, а правильный инженерный выбор.
Когда прогноз запасов не нужен
Есть четыре ситуации, в которых проект прогноза не даст эффекта независимо от подрядчика и бюджета. Проверить их можно за день по выгрузкам, и это стоит сделать до первой встречи.
- Истории меньше 24 месяцев. Один цикл не позволяет отделить сезонность от тренда. До накопления второго цикла работает правило минимального запаса и ручное решение по сезону — и это нормально.
- Остатки в системе не совпадают с полкой. Прогноз, посчитанный по недостоверным остаткам, ошибается там, где ошибается склад. Сначала достоверный остаток в реальном времени, потом нормы, потом автопополнение заявки поставщику.
- Ассортимент обновляется быстрее, чем копится история. Одежда, обувь, электроника с коротким жизненным циклом: к моменту, когда по позиции набирается 24 месяца, её уже нет в продаже. Здесь работает прогноз по аналогам и по свойствам товара, а не по истории конкретной карточки, и это другой проект и другая цена.
- Меньше 150 закупаемых позиций. На таком объёме закупщик держит ассортимент в голове, и разница между его решением и моделью укладывается в ошибку самой модели. Деньги на этом объёме лежат не в прогнозе, а в сроках поставки и выборе поставщика.
И отдельно про обещания. Фраза «точность прогноза 95 %» не значит ничего, пока не сказано, на какой группе номенклатуры, на каком горизонте и считалась ли ошибка по позициям или по сумме. По состоянию на сентябрь 2026 года ни один доступный в России инструмент — ни модуль учётной системы, ни отдельная модель — не даёт на позиционном уровне ошибку меньше 10–12 % на стабильном спросе. Всё, что обещано сверх этого, обычно оказывается ошибкой по агрегату.
