Название проекта: Разработка алгоритма и интерфейса предсказательной модели для компании, занимающейся розничной торговлей
- 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