Введение:

Допустим, служба такси хочет оптимизировать доступность такси в Нью-Йорке. Он направлен на правильное прогнозирование потребности в количестве такси в определенный день в определенном месте в определенное время. В настоящее время спрос сосредоточен в нескольких пунктах выдачи в определенные дни. Распределение такси по локациям города неравномерно.

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

Данные такси взяты с сайта правительства Нью-Йорка. https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page

Данные за январь и февраль 2014 года взяты соответственно в качестве данных для обучения и испытаний.

Набор данных содержит информацию о поездках на такси. У него есть время посадки, время высадки, идентификатор места получения, идентификатор места высадки, количество пассажиров, тип оплаты и несколько других деталей. Набор данных за каждый месяц насчитывает более 13 миллионов записей. Это необработанные данные на уровне поездки.

Постановка задачи:

Разработать модель машинного обучения, которая может прогнозировать количество такси, доступных в каждом месте, за заданный интервал времени в 10 минут.

Показатели эффективности:

Среднеквадратическая ошибка (RMSE): для лучшей модели значение равно нулю, оно используется для сравнения различных моделей, чтобы найти лучшую модель. Это среднее квадратов разностей между фактическим значением и прогнозируемым значением целевой переменной. Наша цель — свести к минимуму значение MSE.

Средняя абсолютная ошибка в процентах (MAPE): средняя абсолютная ошибка в процентах (MAPE) используется для прогнозирования ошибки, поскольку единицы переменной масштабируются до процентных единиц.

Исследовательский анализ данных:

Это первый шаг для построения модели машинного обучения. Размер наших данных составляет около 2 ГБ. Существует более 13 миллионов записей. Набор данных исследуется с точки зрения его объема, количества функций, типов данных функций, их уникальных значений, отсутствующих значений, повторяющихся точек данных и т. д.

Есть 19 функций -

  • VendorID
  • tpep_pickup_datetime
  • tpep_dropoff_datetime
  • количество пассажиров
  • trip_distance
  • RatecodeID
  • store_and_fwd_flag
  • PULocationID
  • DOLocationID
  • способ оплаты
  • fare_amount
  • дополнительный
  • mta_tax
  • tip_amount
  • tolls_amount
  • улучшение_надбавка
  • Общая сумма
  • congestion_surcharge
  • аэропорт_плата

Из них мы будем использовать функции, которые имеют отношение к нашей постановке задачи. Мы будем использовать tpep_pickup_datetime, PULocationID, trip_distance и извлекать из них другие функции.

Дата получения и дата доставки указаны в формате гггг-мм-дд чч:мм:сс. Данные за январь 2014 года, в нем есть несколько записей на каждый день этого месяца.

Предварительная обработка данных:

В данных отсутствуют значения в столбцах store_and_fwd_flag, congestion_surcharge, airport_fee. Мы не собираемся использовать эти функции, поэтому в данном случае нам не нужно обрабатывать значения na.

Есть 172 повторяющиеся записи, мы удалим эти повторяющиеся записи.

Дата получения и дата доставки указаны в формате гггг-мм-дд чч:мм:сс. Мы преобразуем и разделим его на несколько функций. Мы будем использовать дату без метки времени в качестве функции. Мы также разделим дату на месяц, день, название дня, час, минуту.

Есть некоторые записи, в которых расстояние поездки меньше или равно 0. Мы проигнорируем их из набора данных, так как это логически неверные данные.

Мы разделим время суток на утренние, дневные, вечерние, полуночные ведра. Часы с 5 до 11 будут помечены как утро, часы с 11 до 17 будут помечены как день, часы с 17 до 23 будут помечены как вечер, а часы с 23 до 5 будут помечены как полночь. Мы хотим присвоить этим сегментам дневного времени числовые значения, чтобы облегчить масштабирование данных. Утро, день, вечер, полночь обозначаются как 0, 1, 2, 3 соответственно.

Мы составим список праздников в январе 2014 года. Это поможет нам выделить характеристики праздников. Мы выводим праздник как 1, если это воскресенье или это выходной день в США, принадлежащий к списку праздников. В противном случае он будет помечен как непраздничный, т.е. 0.

Минуты варьируются от 0 до 60. Мы разделим это на 6 сегментов по 10 минут в каждом. Мы объединим сегменты часов и минут, чтобы получить единую функцию. В сутках 24 часа, а минут 6 ведер, значит, за один день будет 144 ведра.

Переведем дату в масштабируемый формат, данные относятся к январю 2014 года, поэтому за признак принимается разница дат между датой и началом этого месяца.

Давайте зафиксируем количество такси, доступных в каждом месте за последние 5 временных интервалов (за последний 1 час) в пяти различных функциях.

Кроме того, мы будем агрегировать данные на основе места получения, даты, сегмента час_минута, дня и праздника. Подсчет записей даст нам количество такси, доступных в определенном месте посадки, дате, часе и минуте.

Количество такси является откликом или зависимой переменной.

Пример данных перед масштабированием будет выглядеть так:

Построение модели:

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

В библиотеке Sklearn есть различные модели линейной регрессии. Здесь используются модели SGDRegressor, LinearRegression, а также полиномиальная регрессия для проверки производительности регрессии более высокой степени.

Здесь используются методы масштабирования, такие как нормализация и стандартизация.

Модель 1. В этой модели используются три функции: место отправления, дата, час_минута. Данные масштабируются в диапазоне от -1 до 1. Используется SGDRegressor с альфа=0,0001 и max_iter=1000.

Это основано на стохастическом градиентном спуске, в котором градиент потерь оценивается для каждой выборки за раз, а модель обновляется по пути с уменьшением графика прочности (он же скорость обучения).

Регулятор/штраф добавляется к функции потерь, которая сжимает параметры модели по направлению к нулевому вектору, используя либо квадрат евклидовой нормы L2, либо абсолютную норму L1, либо их комбинацию (эластичная сеть). Если обновление параметра пересекает значение 0,0 из-за регуляризатора, обновление усекается до 0,0, чтобы можно было изучить разреженные модели и добиться выбора онлайн-функций.

С 3 функциями среднеквадратичное отклонение этой модели равно 44. Модель работает не очень хорошо, поэтому это плохая модель. Мы перейдем к другой модели.

Модель 2. В этой модели используются три функции: место отправления, дата, час_минута. Данные масштабируются в диапазоне от -1 до 1. Используется SGDRegressor, а настройка выполняется с помощью гиперпараметра альфа. Оценка обучения и теста, MSE обучения и теста фиксируется для каждого цикла. Тренировочная и тестовая MSE строятся для визуализации их значений.

Ошибка обучения и тестирования уменьшается по мере того, как альфа увеличивается с 10², 10¹, 10^-1, 10^-2 и так далее. Он стабилизируется при альфа=0,01. MSE по-прежнему очень высок, и модель плохо работает в этой настройке.

Модель 3. В этой модели используются три функции: место отправления, дата, час_минута. Стандартизация используется как метод масштабирования. Это единственное различие между моделью 1 и моделью 3. Производительность аналогична модели 1.

Модель 4. В этой модели используются три функции: место отправления, дата, час_минута. Стандартизация используется как метод масштабирования. Модель LinearRegression используется из библиотеки sklearn. Он основан на обычном методе наименьших квадратов. Он соответствует линейной модели с коэффициентами w = (w1, …, wp), чтобы минимизировать остаточную сумму квадратов между наблюдаемыми целями в наборе данных и целями, предсказанными линейным приближением. Среднеквадратичное отклонение равно 44,22. Это не влияет на производительность.

Модель 5. Используется полиномиальная регрессия с тремя функциями: место получения, дата, час_минута. В этой модели опробованы степени полинома от 1 до 10. Масштабирование выполняется в степени, чтобы приспособиться к изменению диапазона данных. Степень 2 дает лучшую производительность, чем другие степени, но среднеквадратичная ошибка по-прежнему высока, поэтому этот подход мало помогает. Все эти модели используют 3 функции из набора данных. Мы добавим больше функций из набора данных, чтобы улучшить модель.

Модель 6: здесь используется SGDRegressor с 10 функциями. Время суток, праздник и количество такси, доступных за последние 5 интервалов за предыдущий час. Стандартизация используется для функций, а параметры используются как альфа = 0,0001 и max_iter = 1000.

Модель работает достаточно хорошо даже на тестовых данных. RMSE обучения и RMSE теста составляют 9,95 и 9,91 соответственно. Оценка обучения и теста составляет 0,9529 и 0,9548 соответственно.

Заключение:

Модель 6 очень хорошо работает с регрессором SGD и 10 функциями. Есть возможность дальнейшего тюнинга модели. Оценка R2 составляет 0,95. Он близок к 1, что является хорошим показателем. MAPE составляет 44%, он находится в диапазоне от 20 до 50, поэтому это указывает на то, что это разумный прогноз. Среднеквадратичное отклонение равно 9,9. Благодаря большему количеству тестовых данных и настройке гиперпараметров эту модель можно улучшить, чтобы она стала лучшей на рынке.

Рекомендации:

Компания должна заботиться о каждом месте в отношении спроса на такси и мест посадки.

Предложения выходного дня должны быть развернуты, чтобы увеличить посещаемость в воскресенье.

Пригородные акции должны быть запущены, чтобы увеличить доход.

Должны быть запущены такие кампании, как отдых на выходных и однодневные поездки.

С помощью этой модели компания может взглянуть на оживление Carpooling Service.

Благодарности:

Спасибо, что читаете этот блог, пожалуйста, поделитесь своим мнением. Вы можете найти весь код по этой ссылке на GitHub. Вы также можете связаться со мной в Linkedin.

Команда Scaler помогла мне создать эту историю.

Ссылки:



Будущие работы:

Я планировал добавить в этот набор данных дополнительные функции, такие как экспоненциальные средние значения, кумулятивные средние значения. Модель ML, основанная на этих функциях, повысит производительность.