Прогнозирование спроса на базе ML в 1С:ERP снижает оборачиваемые запасы на 10–30%, уменьшает out-of-stock и возвраты, ускоряет MRP/MPS-планирование и повышает точность закупок. Рабочая схема: вытягиваем историю продаж и атрибуты товаров из 1С → обучаем модели (по типам номенклатуры) → записываем прогнозы в регистр сведений → используем в MRP/закупках/производстве → контролируем качество по метрикам (WAPE, sMAPE) и сервис-левелу.
Где в 1С:ERP нужен прогноз
- Закупки и MRP: расчёт потребности, точки заказа, страховой запас, мульти-склады.
- Производство: MPS, загрузка мощностей, календарно-сетевые планы, партия-размер.
- Сбыт: промо-планирование, бюджет продаж, распределение по каналам/регионам.
- Финансы: ДДС, движение ТМЗ, страхование рисков обесценения запасов.
- HR/операции: сменные графики, аутсорс-бригады, логистика.
Данные: что нужно собрать из 1С
Минимальный набор полей (обычно из регистров накопления и справочников):
- История продаж: Дата, Номенклатура, Склады/Филиалы, Количество, Цена/Сумма, Клиент (при необходимости), Источник заказа/канал.
- Остатки и доступность: нач./конечные остатки, резервы, в пути.
- Сроки поставки: lead time по поставщикам (регистр сведений или карточка договора).
- Атрибуты SKU: группа, бренд, размерность, упаковка, сезонность, «медленно/быстрооборот».
- Цены, акции, промо: скидки, RRP, промо-календари.
- Календари: производственный, выходные/праздники, региональные особенности.
Рекомендуем хранить прогноз в отдельном Регистре сведений “Прогноз спроса” с измерениями: Номенклатура, Склад, Период, Сценарий и ресурсами: Количество, Доверие, Метод/ВерсияМодели.
Горизонт и частота
- Горизонт: для закупок — 8–12 недель; для производства — 4–8 недель; для финансов — 3–6 месяцев.
- Гранулярность: день для высокооборотных, неделя — стандарт, месяц — для долгих циклов.
- Выравнивание: привязываем к плановому календарю и учётной политике (недельные слоты).
Подходы к моделям: когда что использовать
- Базовые (бенчмарки): наивный сдвиг, скользящее среднее, экспоненциальное сглаживание.
— Быстрый старт и baseline для сравнения. - Временные ряды: ETS/ARIMA/Prophet (для явной сезонности и тренда).
— Хорошо работают на стабильных SKU. - ML-модели по признакам: градиентный бустинг (CatBoost/XGBoost), Random Forest, линейные регрессии с регуляризацией.
— Учитывают цену, промо, каналы, календари, атрибуты SKU. - Разреженный спрос: Croston / SBA / TSB, или ML-подход с классификацией «будет продажа/нет» + регрессия по объёму.
— Для медленнооборачиваемых и запчастей. - Иерархические прогнозы: SKU → категория → бренд → портфель; reconciliation сверху вниз/снизу вверх.
— Стабилизируют нестабильные ряды и помогают при cold start.
Фичи (признаки), которые дают эффект
- Календари: номер недели/дня, праздничные/выходные флаги, начало/конец месяца/квартала.
- Промо-фичи: скидки, тип акции, длительность, лаг-эффект.
- Цены/перепады цен, эластичность.
- Атрибуты SKU и истории: ABC/XYZ, сезон, «новинка», жизненный цикл.
- Сроки поставки (lead time), SLA поставщика, доступность на складе.
- Каналы/регионы, витринные остатки, минимальные партии.
Архитектура интеграции с 1С: три проверенных варианта
Вариант A. Встроенный прогноз (простые методы)
- Плюс: быстро, без внешних сервисов.
- Минус: ограниченная точность и слабая работа с промо/ценой.
Вариант B. Внешний ML-сервис (Python/.NET) с REST API
- Плюс: лучшие алгоритмы, A/B-тесты, версионирование моделей.
- Минус: нужна поддержка сервиса (DevOps/инфра).
Вариант C. Гибрид
- Базовый прогноз — внутри 1С, “тяжёлые” SKU/категории — через ML-сервис.
- Баланс между простотой и качеством.
Технологически 1С общается с ML-сервисом через HTTP-запросы (JSON), коннекторы, внешние компоненты. Прогнозы пишутся обратно в регистр сведений и подхватываются MRP.
Как встроить в процессы MRP/закупок
- Точка заказа (ROP):
ROP=μL+z⋅σLROP = \mu_{L} + z \cdot \sigma_{L}ROP=μL+z⋅σL,
где μL\mu_{L}μL — спрос за время поставки, zzz — квантиль для целевого сервиса (например, 1.64 для 95%), σL\sigma_{L}σL — стандартное отклонение спроса за lead time. - Страховой запас (SS):
SS=z⋅σLSS = z \cdot \sigma_{L}SS=z⋅σL (вариации: учитываем вариативность lead time и спроса одновременно). - Политики пополнения: (s, S), Min-Max, периодический заказ (T).
— Рассчитываем из прогнозов + ограничений поставщика (MOQ, кратности). - Мульти-склад: по каждому складу свой прогноз; перераспределение запасов (transshipment) по правилу сервиса и стоимости.
Метрики качества и целевые уровни
| Метрика | Что измеряет | Норма/Цель |
|---|---|---|
| WAPE (взвешенная абсолютная ошибка) | Доля ошибки по сумме объёмов | ≤ 15–20% (по портфелю) |
| sMAPE | Стабильность при низких объёмах | ≤ 20–25% |
| MASE | Сравнение с наивным прогнозом | < 1 (лучше наивного) |
| Service Level | Доля заказов без OOS | 92–98% (по классу SKU) |
Жизненный цикл: от пилота к промышленной эксплуатации
- Диагностика данных: полнота, дубликаты, каскад массивов, “аномалии промо”.
- Baseline: простые модели в 1С — получить исходную WAPE.
- ML-пилот на 15–20% ассортимента: быстрооборот + медленнооборот.
- A/B-сравнение: старый vs новый прогноз по метрикам и сервис-левелу.
- Интеграция: регламентные задания (ночные перезапуски), восстановление при сбоях, логирование.
- Модел-операции (MLOps): версионирование, мониторинг деградации, переобучение по расписанию.
- Расширение на 100% SKU и на мульти-склад.
Пример структуры в 1С (практика)
Регистр сведений “Прогноз спроса”
- Измерения: Номенклатура; Склад; Период (Неделя); Сценарий (База/Промо/Оптимистичный).
- Ресурсы: Количество; Доверие; ВерсияМодели; Источник (Baseline/ML).
- Реквизиты: ДатаОбучения; Автор; Комментарий.
Регламентные задания
- “Выгрузка истории продаж” (ежедневно 02:00).
- “Запрос прогнозов у ML-сервиса” (ежедневно 03:00).
- “Запись прогнозов в регистр” (ежедневно 03:30).
- “Проверка целостности и алёрты” (ежедневно 04:00).
Использование в MRP
- Источник потребности: Прогноз спроса вместо «прошлого периода».
- UoM/кратность: трансформация к закупочной единице (короб, паллета).
- План-факт: витрина BI (внутри 1С отчёты + выгрузка в Power BI/Metabase).
Частые ошибки и как их избежать
- Смешивание промо с обычным спросом → выделяйте промо-эффект отдельно.
- Одинаковая модель для всех SKU → сегментируйте (ABC/XYZ, разреженный/плотный).
- Нет baseline → невозможно доказать эффект. Сначала сравните с простыми моделями.
- Отсутствие SLA на данные → стандартизируйте выгрузки, валидируйте перед обучением.
- Нет цикла переобучения → деградация точности через 3–6 месяцев.
Частые вопросы
Можно ли обойтись без внешнего ML-сервиса?
Да, для части SKU хватит базовых методов внутри 1С. Но ML заметно улучшит точность при промо, ценовых колебаниях и сезонности.
Что делать с новыми товарами без истории?
Иерархический прогноз + «товары-аналоги» по атрибутам, затем быстрое обучение по накопленной истории.
Как часто переобучать модель?
Обычно раз в 4–8 недель или при существенном сдвиге ассортимента/цен/каналов.
Какие метрики брать в договор?
WAPE по ключевым категориям и целевой Service Level при ограничении среднего DOH.
Как учитывать мульти-склад и транзит?
Делать прогноз по складам и разрешить перераспределение (переводы) с учётом цены и времени.
Рекомендуемая структура в 1С
// Псевдо: запрос к ML-сервису
ТелоЗапроса = Новый Структура;
ТелоЗапроса.Вставить("ДатаНач", ДатаНач);
ТелоЗапроса.Вставить("ДатаКон", ДатаКон);
ТелоЗапроса.Вставить("SKU", МассивSKU);
ТелоЗапроса.Вставить("Календарь", Календарь);
JSON = ЗаписатьJSON(ТелоЗапроса);
HTTP = Новый HTTPЗапрос(АдресСервиса + "/forecast");
HTTP.УстановитьТелоИзСтроки(JSON, "application/json");
Ответ = HTTPКлиент.Выполнить(HTTP);
Если Ответ.КодСостояния = 200 Тогда
Прогнозы = ПрочитатьJSON(Ответ.ПолучитьТелоКакСтроку());
// Запись в РегистрСведений.ПрогнозСпроса(...)
Иначе
Сообщить("Ошибка сервиса: " + Ответ.КодСостояния);
КонецЕсли;
