Оптимизация товарного запаса на основе ML и математической оптимизации

Заказчик:
АО “Акрихин”
Руководитель проекта со стороны заказчика
Год завершения проекта
2026
Сроки выполнения проекта
июль, 2025 — сентябрь, 2026
Масштаб проекта
2000 человеко-часов
Цели

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

Задачи проекта:

  1. Снизить стоимость товарного запаса без роста дефектуры.

  2. Перейти от четырёх категорий, которые назначались раз в год, к индивидуальному нормативу для каждого SKU и месяца (около 190 SKU).

  3. Выбирать норматив по цене ошибки: сколько стоят деньги в лишнем запасе и сколько теряется при дефектуре, с учётом срока поставки 2-6 месяцев.

  4. Объяснять каждую рекомендацию: почему норматив отличается от экспертного.

  5. Встроить расчёт в ежемесячный цикл планирования без ручной подготовки данных.

  6. Разделять отклонение фактического запаса на вклад алгоритма, прогноза спроса и исполнения поставок.

Результаты

Ретроспективная оценка на фактических данных за 12 месяцев (195 SKU, 2081 решение «SKU × месяц»), нормативы модели против экспертных:

  1. Стоимость товарного запаса ниже на 15%.

  2. Доля решений, при которых запас по сценарному расчёту не покрыл бы спрос, ниже на 24%: 5,9% против 7,7%.

  3. 59% решений подтверждают экспертный норматив, 21% снижают, 20% повышают.

  4. Пересмотр нормативов: раньше раз в год, теперь ежемесячно и автоматически, около 190 SKU за один запуск.

Уникальность проекта

  1. Модель учится не на прошлых решениях экспертов, а на эталоне. Обычно ML повторяет историческую практику вместе с её ошибками. Здесь правильные ответы для обучения строит точная оптимизационная модель (смешанно-целочисленное программирование): наименьший запас, которого хватило бы на весь срок поставки при известном спросе. Поэтому рекомендации могут быть лучше прошлой практики, а не просто воспроизводить её.

  2. Это решение о размере запаса, а не ещё один прогноз спроса. Прогноз продаж (demand forecast S&OP) уже есть, система отвечает на другой вопрос: сколько держать, если заказ в пути уже не изменить.

  3. Норматив выбирается по деньгам, а не по самому вероятному варианту: вероятности модели взвешиваются ценой излишка и дефектуры для своего сегмента и срока поставки.

  4. Видно, кто отвечает за отклонение: фактический запас раскладывается на вклад алгоритма, прогноза продаж и исполнения поставок, а каждая рекомендация объяснена в сравнении с экспертом.

Использованное ПО

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 (дашборды).

Сложность реализации
  1. Нет правильных ответов для обучения. Оптимального норматива в истории не существует, поэтому эталон строится оптимизацией с ограничениями для каждого SKU и месяца.

  2. Данные из будущего. Источников больше десяти, версии прогнозов и остатков меняются, и в истории легко взять то, чего на дату решения ещё не было. Нужны своя дата отсечения и автоматические проверки.

  3. Несимметричная цена ошибки. Излишек и дефектура стоят по-разному в зависимости от сегмента и срока поставки, а самый вероятный класс не всегда лучший: норматив выбирается по ожидаемым потерям.

  4. Доверие бизнеса. Нормативы влияют на закупки, поэтому нужны объяснения, сравнение с экспертом и ручное утверждение.

  5. Качество справочников. Сроки поставки и категории меняются, в источниках бывают дубли. Ввели версионирование справочника, резервные копии и проверки данных.

  6. Эксплуатация. Расчёт идёт без участия человека: автозапуск без повторов, атомарное обновление витрин, сверка передачи по контрольной сумме.

Описание проекта

Исходная ситуация

Запас готовой продукции планируется ежемесячно на горизонт до шести месяцев, срок поставки по позициям от 2 до 6 месяцев. Норматив, то есть число дней, которые запас должен покрывать по прогнозу S&OP, назначался раз в год при формировании бюджета: четыре категории (от 40 до 120 дней) присваивались по матрице из сегмента портфеля, точности прогноза за 12 месяцев и срока поставки, после чего планировщики могли скорректировать категорию вручную. Такой норматив не менялся между пересмотрами и не отражал различий между позициями по стоимости, сезонности и цене дефектуры. Данные для решения лежат в разных системах: продажи, прогноз, плановые остатки, дефектура, цены, ключевая ставка.

Реализованное решение

Для каждого SKU и месяца система рекомендует один из семи классов покрытия: 30, 40, 60, 75, 90, 105 или 120 дней. Расчёт состоит из восьми шагов, главные из них такие.

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

  2. Признаки. Около 120 факторов на дату решения: прогноз S&OP и его точность, остатки, цены, аналоги, промо, календарь, жизненный цикл. Будущие данные отсекаются индивидуально по каждому SKU.

  3. Модель. CatBoost предсказывает вероятности классов, обучение методом walk-forward на 12 месяцах, вероятности калибруются.

  4. Решение. Норматив выбирается по минимальным ожидаемым потерям (стоимость капитала плюс потери от дефектуры), а не по самому вероятному варианту.

  5. Объяснение. Для каждой рекомендации формируются главные факторы: почему такой норматив и чем он отличается от экспертного.

  6. Контур. Airflow запускает расчёт при появлении новой версии прогноза S&OP. Результаты попадают в ClickHouse и дашборды DataLens. После проверки и утверждения рекомендации передаются в систему планирования.

Изменения после внедрения

Нормативы по всем позициям (около 190 SKU) пересматриваются ежемесячно одним запуском, без ручной подготовки данных. С февраля 2026 года выполнено восемь ежемесячных расчётов нормативов. Планирование видит сценарное сравнение «эксперт, модель, эталон» в стоимости запаса и потерях от дефектуры и получает объяснение по каждой позиции. Отклонение фактического запаса раскладывается на вклад алгоритма, прогноза и исполнения поставок, поэтому обсуждение переходит от спора о нормативе к причинам отклонения.

География проекта

Россия

Дополнительные презентации:
Safety-Stocks-_-Global-CIO-2026_10_06.pdf
Коментарии: 1

Комментировать могут только авторизованные пользователи.
Предлагаем Вам в систему или зарегистрироваться.

  • Александр Фаризанов
    Рейтинг: 868
    Omya
    ИТ Директор
    13.10.2026 20:15

    Результаты (−15% запаса, −24% дефектуры) получены на ретроспективе. Что показали 8 боевых расчётов с февраля? Как часто планировщики отклоняют рекомендации модели и учитываете ли это при оценке эффекта?

Год
Предметная область
Отрасль
Управление
Мы используем файлы cookie в аналитических целях и для того, чтобы обеспечить вам наилучшие впечатления от работы с нашим сайтом. Заходя на сайт, вы соглашаетесь с Политикой использования файлов cookie.