Skip to content

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

Notifications You must be signed in to change notification settings

denis-42ds/demand_forecast_retailer

Repository files navigation

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

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

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

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

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

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

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, Recall, Precision), выявление важности признаков
  • Отчёт

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

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

Заключение:

  • Предоставленные данные объединены в единый датафрейм, к ним присоединена информация о праздничных и выходных днях в РФ
  • Проведено исследование на корреляцию в признаках, удалены зависимые признаки
  • Проведено исследование на сезонность и тренд
  • Добавлены синтетические признаки (лаги, даты, скользящее среднее)
  • Возникли проблемы при попытке применения техник кодирования, в связи с чем из исследования исключены простые модели ML: линейная регрессия, случайный лес, дерево решений
  • Для запуска ARIMA недостаточно ресурсов
  • Для прогнозирования применена модель градиентного бустинга, т.к. она может одинаково хорошо работает с категориальными и количественными признаками
  • При помощи GridSearch подобраны оптимальные параметры модели с показателем wape на трейне 0.51
  • На тестовой выборке показатель wape получен 0.48
  • Анализ значимости признаков показал, что наиболее важный признак - lag_pr_sales_in_units и pr_sku_id
  • Конечная модель обучена на полном наборе данных
  • для достижения поставленной цели (прогнозирование спроса товаров) наиболее подходящая модель - CatBoostRegressor

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published