ЦЕЛЬ ПРОЕКТА:
Для сервиса такси построить модель прогнозирования количества заказов на следующий час.
Это позволит эффективно управлять ресурсами и привлекать большее количество таксистов в пиковые часы.
Целевой KPI - RMSE <= 48
ЛИЧНЫЕ ЦЕЛИ:
Научиться базовым принципам работы с временными рядами и определять их характеристики:
- cтационарность
- сезонность
- тренды
Испытать на практике возможности статистической автокорреляции PCAF и ACF, метод дифференцирования, а также познакомиться с возможностями бустера XGBoost.
✔️ Анализ и дифференцирование временных рядов ✔️ Upsampling
✔️ Исследование стационарности ✔️ Тест Дики — Фуллера
✔️ Автокорреляция и визуализация ACF& PACF ✔️ Сезонная декомпозиция
✔️ Генерация календарных и lag-признаков ✔️ rolling-window признаки
✔️ Модель XGBoost
Для достижения цели мы воспользовались разными подходами:
-
Провели детальный анализ динамики заказов и
сезонности -
Исследовали стационарность временного ряда:
- Тест Дики-Фуллера
- Сэмплирование и дифференцирование
- Поиск закономерностей с помощью автокорреляции
ACF
-
Сгенерировали признаки 3-х типов для SupervisedLearning:
- Лаги
- Календарные признаки
- "Скользящие" статистики (rolling-window)
-
Для отбора признаков использовали:
- Статистические графики с автокорреляцией
PACFиACF FeatureImportanceЛинейной Регрессии и XGBoost
- Статистические графики с автокорреляцией
-
Провели анализ ошибок и выявили аномалии, что позволило
улучшить результаты. -
Визуализировали предсказания для
оценки качествапостроенной модели
Также познакомились с возможностями XGBoost, который в текущем проекте показал большую устойчивость к overfitting, чем RandomForest.
Мы успешно построили forecasting модель для предсказания спроса на такси в ближайший час.
Лучшие результаты на всех этапах показала Линейная Регрессия:
==> Кросс-валидация
-
RMSE: 24.06 | MAE : 18.63 - обучающий датасет
-
RMSE: 31.01 | MAE : 24.08 - валидационная выборка
==> Тест
-
RMSE: 24.87 | MAE : 19.22 - обучающий датасет
-
RMSE: 36.41 | MAE : 29.04 - тестовая выборка
Поставленный KPI с RMS <= 48 достигнут!
Возможности для развития проекта:
- Добавить в качестве признаков результаты
дифференцирования - Использовать для предсказаний готовые модели, например, fbpropet
import pandas as pd
pd.set_option("display.max_colwidth", 500)
df = pd.read_csv("/datasets/toxic_comments.csv")
df.sample(5)| datetime | num_orders | |
|---|---|---|
| 13640 | 2018-06-03 17:20:00 | 11 |
| 167 | 2018-03-02 03:50:00 | 21 |
| 24054 | 2018-08-15 01:00:00 | 51 |
| 8732 | 2018-04-30 15:20:00 | 9 |
| 24587 | 2018-08-18 17:50:00 | 11 |