В статье рассматривается применение машинного обучения для задачи предсказания цены поездки на такси в Нью-Йорке, основанной на наборе данных "New York City Taxi Fare Predication" за 2014 год, полученных с платформы Kaggle [1]. Kaggle – это платформа для проведения соревнований по Data Science. Данное соревнование проводилось с 24.07.18 по 25.09.18 в партнерстве с Google Cloud [2] и Coursera [3].
В настоящее время проблема предсказания стоимости поездки является актуальной задачей. Количество клиентов сервисов онлайн-заказов такси с каждым годом растет и для пользователей необходимо, чтобы стоимость поездки была известна еще до заказа такси. Многие компании решают данную задачу, но для более точного предсказания цены необходимо использовать большее число признаков.
Данная работа выполнена в рамках дисциплины «Machine Learning. Обучающиеся технические системы», научный руководитель – д.ф.-м.н., профессор Воронова Л.И. [4]. Для реализации использовались библиотеки pandas [5], sklearn [6].
Обучающий набор данных Dataset содержит 7 полей, представленных в табл.1 [1].
Таблица 1
Структура обучающего набора данных
Номер Поля |
Поле |
Тип данных |
Значение |
1 |
key |
String |
Уникальный идентификатор поездки |
2 |
pickup_datetime |
Timestamp |
Дата и время начало поездки |
3 |
pickup_longitude |
Float |
Координаты долготы начала поездки |
4 |
pickup_latitude |
Float |
Координаты широты начала поездки |
5 |
dropoff_longitude |
Float |
Координаты долготы пункта назначения |
Продолжение таблицы 1 |
|||
6 |
dropoff_latitude |
Float |
Координаты широты пункта назначения |
7 |
passenger_count |
Integer |
Количество пассажиров |
8 |
fare_amount |
Float |
Сумма поездки |
Используемых набор данных содержит строк. Пример используемого набора данных представлен в табл.2.
Таблица 2
Пример обучающего набора данных
Номер поля |
||||
1 |
2 |
3 |
4 |
… |
2014-02-19 07:22:00 .00000074 |
12.5 |
2014-02-19 07:22:00 UTC |
-73.98643 |
… |
2014-12-06 20:36:22.0000008 |
4 |
2014-12-06 20:36:22 UTC |
-73.979815 |
… |
… |
… |
… |
… |
… |
Анализ данных
Рассматриваемый пример содержит данные о местоположении. Для анализа данных признаков нанесем на карту геопозиции вызова такси. На рис.1 изображена карта Нью-Йорка, с метками местоположений вызова такси.
Рис.1 Карта местоположений вызова такси на основе DataSet [1]
После нанесения местоположения вызова такси на карту, можно обозначить границы рассматриваемой зоны и удалить данные, которые понижают точность модели. На рис.2 представлены координаты пунктов назначения поездок на такси, которые были наложены для более точного обозначения рассматриваемой зоны.
Рис.2 Карта пунктов назначения поездки на основе DataSet [1]
Визуализированные данные местоположений облегчают выбор рассматриваемой зоны. Для данного примера была выбрана зона, которая представлена на рис.1,2:
долгота: [-73.3681, -74.4461]
широта: [40.5493, 41.0245]
Удаляем данные не входящие в рассматриваемую зону координат с помощью функции DataSet.drop [5], где DataSet – набор данных используемый для обучения и тестирования.
График количества поездок за месяц представлен на рис.3. Данный показатель позволяет проследить зависимость количества поездок от месяца. Эти данные могут помочь при анализе входных признаков и построении модели для прогнозирования цены поездки.
Рис.3 Количества поездок за месяц
На рис.4 показано сравнение средней стоимости поездки за день (2014 г.). Данный график позволяет посмотреть, как дата поездки влияет на средний чек. Данные о среднем чеке позволяют проследить тенденцию с предпосылками увеличения или понижения чека поездки.
Рис.4 Средняя стоимость поездки за день (2014г.)
На основе проведенного анализа исследуемых данных были выбраны признаки для обучения модели представленные в табл.3. Данный набор признаков показал лучший результат при обучении и тестировании.
Таблица 3
Выбранные признаки для обучения модели
Признак |
Описание |
distance |
Расстояние между двумя координатами |
date_number |
Дата поездки |
hour |
Час вызовы такси |
pickup_longitude |
Координаты долготы начала поездки |
pickup_latitude |
Координаты широты начала поездки |
dropoff_longitude |
Координаты долготы пункта назначения |
dropoff_longitude |
Координаты широты пункта назначения |
Описание выбранных для исследования алгоритмов
Дляданнойзадачибыливыбраныалгоритмы: KNeighborsRegressor, DecisionTreeRegressor, RandomForestRegressor, ExtraTreesRegressor, MLPRegressor.
KNeighborsRegressor – регрессия на основе k-ближайших соседей. Класс прогнозируется локальной интерполяцией целей, связанных с ближайшими соседями в обучающем наборе [7].
DecisionTreeRegressor – это метод обучения на основе построения дерева решений, используемый для регрессии. Цель состоит в том, чтобы создать модель, которая прогнозирует значение целевой переменной, изучая простые правила принятия решений, выведенные из функций данных. Чем глубже дерево, тем сложнее правила принятия решений и тем лучше модель [8].
RandomForestRegressor – регрессионная модель на основе построения случайного леса. Каждое дерево в ансамбле строится из выборки, взятой с заменой из обучающего набора. Кроме того, при разделении узла во время построения дерева выбранное разделение не является лучшим разделением среди всех объектов. Вместо этого выбранное разделение является лучшим разделением между случайным подмножеством функций. В результате этой случайности смещение леса обычно немного увеличивается (по отношению к смещению одного неслучайного дерева), но из-за усреднения его дисперсия также уменьшается, обычно более чем компенсируя увеличение смещения, следовательно, получая в целом лучшую модель [8].
ExtraTreesRegressor – модель реализующая построения деревьев решений. Как и в randomforest, используется случайное подмножество объектов-кандидатов, но вместо поиска наиболее отличительных порогов, пороги выбираются случайным образом для каждого объекта-кандидата, и лучший из этих случайно сгенерированных порогов выбирается в качестве правила разделения. Это обычно позволяет немного уменьшить дисперсию модели за счет немного большего увеличения смещения [8].
MLPRegressor – модель многослойного персептрона. Эта модель оптимизируется с помощью LBFGS или стохастического градиентного спуска. Модель обучает итеративно, поскольку на каждом временном шаге частные производные функции потерь по параметрам модели вычисляются для обновления параметров. Персептрон также может иметь термин регуляризации, добавленный к функции потерь, который сжимает параметры модели для предотвращения переобучения [9].
Оценка качества алгоритма
В качестве метрики оценки качества алгоритма регрессии в соревновании используется среднеквадратичная ошибка.
Среднеквадратичная ошибка (RMSE) часто используемая мера различий между значениями выборки предсказанными моделью и реальными значениями. RMSE – это показатель точности, позволяющий сравнивать ошибки прогнозирования разных моделей для конкретного набора данных, а не между наборами данных, так как он зависит от масштаба. Среднеквадратичная ошибка рассчитывается по формуле (1) [10].
(1)
Программно RMSE реализуется с помощью функции sqrt(mean_squared_error(y, y_predict), где y – истинное значение класса, y_predict – предсказанное моделью значение класса.
Анализ результатов регрессии
Было проведено сравнение алгоритмов машинного обучения на тренировочном и тестовом наборе. На рис.5 показан график сравнения алгоритмов регрессии.
Рис.5 Сравнение алгоритмов машинного обучения
После обучений и тестирований моделей был выбран RandomForestRegressor (RMSE (train): 1.90572, RMSE (test): 4.43476). Данный алгоритм лучше всего подходит для решения поставленной задачи.
Для наибольшей точности необходимо подобрать оптимальные параметры модели при обучении. Массив parameter_space имеетпереченьпараметров [6].
parameter_space = {'bootstrap': [True, False],
'max_depth': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, None],
'max_features': ['auto', 'sqrt'],
'min_samples_leaf': [1, 2, 4],
'min_samples_split': [2, 5, 10],
'n_estimators': [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]}
С помощью функции GridSearchCV осуществляется поиск наилучшей модели по указанным значениям параметров. Наилучшие показатели RMSE показала модель с параметрами: {'bootstrap': False, 'max_depth': 50, 'max_features': 'sqrt', 'min_samples_leaf': 2, 'min_samples_split': 5, 'n_estimators': 600} [6]. Выбранными параметрами являются те, которые максимизируют оценку на тестовом наборе данных.
Для проверки регрессионной модели недостаточно подчитать величины оценки качества, так как данные параметры не покажут наличие переобучения.
В качестве общего метода выбора модели применяют скользящий контроль (кросс-валидацию). Под общим методом выбора модели определяют алгоритмы, предоставляющие возможность автоматической настройки параметров модели [11]. Программно кросс-валидацию реализует функция cross_validate [6]. На рис.6 изображен график кросс-валидации.
Рис.6 Результаты кросс-валидации
В результате кросс-валидации была установлена наилучшая модель (Среднеквадратичная ошибка тренировочного набора: 1.56246, Среднеквадратичная ошибка тестового набора: 3.58217). После обучения модели получили график предсказания цены по поездки на такси в зависимости от расстояния поездки с помощью алгоритма Random forest, который представлен на рис.7.
Рис.7 Предсказание цены поездки на такси в зависимости от расстояния поездки с помощью алгоритма Random forest
Выводы
При написании работы проанализирована проблема предсказания стоимости поездки на такси методами машинного обучения. Рассмотрены методы обработки и исследования данных, описаны методы машинного обучения.
Исследование показало, что:
во-первых, данная проблема является актуальной и для ее анализа необходимо использовать машинное обучение;
во-вторых, для каждой конкретной задачи нужно выбирать свои признаки и алгоритмы регрессии;
в-третьих, было установлено, что полученное программное обеспечение позволяет предсказать стоимость поездки с малой долей погрешности.
В работе рассмотрен конкретный пример с большим количеством данным за длительный период времени. Для него реализованы методы машинного обучения и получена модель, предсказывающая стоимость поездки на такси.
Список источников и литературы
New York City Taxi Fare Prediction // kaggle URL: https://www.kaggle.com/c/new-york-city-taxi-fare-prediction
Google Cloud URL: https://cloud.google.com/
Coursera URL: https://www.coursera.org/
Л.И.Воронова Интеллектуальные базы данных: учебное пособие / М.: МТУСИ, 2013. -35 с.
Pandas documentation // pandas.org URL: http://pandas.pydata.org/pandas-docs/stable/
Scikit-learn documentation // scikit-learn.org URL: http://scikit-learn.org/stable/user_guide.html.
Кернога А.Л., Бурак Т.И. Сравнение подходов к прогнозированию методом ближайших соседей // Вестник ПНИПУ. Электротехника, информационные технологии, системы управления. 2015. №13.
Zhu R, Zeng D, Kosorok MR “Reinforcement Learning Trees” // Journal of the American Statistical Association. 2015. №110(512). С. 1770-1784.
He, Kaiming, et al. "Delving deep into rectifiers: Surpassing human-level performance on imagenet classification" // arXiv. 2015.
T. Hastie, R. Tibshirani, J. Friedman “Elements of Statistical Learning” // Springer; 2nd edition. 2016.
Painsky A., Rosset S. "Cross-Validated Variable Selection in Tree-Based Methods Improves Predictive Performance" // IEEE Transactions on Pattern Analysis and Machine Intelligence. 2017. №39(11). С. 2142-2153.