Прогнозирование количества заказов такси на следующий час
Компания такси собрала исторические данные о заказах такси в аэропортах. Чтобы привлекать больше водителей в период пиковой нагрузки, нужно спрогнозировать количество заказов такси на следующий час. Строится модель для такого предсказания.
Задача
Компания «Чётенькое такси» собрала исторические данные о заказах такси в аэропортах. Чтобы привлекать больше водителей в период пиковой нагрузки, нужно спрогнозировать количество заказов такси на следующий час. Построим модель для такого предсказания.
Значение метрики RMSE на тестовой выборке должно быть не больше 48.
Задача:
- Загрузить данные и выполнить их ресемплирование по одному часу.
- Проанализировать данные.
- Обучить разные модели с различными гиперпараметрами. Сделать тестовую выборку размером 10% от исходных данных.
- Проверить данные на тестовой выборке и сделать выводы.
Ноутбук
Выводы
Нам был передан файл с более чем 26 тысячами записей за период с первого марта по 31 августа 2018 года. Пропусков данных нет. Количество заказов находится в столбце num_orders
.
В соответствии с требованиями заказчика было проведено ресемплирование данных по 1 часу.
Чтобы сгладить данные мы рассчитали и построили графики скользящего среднего с окном в один день и в одну неделю. График скользящего среднего с окном в одну неделю наглядно показал плавный рост количества заказов со временем.
Затем мы разделили данные на тренд, сезонность и шум. Рассчитанный тренд также продемонстрировал постепенный рост количества заказов. Алгоритм выделил сезонную составлявшую данных по дням. Пиковая нагрузка приходится на полночь, снижается до шести утра, а затем понемногу возрастает. Возможно это связано с временными циклами городских жителей: около полуночи многие едут домой из баров, а с шести утра спешат на работу.
Для проверки ряда на стационарность мы рассчитали скользящее среднее и скользящее стандартное отклонение. Из построенного графика видно, что скользящее среднее и скользящее стандартное отклонение меняются со временем, что говорит о нестационарности данных. Чтобы сделать временной ряд более стационарным нужно будет рассчитать разности временного ряда.
Мы добавили в массив данных несколько дополнительных признаков. При этом часть признаков (месяц, день, день недели, час) мы добавили сразу, а количество оставшихся признаков мы подбирали оптимизатором optuna.
Для прогнозирования временного ряда мы обучили и оптимизировали на кросс-валидации три модели:
- линейную регрессию
- LightGBM
- голосующий ансамбль.
Кроме того мы провели проверку на адекватность: обучили “глупую” модель, предсказывающую данные предыдущим значением.
Сведём значения метрики RMSE для всех моделей в единую таблицу.
Модель | RMSE |
---|---|
Линейная регрессия | 26.02 |
LightGBM | 24.03 |
Голосующий ансамбль | 23.53 |
«Глупая» модель | 58.86 |
Для проведения тестирования мы отобрали модель на основе голосующего ансамбля. Затем мы рассчитали значение метрики на тестовых данных: RMSE=44.27. Метрика оказалась ниже, чем пороговое значение, установленное заказчиком (48). Именно эту модель мы рекомендуем заказчику.