schatzederwelt / taxi-demand-prediction

Прогнозирование спроса на такси

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Прогнозирование спроса на такси

Описание проекта

ЦЕЛЬ ПРОЕКТА:

Для сервиса такси построить модель прогнозирования количества заказов на следующий час.

Это позволит эффективно управлять ресурсами и привлекать большее количество таксистов в пиковые часы.

Целевой KPI - RMSE <= 48


ЛИЧНЫЕ ЦЕЛИ:

Научиться базовым принципам работы с временными рядами и определять их характеристики:

  • cтационарность
  • сезонность
  • тренды

Испытать на практике возможности статистической автокорреляции PCAF и ACF, метод дифференцирования, а также познакомиться с возможностями бустера XGBoost.

Посмотреть проект

Новые навыки


✔️ Анализ и дифференцирование временных рядов ✔️ Upsampling

✔️ Исследование стационарности ✔️ Тест Дики — Фуллера

✔️ Автокорреляция и визуализация ACF& PACF ✔️ Сезонная декомпозиция

✔️ Генерация календарных и lag-признаков ✔️ rolling-window признаки

✔️ Модель XGBoost

Этапы исследования

Для достижения цели мы воспользовались разными подходами:

  1. Провели детальный анализ динамики заказов и сезонности

  2. Исследовали стационарность временного ряда:

    • Тест Дики-Фуллера
    • Сэмплирование и дифференцирование
    • Поиск закономерностей с помощью автокорреляции ACF
  3. Сгенерировали признаки 3-х типов для SupervisedLearning:

    • Лаги
    • Календарные признаки
    • "Скользящие" статистики (rolling-window)
  4. Для отбора признаков использовали:

    • Статистические графики с автокорреляцией PACF и ACF
    • FeatureImportance Линейной Регрессии и XGBoost
  5. Провели анализ ошибок и выявили аномалии, что позволило улучшить результаты.

  6. Визуализировали предсказания для оценки качества построенной модели

Также познакомились с возможностями 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