Skip to content

AndreyKotelnikov/MFTI_Hackathon_Walmart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MFTI_Hackathon_Walmart

Задача:

Оценить влияние погодных условий (температуры воздуха, осадков) на продажи товаров в конкретных локациях. Для каждого товара посчитать коэффициент, который показывает как изменение температуры воздуха и осадки влияют на продажи. Визуализировать результат.

Метод решения

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

Идея в целом простая:

Обучить ML модель предсказывать продажи на данных, включающих предоставленную погоду. Потом дать ей два набора данных: с реальной погодой и с погодой, задаваемой пользователем в интерфейсе. Предсказание продаж по этим наборам данных будет несколько отличаться. Эта разница — и есть влияние погоды, которое выявляет ML-модель.

Отношение этих двух предсказаний даст нам требуемый коэффициент влияния погоды на продажи.

Для наглядной визуализации результата было разработано веб-приложение.


Веб-приложение

Форма поиска

Мы разрабатываем веб-сервис для наглядной визуализации результатов: http://46.173.214.94:8090/

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

Интерфейс дает возможность детально проанализировать влияние погодных факторов на продажи при реальной погоде и при заданной вами.

Подробнее о нашем сервисе вы можете прочесть в соответствующем разделе: Описание интерфейса


Очистка и анализ данных:

  • Удалили товары которые ни разу не продавались в течении всего времени
  • Заменили пропуски (M/T) средними значениями и конвертировали типы данных
  • One-hot кодирование погодных кодов или выделение их в отдельный признак
  • Товарам установлен категориальный идентификатор. Считаем что в разных магазинах товар всегда разный, так как не можем однозначно сказать что он одинаковый.
  • Данные объеденины в датасет: магазин + товар + погодные данные + целевая переменная units.
  • Проведён анализ признаков с помощью statsmodels и importance от CatBoost.

Детальное описание EDA

Выбор модели:

Для решения задачи мы рассматривали несколько подходов и моделей. Решение пробовать сразу несколько разных моделей было обусловлено исследовательским интересом, а также желанием найти модель, объективно лучше других решающую поставленную задачу. Были обучены:

  • OLS-регрессия: легко интерпритируемая, сразу дает готовые коэффициенты влияния признаков.
  • XGBoost: хорошо работает с табличными данными, способен выявлять сложные нелинейные зависимости.
  • Random Forest: устойчив к переобучению и прост в настройке, хорошо справляется с разными типами признаков.
  • LSTM: учитывает временную структуру данных и мультизадачность (прогноз на разные горизонты: неделя, месяц, сезон).
  • CatBoost: хорошо интерпритируемая модель, которая работает не только с числовыми, но и с категориальными признаками; способна эффективно обрабатывать как линейные, так и нелинейные зависимости в данных.

В качестве метрик оценки и сравнения моделей была выбрана комбинация RMSE и R², так как RMSE легко интерпретируема (тот же масштаб, что и у целевой переменной), но в отличии от MAE сильнее наказывает за большие отклонения. Таким образом с помощью RMSE удобно оценивать точность предсказания модели. В то же время R² показывает насколько модель в целом хорошо «уловила» структуру данных.

  1. Модель CatBoost с упором на статистику о продажах. RMSE на тесте: 9.3369, R² на тесте: 0.8741

  2. Mодель CatBoost с учётом прогноза погоды RMSE on test = 9.8415 R² on test = 0.8447

  3. Обучаем LSTM модель на 3 периода RMSE: 165.21 R² on test = -0.2

  4. Обучение двух моделей градиентного бустинга LightGBM RMSE (all): 3.136 R²: 0.065

  5. Обучены три модели XGBoost RMSE: 14.42, r2 - 0,85 Random Forest RMSE: 12,74, r2 - 0,88 Линейная регрессия RMSE: 16, r2 - 0,8

В итоге по метрикам RMSE и R2 на тестовой выборке лучше всего показали себя модели:

  1. Модель CatBoost с упором на статистику о продажах
  2. Mодель с учётом прогноза погоды

И мы приняли решение интегрировать их в веб-приложение.

Локальный запуск проекта.

Клиентская часть

nvm use
npm i
npm run dev

Запуск api:

Прописать параметры подключения к БД в файл .env

source venv/bin/activate
python3 manage.py runserver

About

Оценить влияние погодных условий (температуры воздуха, осадков) на продажи товаров в конкретных локациях

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors