ЦЕЛЬ ПРОЕКТА:
Для сервиса такси
построить модель прогнозирования количества заказов на следующий час.
Это позволит эффективно управлять ресурсами
и привлекать большее количество таксистов в пиковые часы
.
Целевой 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 |