Прогнозирование количества заказов такси на следующий час

Компания такси собрала исторические данные о заказах такси в аэропортах. Чтобы привлекать больше водителей в период пиковой нагрузки, нужно спрогнозировать количество заказов такси на следующий час. Строится модель для такого предсказания.

Задача

Компания «Чётенькое такси» собрала исторические данные о заказах такси в аэропортах. Чтобы привлекать больше водителей в период пиковой нагрузки, нужно спрогнозировать количество заказов такси на следующий час. Построим модель для такого предсказания.

Значение метрики RMSE на тестовой выборке должно быть не больше 48.

Задача:

  1. Загрузить данные и выполнить их ресемплирование по одному часу.
  2. Проанализировать данные.
  3. Обучить разные модели с различными гиперпараметрами. Сделать тестовую выборку размером 10% от исходных данных.
  4. Проверить данные на тестовой выборке и сделать выводы.

Ноутбук

(ноутбук проекта)

Выводы

Нам был передан файл с более чем 26 тысячами записей за период с первого марта по 31 августа 2018 года. Пропусков данных нет. Количество заказов находится в столбце num_orders.

В соответствии с требованиями заказчика было проведено ресемплирование данных по 1 часу.

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

Затем мы разделили данные на тренд, сезонность и шум. Рассчитанный тренд также продемонстрировал постепенный рост количества заказов. Алгоритм выделил сезонную составлявшую данных по дням. Пиковая нагрузка приходится на полночь, снижается до шести утра, а затем понемногу возрастает. Возможно это связано с временными циклами городских жителей: около полуночи многие едут домой из баров, а с шести утра спешат на работу.

Для проверки ряда на стационарность мы рассчитали скользящее среднее и скользящее стандартное отклонение. Из построенного графика видно, что скользящее среднее и скользящее стандартное отклонение меняются со временем, что говорит о нестационарности данных. Чтобы сделать временной ряд более стационарным нужно будет рассчитать разности временного ряда.

Мы добавили в массив данных несколько дополнительных признаков. При этом часть признаков (месяц, день, день недели, час) мы добавили сразу, а количество оставшихся признаков мы подбирали оптимизатором optuna.

Для прогнозирования временного ряда мы обучили и оптимизировали на кросс-валидации три модели:

  • линейную регрессию
  • LightGBM
  • голосующий ансамбль.

Кроме того мы провели проверку на адекватность: обучили “глупую” модель, предсказывающую данные предыдущим значением.

Сведём значения метрики RMSE для всех моделей в единую таблицу.

Модель RMSE
Линейная регрессия 26.02
LightGBM 24.03
Голосующий ансамбль 23.53
«Глупая» модель 58.86

Для проведения тестирования мы отобрали модель на основе голосующего ансамбля. Затем мы рассчитали значение метрики на тестовых данных: RMSE=44.27. Метрика оказалась ниже, чем пороговое значение, установленное заказчиком (48). Именно эту модель мы рекомендуем заказчику.