Оптимизация товарного запаса на основе ML и математической оптимизации
- Заказчик:
- АО “Акрихин”
- Руководитель проекта со стороны заказчика
- Год завершения проекта
- 2026
- Сроки выполнения проекта
- июль, 2025 — сентябрь, 2026
- Масштаб проекта
- 2000 человеко-часов
- Цели
Основная цель: заказы дистрибьюторов и аптечных сетей отгружаются полностью, препарат без перебоев доходит до пациента, а деньги Компании не замораживаются в лишнем запасе.
Задачи проекта:
-
Снизить стоимость товарного запаса без роста дефектуры.
-
Перейти от четырёх категорий, которые назначались раз в год, к индивидуальному нормативу для каждого SKU и месяца (около 190 SKU).
-
Выбирать норматив по цене ошибки: сколько стоят деньги в лишнем запасе и сколько теряется при дефектуре, с учётом срока поставки 2-6 месяцев.
-
Объяснять каждую рекомендацию: почему норматив отличается от экспертного.
-
Встроить расчёт в ежемесячный цикл планирования без ручной подготовки данных.
-
Разделять отклонение фактического запаса на вклад алгоритма, прогноза спроса и исполнения поставок.
-
- Результаты
Ретроспективная оценка на фактических данных за 12 месяцев (195 SKU, 2081 решение «SKU × месяц»), нормативы модели против экспертных:
-
Стоимость товарного запаса ниже на 15%.
-
Доля решений, при которых запас по сценарному расчёту не покрыл бы спрос, ниже на 24%: 5,9% против 7,7%.
-
59% решений подтверждают экспертный норматив, 21% снижают, 20% повышают.
-
Пересмотр нормативов: раньше раз в год, теперь ежемесячно и автоматически, около 190 SKU за один запуск.
-
Уникальность проекта
-
Модель учится не на прошлых решениях экспертов, а на эталоне. Обычно ML повторяет историческую практику вместе с её ошибками. Здесь правильные ответы для обучения строит точная оптимизационная модель (смешанно-целочисленное программирование): наименьший запас, которого хватило бы на весь срок поставки при известном спросе. Поэтому рекомендации могут быть лучше прошлой практики, а не просто воспроизводить её.
-
Это решение о размере запаса, а не ещё один прогноз спроса. Прогноз продаж (demand forecast S&OP) уже есть, система отвечает на другой вопрос: сколько держать, если заказ в пути уже не изменить.
-
Норматив выбирается по деньгам, а не по самому вероятному варианту: вероятности модели взвешиваются ценой излишка и дефектуры для своего сегмента и срока поставки.
-
Видно, кто отвечает за отклонение: фактический запас раскладывается на вклад алгоритма, прогноза продаж и исполнения поставок, а каждая рекомендация объяснена в сравнении с экспертом.
- Использованное ПО
Python: CatBoost (классификатор), SHAP (объяснения), python-mip и решатель CBC (эталон), scikit-learn, pandas, NumPy.
Apache Airflow 3 на Kubernetes (оркестрация, автозапуск).
ClickHouse (витрины и история расчётов), MinIO (артефакты запусков), MS SQL Server (передача в планирование), PostgreSQL.
Источники: система планирования (demand forecast S&OP, плановые остатки), учётная система (дефектура), корпоративное хранилище продаж и цен.
Yandex DataLens (дашборды).
- Сложность реализации
-
Нет правильных ответов для обучения. Оптимального норматива в истории не существует, поэтому эталон строится оптимизацией с ограничениями для каждого SKU и месяца.
-
Данные из будущего. Источников больше десяти, версии прогнозов и остатков меняются, и в истории легко взять то, чего на дату решения ещё не было. Нужны своя дата отсечения и автоматические проверки.
-
Несимметричная цена ошибки. Излишек и дефектура стоят по-разному в зависимости от сегмента и срока поставки, а самый вероятный класс не всегда лучший: норматив выбирается по ожидаемым потерям.
-
Доверие бизнеса. Нормативы влияют на закупки, поэтому нужны объяснения, сравнение с экспертом и ручное утверждение.
-
Качество справочников. Сроки поставки и категории меняются, в источниках бывают дубли. Ввели версионирование справочника, резервные копии и проверки данных.
-
Эксплуатация. Расчёт идёт без участия человека: автозапуск без повторов, атомарное обновление витрин, сверка передачи по контрольной сумме.
-
- Описание проекта
Исходная ситуация
Запас готовой продукции планируется ежемесячно на горизонт до шести месяцев, срок поставки по позициям от 2 до 6 месяцев. Норматив, то есть число дней, которые запас должен покрывать по прогнозу S&OP, назначался раз в год при формировании бюджета: четыре категории (от 40 до 120 дней) присваивались по матрице из сегмента портфеля, точности прогноза за 12 месяцев и срока поставки, после чего планировщики могли скорректировать категорию вручную. Такой норматив не менялся между пересмотрами и не отражал различий между позициями по стоимости, сезонности и цене дефектуры. Данные для решения лежат в разных системах: продажи, прогноз, плановые остатки, дефектура, цены, ключевая ставка.
Реализованное решение
Для каждого SKU и месяца система рекомендует один из семи классов покрытия: 30, 40, 60, 75, 90, 105 или 120 дней. Расчёт состоит из восьми шагов, главные из них такие.
-
Эталон. Оптимизационная модель находит на истории наименьший достаточный запас: спрос каждого месяца и всего срока поставки покрыт с резервом по сегменту, пока заказ в пути запас только расходуется, а норматив снижается постепенно.
-
Признаки. Около 120 факторов на дату решения: прогноз S&OP и его точность, остатки, цены, аналоги, промо, календарь, жизненный цикл. Будущие данные отсекаются индивидуально по каждому SKU.
-
Модель. CatBoost предсказывает вероятности классов, обучение методом walk-forward на 12 месяцах, вероятности калибруются.
-
Решение. Норматив выбирается по минимальным ожидаемым потерям (стоимость капитала плюс потери от дефектуры), а не по самому вероятному варианту.
-
Объяснение. Для каждой рекомендации формируются главные факторы: почему такой норматив и чем он отличается от экспертного.
-
Контур. Airflow запускает расчёт при появлении новой версии прогноза S&OP. Результаты попадают в ClickHouse и дашборды DataLens. После проверки и утверждения рекомендации передаются в систему планирования.
Изменения после внедрения
Нормативы по всем позициям (около 190 SKU) пересматриваются ежемесячно одним запуском, без ручной подготовки данных. С февраля 2026 года выполнено восемь ежемесячных расчётов нормативов. Планирование видит сценарное сравнение «эксперт, модель, эталон» в стоимости запаса и потерях от дефектуры и получает объяснение по каждой позиции. Отклонение фактического запаса раскладывается на вклад алгоритма, прогноза и исполнения поставок, поэтому обсуждение переходит от спора о нормативе к причинам отклонения.
-
- География проекта
Россия
- Дополнительные презентации:
- Safety-Stocks-_-Global-CIO-2026_10_06.pdf