/demand_forecast_retailer

creation of an interface and algorithm for forecasting demand for 14 days for goods of own production

Primary LanguageJupyter Notebook

Название проекта: Разработка алгоритма и интерфейса предсказательной модели для компании, занимающейся розничной торговлей

Статус проекта: в работе

Заказчик: ООО "Лента"

Описание рабочих файлов и директорий:

  • demand_forecast.ipynb - рабочая тетрадь с исследованиями, визуализациями и текстовыми описаниями
  • requirements.txt - список зависимостей, необходимых для работы проекта, а также их версии
  • regression_research_class.py - файл, содержащий класс для проведения исследования
  • assets - директория с сохранёнными артефактами
  • service - директория с приложением

Установка зависимостей и просмотр исследования

git clone https://github.com/denis-42ds/demand_forecast_retailer.git
cd demand_forecast_retailer
pip install -r requirements.txt
jupyter lab

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


Необходимо создать интерфейс и алгоритм прогноза спроса на 14 дней для товаров собственного производства.
Гранулярность ТК-SKU-День.
Прогноз позволит повысить доступность и продажи в ТК, без повышения списаний и повышение маржинальности.
При изготовлении товаров СП сотрудники будут ориентироваться не на экспертный подход, а на ML прогноз спроса,
в соответствии с которым будут изготавливать продукцию и планировать заказы сырья.

Цель проекта

  • Прогноз спроса для товаров СП с ежедневным обновлением.
  • Метрика точности WAPE:
def wape(y_true: np.array, y_pred: np.array):
    return np.sum(np.abs(y_true-y_pred))/np.sum(np.abs(y_true))

Ход исследования

  • Предобработка данных
  • Объединение датафреймов, исследование общей таблицы
  • Добавление информации о выходных и праздничных днях в РФ
  • Исследована корреляция признаков, сезонность и тренд
  • Разделение на выборки
  • Применение техник кодирования с учётом моделей, которые будут использованы
  • Масштабирование данных (при необходимости)
  • Обучение трёх моделей на тренировочной выборке (подбор гиперпараметров)
  • Выбор оптимальной модели (по результатам кросс-валидации, метрика WAPE)
  • Проверка качества лучшей модели на тестовой выборке (метрика: WAPE), выявление важности признаков
  • Отчёт

Используемые инструменты

  • python: pandas, numpy, matplotlib, seaborn, phik, scikit-learn, lightgbm, optuna;
  • mlflow;
  • postgresql;
  • docker

Заключение по исследованию:

  • Предоставленные данные объединены в единый датафрейм, к ним присоединена информация о праздничных и выходных днях в РФ
  • Проведено исследование на корреляцию в признаках, удалены зависимые признаки
  • Проведено исследование на сезонность и тренд
  • Добавлены синтетические признаки (лаги, даты, скользящее среднее)
  • Для подготовки данных и обучения модели использован пайплайн с энкодерами
  • Для прогнозирования применена применены модели различных типов:
    • Линейная регрессия;
    • Случайный лес;
    • Градиентный бустинг
  • Наилучшим образом себя показала модель градиентного бустинга LightGBM с подобранными при помощи Randomized Search
    оптимальными гиперпараметрами: показатель wape на трейне 0.733
  • На тестовой выборке показатель wape получен 0.739
  • Анализ значимости признаков показал, что наиболее важные признаки - st_id, day, day_of_year
  • Конечная модель обучена на полном наборе данных.