Прогноз стоимости такси

TLDR

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

Контур

  1. Введение
  2. Прежде чем мы начнем
  3. Как кодировать
  4. Очистка данных
  5. Разработка функций
  6. Объединение наборов данных
  7. Подготовка модели данных
  8. Обучение модели
  9. Заключение

Введение

Иногда просто удобно доверить вождение кому-то другому. Это просто меньше стресса, больше места для ума, и можно использовать это время для других дел. Что ж, это одна из идей, которая выросла и позже стала концепцией Uber и Lyft.

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

Обе услуги, от заказа такси до оплаты счетов, имеют почти одинаковые основные функции. Но есть несколько уникальных случаев, когда две службы такси идут рука об руку. Одним из таких является «ценообразование», особенно динамическое ценообразование, называемое «всплеск» в «Uber» и «Prime Time» в «Lyft». Есть еще несколько параметров, по которым можно разделить двух поставщиков услуг.

У нас есть интересный набор данных из «Бостона (США)», который мы проанализируем, чтобы понять факторы, влияющие на динамическое ценообразование, и разницу между специальными ценами «Uber» и «Lyft».

Источник: Giphy.com

Прежде чем мы начнем

Данные были собраны из разных источников, включая сбор данных в режиме реального времени с использованием запросов API Uber и Lyft (интерфейс прикладного программирования). Набор данных охватывает выбранные местоположения Бостона и охватывает данные примерно за неделю с ноября 2018 года. Набор данных, используемый в этой статье, был импортирован из Kaggle.

После загрузки набора данных мы обнаружили два доступных файла. Первый — «weather.csv», а второй — «Cab_rides.csv». Набор данных показывает, что данные были разделены на следующие столбцы.

Различные переменные, присутствующие в наборе данных:

  1. Числовые характеристики: расстояние, цена, множитель перенапряжения, температура, облака, давление, дождь, влажность и ветер.
  2. Функции временной метки - временная метка (Cab_rides), временная метка (погода)
  3. Буквенно-цифровой идентификатор объекта
  4. Категориальные характеристики — тип кабины: Lyft, Uber
  5. Текстовые функции - пункт назначения, источник, Product_id и имя

Как обсуждалось во введении, мы будем использовать обучающий набор данных и оценим нашу целевую переменную «Цена», чтобы пользователь мог выбрать экономически эффективную услугу заказа такси между «Uber» и «Lyft».

Как программировать

Источник: Giphy.com

Есть несколько аспектов, связанных с прогнозированием факторов «цены» такси, таких как «surge_multiplier», «расстояние» между «источником» и «пунктом назначения»; кроме того, наличие кабины играет важную роль в создании модели прогнозирования цен. Чтобы оценить «цену» поездки, мы должны загрузить набор данных «rides.csv», сохранить его во фрейме данных «cab_df» и отобразить первые пять строк набора данных с помощью функции «head».

Очистка данных о поездках

Источник: Giphy.com

Здесь «time_stamp» в формате Unix. Поэтому мы изменим его на удобочитаемый вид, используя функцию «Pandas» и «datetime».

Давайте проверим форму набора данных, чтобы убедиться, что у нас достаточно данных для создания готовой к производству модели, и создадим столбец «merge_date», где мы объединяем «источник», «дата» и «час», чтобы создать «merge_date». столбец.

У нас есть «9999» строк и «10» столбцов, которых достаточно, чтобы сделать нашу модель готовой к производству.

Давайте теперь начнем процесс очистки данных, проверив нулевые значения в нашем фрейме данных «cab_df».

Мы видим отсутствующие строки «773» в столбце «цена» и заполним недостающие строки столбца «цена» значением «среднее». Поскольку отсутствующее значение в столбце «цена» числового признака «отсутствует случайным образом (MAR)», то есть данные отсутствуют не во всех наблюдениях. Функция «Pandas» «fillna ()» заменит пропущенные значения «средним» значением всего столбца и предоставит нам беспристрастный вывод.

После перепроверки «нулевых» значений мы удаляем столбцы «product_id» и «id», которые не определяют стоимость поездок на такси.

Разработка функций опирается на данные

В наших данных «Cab_df» нет пропущенных значений, и они готовы к разработке функций. Общее количество такси для «Uber» составляет 5 427, а для «Lyft» — 4 572.

Рассмотрим изменение цены на «surge_multiplier».

Мы видим, что цена увеличивается с изменением «surge_multiplier».

Очистка данных о погоде

Источник: Giphy.com

«Погода» играет важную роль в определении «скачка» цены на такси. Мы берем отчет «погода» на соответствующую дату и с помощью файла «weather.csv» можем предсказать фактическую цену на данную поездку на конкретную дату. Для этого мы загрузим «weather.csv» во фрейм данных «weather_df», отобразим первые пять строк с помощью функции «head» и проверим форму набора данных, чтобы убедиться, что он может дать хорошие результаты.

У нас есть 6 276 строк и 8 столбцов, что достаточно для получения хороших результатов. В кадре данных «weather_df» «time_stamp» находится в формате Unix. Итак, мы изменим метку времени на читаемый формат, используя функцию Pandas «datetime».

Нулевые значения проверяются ниже в кадре данных «weather_df», чтобы избежать неверных результатов.

У нас отсутствует 5382 строки для столбца дождя, который мы заполним «нулем» с помощью функции pandas «fillna ()», поскольку отсутствующие значения для столбца дождя означают, что в указанные даты не было дождей.

Разработка функций для данных о погоде

Мы добавим столбец «merge_date» в кадр данных «weather_df», объединив «местоположение», «дату» и «час» и сохранив индекс «weather_df» как «merge_date».

Объединение наборов данных

Теперь мы объединим «cab_df» и «weather_df» в столбце «merge_date» и укажем параметр «rsuffix» в функции «join», чтобы различать левый и правый фрейм данных.

Давайте просмотрим столбцы фрейма данных «merged_df» и проверим количество атрибутов в каждом столбце.

У нас есть 20 столбцов в кадре данных «merged_df» и прибл. 18 000 атрибутов в каждом столбце, что хорошо подходит для обучения нашей модели. Но прежде чем мы начнем обучение модели, мы должны предварительно обработать данные и подготовить данные для обучения модели. Удалены ненужные столбцы, которые не могут определить «цену» такси. Обучение модели со слишком большим количеством столбцов может привести к выводу мусора.

Разделение данных на обучающие и тестовые данные

Нам нужно предсказать «цену» поездок на такси. Итак, стоимость поездок на такси принимается в качестве целевой переменной «Y».

Подготовка модели данных

В рамках предварительной обработки данных все числовые признаки были стандартизированы с использованием «StandardScaler», а «векторизация» была выполнена для категориальных признаков с использованием векторизатора «TF-IDF (частота терминов — обратная частота документа)». После этого все функции объединяются для обучения и тестирования данных.

«StandardScaler» стандартизирует признак, вычитая «среднее» и затем масштабируя до «единицы» дисперсии.

«Единичная» дисперсия означает деление всех значений на стандартное отклонение, равное 1. Стандартизация полезна как для непрерывных, так и для дискретных данных.

«TF-IDF (частота терминов — обратная частота документа)» — это статистическая мера, которая оценивает, насколько релевантно слово в документе. «TF (частота терминов)» — это количество раз, которое слово встречается в документе. «IDF (обратный документ)» означает, насколько часто или редко встречается слово во всем документе. Таким образом, если слово очень распространено и встречается во многих документах, оно будет приближаться к «0», в противном случае оно будет приближаться к «1». Умножение этих двух чисел дает оценку «TF-IDF» для слова в документе.

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

«hstack» — это функция «numpy», которая используется для укладки последовательности ввода по горизонтали для создания единого массива. Мы использовали «hstack», чтобы объединить стандартизированные и масштабированные «числовые» функции и «категориальные» функции вместе для обучения и тестирования модели.

Обучение моделей

Источник: Giphy.com

Теперь наши данные готовы для обучения модели. Данные разделены на тестовые данные для 33% и остальные данные в качестве обучающих данных. Для обучения модели используется «линейная регрессия» для проверки «оценки R2» и «MAE (средняя абсолютная ошибка)» для оценки целевой переменной «цена» такси.

«Линейная регрессия» — это контролируемый алгоритм машинного обучения, используемый для прогнозирования зависимой переменной (цели) на основе заданных независимых переменных. Техника «Линейная регрессия» находит линейную связь между зависимой переменной и заданными другими независимыми переменными.

С «Линейной регрессией» мы получаем «оценку R2» как 92% и «MAE» как 0,19. Чтобы еще больше повысить точность, вы можете попробовать другие алгоритмы регрессии, такие как «RandomForestRegressor», «Lasso Regression» и «Ridge Regression», и выполнить настройку гиперпараметров с помощью «GridSearchCV».

Заключение

Создание модели машинного обучения включает в себя анализ данных, предварительную обработку данных, а затем обучение модели с использованием алгоритмов машинного обучения. Вы также можете попробовать различные алгоритмы для повышения производительности. После обучения модели мы видим, что цена «Убера» меньше, чем у «Лифта». Используя эту модель, мы можем получить более точные прогнозы цен, которые можно использовать для прогнозирования цены поездки потребителя, и мы можем сообщить потребителю точную цену поездки до начала поездки. «Убер» более экономичен, однако «Лифт» также обеспечивает честную конкуренцию, а «Убер» — это первый выбор людей при поездках на большие расстояния.

Для ознакомления с кодом вы можете проверить ссылку на Блокнот Google colab. Спасибо за прочтение!