Прогнозирование спроса для ритейла: как сократить запасы на 30% без потери продаж

Прогнозирование спроса для ритейла: как сократить запасы на 30% без потери продаж


Почему традиционные методы не работают

Большинство компаний все еще планируют закупки «на глаз» или простыми эвристиками:

  • «Закажем столько же, сколько продали в прошлом месяце»
  • «Добавим 20% на всякий случай»
  • «Давайте посмотрим, что было год назад»

Результат: либо затоваривание склада, либо дефициты и потеря продаж.

Реальная статистика по рынку

  • 40-50% компаний в России используют Excel для планирования закупок
  • 35% запасов — это неликвид, который уже не продастся
  • 15-25% потеря продаж из-за out-of-stock ситуаций
  • 8-12 млн ₽ замороженных средств на складе у среднего магазина

Что дает ML-прогнозирование

Machine Learning анализирует сотни факторов одновременно:

  • Исторические продажи (тренд + сезонность)
  • Календарные эффекты (праздники, выходные)
  • Промо-акции и скидки
  • Цены конкурентов
  • Погода (для сезонных товаров)
  • Макроэкономические показатели

Кейс: розничная сеть продуктов (15 магазинов)

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

  • Ассортимент: 8 000 SKU
  • Заморожено в запасах: 12 млн ₽
  • Потери от дефицита: ~600 тыс. ₽/месяц
  • Списания просрочки: 2.5% от оборота

Что внедрили:

  1. Сбор и очистка данных (2 года истории)

    • Продажи по чекам
    • Остатки на складах
    • Календарь акций
    • Цены конкурентов (парсинг сайтов)
  2. Feature Engineering

    features = [
        'day_of_week', 'is_weekend', 'is_holiday',
        'days_to_holiday', 'week_of_year',
        'promo_flag', 'discount_percent',
        'competitor_price_ratio',
        'stock_level', 'days_since_last_delivery',
        'weather_temp', 'weather_precipitation'
    ]
  3. Ансамбль моделей

    • Prophet (Facebook) — для тренда и сезонности
    • LightGBM — для учета промо и внешних факторов
    • LSTM (deep learning) — для сложных товаров с нелинейной динамикой
    • Итоговый прогноз = взвешенное среднее
  4. Интеграция с ERP

    • Автоматическая генерация заказов поставщикам
    • Оптимизация точки заказа (Reorder Point)
    • Расчет страхового запаса (Safety Stock)

Результаты за 6 месяцев

МетрикаДоПослеИзменение
Замороженные средства12 млн ₽8.2 млн ₽-32%
Потери от дефицита600 тыс. ₽180 тыс. ₽-70%
Просрочка/списания2.5%0.8%-68%
Точность прогноза (WAPE)87%
Время на планирование25 ч/нед3 ч/нед-88%

ROI проекта: 380% за первый год

Экономический эффект

  • Высвобождено ≈4 млн ₽ из запасов → реинвестированы в маркетинг
  • +420 тыс. ₽ дополнительной прибыли от снижения дефицита
  • -200 тыс. ₽ списаний в год
  • Окупаемость: 4.5 месяца

Технические детали

Архитектура системы

┌─────────────┐
│  Источники  │
│  данных     │
└──────┬──────┘

┌──────▼──────────────────────────┐
│  ETL Pipeline (Airflow)         │
│  - 1С (продажи, остатки)        │
│  - Календарь акций              │
│  - Конкуренты (web scraping)    │
│  - Погода API                   │
└──────┬──────────────────────────┘

┌──────▼──────────────────────────┐
│  Feature Store (PostgreSQL)     │
└──────┬──────────────────────────┘

┌──────▼──────────────────────────┐
│  ML Pipeline                    │
│  - Prophet (базовый прогноз)    │
│  - LightGBM (промо, внешние)    │
│  - Ensemble (финальный прогноз) │
└──────┬──────────────────────────┘

┌──────▼──────────────────────────┐
│  Inventory Optimization         │
│  - Reorder Point                │
│  - Safety Stock                 │
│  - Order Quantity (EOQ)         │
└──────┬──────────────────────────┘

┌──────▼──────────────────────────┐
│  Интерфейсы                     │
│  - Дашборд для закупщиков       │
│  - API для ERP                  │
│  - Alerts в Telegram            │
└─────────────────────────────────┘

Модель LightGBM для промо

import lightgbm as lgb

# Гиперпараметры после tuning
params = {
    'objective': 'tweedie',  # для продаж лучше tweedie
    'metric': 'rmse',
    'boosting_type': 'gbdt',
    'num_leaves': 63,
    'learning_rate': 0.05,
    'feature_fraction': 0.8,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': -1
}

model = lgb.train(
    params,
    train_data,
    num_boost_round=1000,
    valid_sets=[valid_data],
    callbacks=[
        lgb.early_stopping(50),
        lgb.log_evaluation(100)
    ]
)

Как оценить качество прогноза

Основные метрики

WAPE (Weighted Absolute Percentage Error)

WAPE = (Σ |Факт - Прогноз|) / (Σ Факт) × 100%
  • < 10% — отлично
  • 10-20% — хорошо
  • 20-30% — приемлемо
  • > 30% — требуется улучшение

MAE (Mean Absolute Error)

MAE = Σ |Факт - Прогноз| / N

Показывает среднюю абсолютную ошибку в единицах товара.

Bias (систематическая ошибка)

Bias = Σ (Прогноз - Факт) / Σ Факт
  • Bias > 0 → переоценка спроса (лишние запасы)
  • Bias < 0 → недооценка спроса (дефициты)

Кейс 2: B2B дистрибьютор электроники

Особенности:

  • 35 000 SKU (длинный хвост)
  • Средний срок жизни продукта: 6-9 месяцев
  • Высокая волатильность спроса

Подход:

  1. Сегментация товаров по ABC-XYZ

    • A-товары (топ 20%) → индивидуальные модели
    • B/C-товары → групповые модели
    • Новинки → transfer learning от похожих товаров
  2. Hierarchical forecasting

    • Прогноз на уровне категории (точнее)
    • Распределение внутри категории по долям
  3. Учет жизненного цикла товара

    • Фаза роста → коэффициент > 1
    • Фаза зрелости → стабильный прогноз
    • Фаза спада → экспоненциальное снижение

Результаты:

  • Оборачиваемость запасов: 45 дней → 28 дней
  • Сокращение списаний устаревших товаров: -55%
  • Fill rate (доступность): 82% → 94%

Что важно для успешного внедрения

1. Качество данных (критично!)

  • Минимум 12-18 месяцев истории
  • Чистые данные (без дыр, аномалий)
  • Привязка всех событий к датам (промо, дефициты)

2. Правильная валидация

  • Time-series split (не случайная выборка!)
  • Backtesting на исторических данных
  • Walk-forward validation

3. Постоянное обновление

  • Переобучение моделей каждые 1-4 недели
  • Мониторинг quality drift
  • A/B тесты новых фич

4. Интеграция с бизнес-процессами

Модель должна быть встроена в систему закупок:

  • Автогенерация заказов
  • Alerts при аномалиях
  • Dashboard для закупщиков

Частые ошибки

«Одна модель на все товары» Разные категории требуют разных подходов.

Игнорирование внешних факторов Промо, праздники, погода могут давать +50% к базовому спросу.

Нет мониторинга Модель деградирует со временем, нужен контроль качества.

Не учитываем бизнес-ограничения MOQ (минимальный заказ), кратность, сроки поставки.

Следующие шаги

Если хотите внедрить прогнозирование спроса:

  1. Проверьте данные

    • Есть ли 12+ месяцев истории продаж?
    • Фиксируете ли промо и out-of-stock?
  2. Начните с пилота

    • Выберите 50-100 топовых SKU
    • Постройте baseline модель (Prophet)
    • Сравните с текущим планированием
  3. Масштабируйте

    • Добавьте внешние факторы
    • Оптимизируйте ансамбль моделей
    • Интегрируйте с ERP/WMS

Хотите внедрить ML-прогнозирование спроса?

Мы строим системы прогнозирования для ритейла и дистрибуции. Помогаем сократить запасы на 25-40% и избежать дефицита. Проведем аудит данных бесплатно.

📞 +7 (924) 547-36-78 📧 info@bi-ai.ru 💬 Telegram: @bi_ai_team