KT.Teamcopy as .md

Python для прогноза спроса в производстве и дистрибуции

Открытый разбор: как на Python строят дата-пайплайны и прогноз спроса на исторических данных, чтобы планировать закупки и запасы по предиктивной аналитике. На

AIWebMobileData

Планирование закупок и запасов «по среднему за прошлый месяц» оборачивается двумя одновременными убытками: замороженный капитал в неликвидах и упущенная выручка из-за out-of-stock. Прогноз спроса на исторических данных переводит закупку из реактивного режима в предиктивный. Ниже — открытый обзор того, что реально делается на Python в производстве и дистрибуции. Это не кейс KT.Team, а разбор публичных open-source инструментов со ссылками на первоисточники.

Что считается результатом

Бизнес-результат измеряется не точностью модели, а деньгами в обороте. Nixtla формулирует зависимость прямо: рост точности прогноза на 10–20% даёт около 5% снижения складских издержек и 2–3% роста выручки (nixtla.io). Логика простая: точнее прогноз на горизонте поставки — меньше страховой запас при той же доступности товара, меньше списаний, меньше срочных дозаказов по повышенной цене. Поэтому пайплайн строят не вокруг «лучшей нейросети», а вокруг управляемого, воспроизводимого прогноза по тысячам SKU, который ложится в формулу точки заказа.

Главная особенность данных в дистрибуции — прерывистый спрос

В рознице сквозного спроса прогнозируется тренд и сезонность. В дистрибуции и на складах запчастей картина другая: прерывистый спрос (intermittent demand) — нерегулярные продажи с частыми нулевыми периодами. Это типично для запчастей, спецтоваров, B2B-номенклатуры (nixtla.io). Классические ARIMA и Prophet на таких рядах работают плохо: они «размазывают» спрос и систематически завышают запас.

Для этого класса задач есть зрелые статистические методы — и их не нужно изобретать. Метод Кростона (Croston) и его варианты Croston SBA, а также TSB, ADIDA, IMAPA специально разделяют оценку размера спроса и интервала между продажами. Это пример подхода «читай, прежде чем писать»: вместо самодельной эвристики берётся проверенный международный стандарт прогнозирования.

Инструмент: open-source библиотека statsforecast

Nixtla statsforecast — открытая библиотека (лицензия Apache-2.0) для статистического прогнозирования временных рядов. В ней из коробки есть и автоматические модели (AutoARIMA, AutoETS, AutoCES, AutoTheta, TBATS), и весь набор для прерывистого спроса: Croston Classic, Croston Optimized, Croston SBA, ADIDA, IMAPA, TSB (github.com/Nixtla/statsforecast).

Ключевое для производства — масштаб и скорость. Библиотека заявляет обработку 1 000 000 рядов за 30 минут и прогон 10 эталонных моделей на миллионе рядов менее чем за 5 минут, а также «500x быстрее Prophet» и «20x быстрее pmdarima» (github.com/Nixtla/statsforecast). На практике это значит: ночной пересчёт прогноза по всему ассортименту реально укладывается в окно перед формированием заказов поставщикам.

Как выглядит дата-пайплайн

Публичный пример end-to-end сборки — solution accelerator от Databricks Industry Solutions «intermittent-forecasting». Он строит прогноз на гранулярном уровне store-item, где данные содержат множество нулевых периодов, которые стандартные модели не тянут (github.com/databricks-industry-solutions/intermittent-forecasting). Пайплайн разбит на три воспроизводимых этапа: конфигурация, подготовка данных, обучение и генерация прогнозов store-item, оркеструемые как multi-step job.

Обобщённо повторяемый Python-пайплайн выглядит так:

1. Сбор истории отгрузок/продаж из ERP/учётной системы в таблицу `unique_id, ds, y` (товар, дата, объём).

2. Очистка: восстановление нулевых периодов (нет продажи — это `0`, а не пропуск), отсечение promo-выбросов, фиксация дефицитных периодов (out-of-stock искажает «истинный» спрос).

3. Выбор семейства моделей по профилю ряда: гладкий спрос — AutoETS/AutoARIMA, прерывистый — Croston SBA/TSB/ADIDA.

4. Кросс-валидация на исторических срезах (`cross_validation`), отбор по MAE/RMSSE на горизонте поставки.

5. Генерация прогноза с интервалами и передача их в расчёт точки заказа и страхового запаса.

Что важно архитектурно

Прогноз — не монолит внутри ERP. Грамотная схема выносит расчёт в отдельный сервис рядом с учётной системой: ядро ERP/WMS не модифицируется, а пайплайн на Python работает «сбоку», читает историю и возвращает рекомендации по закупке. Это даёт слабую связанность и отчуждаемость: модель можно переобучать, заменять и передавать между командами без переписывания основной системы. Сами модели — международные стандарты прогнозирования, а не закрытая самописная логика, что упрощает аудит и доверие к цифрам у планировщика.

Отдельно стоит держать честную метрику. Точность ради точности бессмысленна: модель оценивают по бизнес-эффекту — снижению замороженного капитала и уровню сервиса (доступность товара), а не по красоте графика. Поэтому в пайплайн с самого начала закладывают бэктест на исторических данных, который показывает, сколько запасов и недопоставок дал бы тот или иной метод.

Вывод для бизнес-процесса

Меняется сам процесс закупки. Вместо ежемесячного ручного пересчёта по «среднему» планировщик получает автоматический ночной прогноз по всему ассортименту с разделением гладкого и прерывистого спроса, доверительными интервалами и рекомендованной точкой заказа. Решение человека смещается с «посчитать» на «утвердить исключения». На зрелых open-source инструментах (statsforecast, accelerator Databricks) такой пайплайн собирается небольшой командой и окупается снижением неликвидов и сокращением out-of-stock — то есть деньгами в обороте, а не строчкой в отчёте о точности.

Горизонтальная схема дата-пайплайна прогноза спроса. Слева блок «Источники»: ERP / WMS / учётная система продаж. Стрелка вправо в блок «Подготовка данных (Python)»: формирование таблицы unique_id–ds–y, восстановление нулевых периодов, отсечение promo-выбросов и out-of-stock. Далее блок «Выбор модели» с развилкой: гладкий спрос → AutoETS / AutoARIMA; прерывистый спрос → Croston SBA / TSB / ADIDA (библиотека statsforecast). Затем блок «Кросс-валидация и бэктест» (MAE / RMSSE на горизонте поставки). Затем блок «Прогноз + интервалы» → блок «Точка заказа и страховой запас». Справа результат: «Рекомендации по закупке» возвращаются в ERP. Под всей цепочкой подпись: сервис прогноза работает СБОКУ от ERP, ядро не модифицируется (слабая связанность, отчуждаемость). Пунктирная обратная стрелка от «Бэктест» к «Выбор модели» — переобучение.

Какой бизнес-процесс улучшает

Закупка переходит из режима «ручной пересчёт по среднему раз в месяц» в режим автоматического ночного прогноза по всему ассортименту: планировщик утверждает исключения, а не считает вручную. Результат измеряется деньгами в обороте — снижением неликвидов и сокращением out-of-stock, а не точностью модели как таковой.

Контакты

Обсудить сотрудничество

Оставьте актуальные контакты и опишите задачу. Мы вернемся с уточняющими вопросами и предложением по следующему шагу.