Машинное обучение с Austin BCycle — бонусное издание

Что еще мы можем узнать из данных о поездках за 3 года?

Добро пожаловать в бонусную статью об анализе данных и машинном обучении на основе данных совместного использования велосипедов BCycle в Остине. Это четвертая статья в серии. Если вам интересно узнать больше, остальные статьи также есть на Medium.

После того, как я опубликовал эти 3 статьи, Ник из Austin BCycle связался со мной и предоставил данные BCycle за 3 года, начиная с их запуска 21 декабря 2013 года! Я должен поблагодарить Ника и всех в Bcycle за поддержку этого проекта. Помимо того, что это гораздо больший объем данных, чем за 2 месяца, которые я собирал ранее, он включает информацию о каждой отдельной поездке:

  • Членство: BCycle имеет диапазон членства. Членство на день и на выходные оплачивается единовременно, а членство на месяц и год повторяется.
  • Идентификатор велосипеда: уникальный идентификатор для каждого велосипеда в системе BCycle.
  • Станции выписки и регистрации: станции, на которых поездка началась и закончилась.
  • Продолжительность: продолжительность поездки в минутах.

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

Еженедельная аренда

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

В недельной аренде есть два исключения, которые сразу бросаются в глаза. Первый — во время SXSW Festival в середине марта, одного из самых известных событий в Остине. Он длится 9 дней с выступлениями, показами фильмов и концертами живой музыки, которые проходят по всему центру Остина. Austin BCycle устанавливает специальные станции с десятками велосипедов во время SXSW. Пиковый показатель недельной аренды составляет около 14 000 в 2014 году, 13 000 в 2015 году и чуть более 12 000 в 2016 году.

Второй пик приходится на начало октября на ACL Festival. Это двухнедельное музыкальное мероприятие, проводимое в Zilker Park, с такими хедлайнерами, как Radiohead, Kendrick Lamar, Mumford and Sons. Этот пик составляет чуть более 6000 еженедельных аренде в 2014 году, увеличившись до чуть менее 8000 в 2015 и 2016 годах.

Остальные данные показывают годовой цикл, когда недельная арендная плата увеличивается с 2000 в январе до примерно 4000 в июле и снова снижается до 2000 в декабре. В январе 2016 года произошло значительное увеличение арендных ставок (5750) по сравнению с 2015 и 2014 годами (2000).

Почасовые поездки по членству

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

Эти два графика показывают некоторые интересные различия между типами членства. Одноразовые участники имеют одинаковую модель использования как в выходные, так и в будние дни, с пиком между полуднем и 16:00. Постоянная аренда участников аналогична разовым участникам на выходных. Но в рабочие дни вместо одного широкого максимума в 14:00 есть три пика в 8:00, полдень и 17:00. Скорее всего, это поездки на работу и с работы, а также поездки на велосипеде на обед. Это показывает, что постоянные участники используют велосипеды для поездок на работу в течение недели.

Общее количество поездок примерно равно количеству членств в течение недели. В выходные дни гораздо больше разовых участников совершают поездки: в среднем 60 арендных плат в час пик по сравнению с 10 для постоянных участников.

Продолжительность поездки по членству

Давайте посмотрим, как продолжительность поездок зависит от типа членства. Страница членства в BCycle показывает, что первые 30 минут любой поездки бесплатны, а за каждые последующие 30 минут взимается дополнительная плата в размере 4 доллара США. Давайте построим график продолжительности поездок для постоянных и разовых участников и отметим это 30-минутное отсечение. Мы также ограничим продолжительность поездок двумя часами для сюжетов.

Эти гистограммы показывают, что одноразовые участники в среднем совершают более длительные поездки, чем постоянные участники. Одноразовые участники превышают 30 минут в 30% своих поездок. С другой стороны, постоянные участники редко совершают поездки более 30 минут, что составляет 3% их поездок.

Здесь может быть предвзятость при выборе повторяющихся членов. Если только люди со временем в пути на велосипеде менее 30 минут подпишутся на регулярное членство, эта помощь может привести к такому распределению. Поскольку постоянные участники тратят больше денег на BCycle, чем разовые участники, у них также есть стимул детально разобраться в структуре ценообразования.

Однодневные участники совершают более длительные поездки либо потому, что они используют велосипеды для развлекательных поездок, либо потому, что они не так хорошо знакомы со структурой ценообразования для BCycle. Прочитав обзоры Yelp, похоже, что многие люди не понимают, что им нужно ставить свой велосипед в док каждые 30 минут после оплаты дневного проездного.

Ребалансировка

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

Хотя в наборе данных нет явных записей о ребалансировке, мы можем обнаружить неявный побочный эффект ребалансировки. У нас есть уникальный идентификатор для каждого велосипеда в наборе данных (bike_id). Используя это значение, мы можем проверить, соответствует ли касса велосипеда последней станции, на которой он был зарегистрирован. Если они не совпадают, велосипед был перебалансирован между поездками. Затем мы можем извлечь станцию, с которой велосипед был перебалансирован (исходная станция), и место, на которое он был перебалансирован (целевая станция).

Начнем с того, что подсчитаем, сколько еженедельных поездок было совершено на перебалансированных велосипедах с 2014 по 2016 год.

Этот график очень похож на график «Еженедельные велопоездки» выше. Во время SXSW и ACL бывают пики поездок на ребалансированных велосипедах, когда в поездках используется более 1500 ребалансированных велосипедов. Вполне вероятно, что чем больше поездок будет направлено в небольшую группу станций на мероприятии, тем больше потребуется перебалансировки.

Исключение составляет январь 2016 года. В течение этого месяца было совершено около 2500 поездок в неделю на перебалансированных велосипедах! В январе 2014 и 2015 годов количество отбалансированных велосипедов составило около 200 и 400 соответственно. Это почти 10-кратное увеличение! Возможно, BCycle переназначил bike_id в январе 2016 года или провел эксперимент с большей перебалансировкой.

Ребалансировка станций

Теперь мы проверили, как еженедельные ребалансированные велосипедные поездки меняются с течением времени, давайте посмотрим, между какими станциями были перемещены ребалансированные велосипеды. Мы агрегируем это по набору данных и создадим метрику, чтобы показать станции, с которых были взяты велосипеды (красные кружки на карте), и станции, на которые велосипеды были доставлены (синие кружки на карте). Размер кружка показывает, сколько велосипедов было перевезено (со станции или на станцию) с 2014 по 2016 год.

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

Существует также чистая перебалансировка от Zilker Park и станций к югу от озера Леди Берд. Это может быть связано с ACL, которая проводится в Zilker Park.

Прогнозирование почасовой арендной платы с помощью машинного обучения

Теперь, когда мы изучили данные о поездках, мы можем вернуться к задаче прогнозирования почасовых касс в сети BCycle. В предыдущей статье у нас были данные за 2 месяца с апреля и мая 2016 года. В обучающем наборе использовались данные с 1 апреля по 15 мая, с проверкой на остальных данных с 16 по 31 мая.

Небольшой объем данных означал, что распределение данных в проверочном наборе имело некоторые большие отличия от обучающего набора. Например, проверочный набор включал национальный праздник (День памяти) и дневное количество осадков, которое было почти вдвое больше, чем в обучающих данных.

Имея данные за 3 года, мы можем гарантировать, что модель увидит каждый национальный праздник несколько раз. Мы также собираем достаточно данных для моделирования долгосрочных тенденций, таких как постепенное увеличение количества поездок с течением времени, в отличие от тенденций в течение месяца или двух в меньшем наборе данных. Мы будем использовать данные за 2014 и 2015 годы для обучения модели. Затем данные о поездках за 2016 год будут использоваться в качестве проверочного набора для проверки эффективности модели. Прогнозируем сумму почасовой аренды. Функция потерь для модели будет представлять собой среднеквадратичную ошибку (RMSE), при этом более низкие значения показывают, что модель работает лучше.

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

Чтобы визуализировать прогнозы на год вместо 2 недель, мы объединим почасовые прогнозы с ежедневными прогнозами на графике временных рядов. Мы также будем использовать диаграмму рассеяния с фактическими значениями арендной платы по оси x и прогнозируемыми арендными платами по оси y. В идеальной модели все прогнозы будут располагаться на линии под углом 45 градусов, поскольку они соответствуют фактическим прогнозам. Диаграмма рассеяния помогает нам проверить остатки (ошибки, которые делает модель), гетероскедастичность (меняется ли размер ошибок в зависимости от прогнозируемого значения?) и любые системные ошибки в модели.

Базовая почасовая модель

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

Эта модель имеет RMSE тренировочного набора 20,40 и RMSE набора проверки 21,27. Диаграмма рассеяния показывает, что предсказания модели далеки от линии 45 градусов! Модель узнала только среднюю сумму аренды в данный час дня, поэтому она не знает, что суббота в 10:00 во время выходных ACL отличается от субботы в 10:00 на любой другой неделе. Существует также много гетероскедастичности, так как расстояние от прогнозов до линии 45 градусов сильно варьируется в диапазоне прогнозируемых значений. Это только наша первая базовая модель, так что это не большая проблема. Теперь нам есть с чем сравнить позже!

Добавление в праздники и события

Ранее мы определили несколько специальных событий, которые оказывают большое влияние на аренду BCycle (SXSW и ACL). Есть также ежегодные национальные праздники, которые, как мы видели в предыдущей статье, влияют на аренду велосипедов. Дни, близкие к национальным праздникам (например, накануне выходных), также могут быть затронуты.

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

RMSE обучения теперь составляет 17,08, а RMSE проверки — 18,91. График временного ряда показывает, что модель более точно отслеживает пики SXSW и ACL. Производительность в праздничные дни также улучшилась: День независимости (4 июля) и День памяти (30 мая) увеличили арендную плату. На Рождество (25 декабря) и День Благодарения (24 ноября) арендная плата снизилась по сравнению с предыдущим базовым уровнем. Это может быть связано с тем, что люди берут отпуск и не ездят на работу или находятся за городом в гостях у семьи.

Точечная диаграмма показывает улучшение, когда прогнозы больше не ограничиваются примерно 80 прокатами в час, как в базовом сценарии. Однако между прогнозируемой и фактической арендной платой все еще существует большой разрыв.

Добавление отложенных функций

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

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

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

При прогнозировании данных за год мы также хотим фиксировать долгосрочные тенденции, а не ежедневные или еженедельные изменения. Если количество поездок медленно увеличивается в течение нескольких месяцев из-за увеличения числа участников BCycle, нам необходимо смоделировать это независимо от ежедневных и еженедельных краткосрочных колебаний. Для этого мы рассчитаем среднюю сумму арендной платы за последний день, неделю и месяц.

Наконец, мы будем использовать скользящее окно с окном Блэкмана, чтобы передать модели больше информации. Мы снова будем использовать продолжительность окна 1 день, 1 неделя и 1 месяц. Прокручивающееся окно помогает сгладить любые всплески использования.

Благодаря этим новым функциям производительность модели значительно улучшилась. RMSE обучения прошел с 17.08 до 14.09, а RMSE проверки с 18.91 до 14.99.

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

Диаграмма рассеяния также показывает улучшение. Хотя общая тенденция прогнозов показывает, что модель систематически занижает арендную плату, разница уменьшилась. Есть несколько новых выбросов, когда модель предсказывала >150 арендных плат, когда их было всего около 80. В нижней левой области с низким количеством арендных плат точки ближе к линии 45 градусов и меньшей гетероскедастичности. В области высокой арендной платы (вверху справа) наблюдается улучшение: прогнозы отслеживаются ближе к фактическому значению.

Добавление в ежедневную погоду

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

Было небольшое улучшение после добавления информации о погоде, RMSE тренировочного набора 13,79 и проверки RMSE 14,81. Это лишь небольшое улучшение производительности. График временных рядов, кажется, более точно отслеживает фактическую аренду, за исключением января.

Точечная диаграмма теперь имеет больше выбросов прогноза, когда модель предсказывает >100 поездок, а фактическое количество поездок составляет всего 20. Эти грубые ошибки должны быть перевешены повышенной производительностью по сравнению с остальными данными.

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

На этом мы завершаем раздел статьи, посвященный разработке функций. Нам удалось улучшить среднеквадратичную ошибку валидации линейной регрессии с 21,27 до 14,81 в конце процесса.

Другие модели и настройка гиперпараметров

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

Лучшей моделью является нейронная сеть с RMSE обучения 10,22 и RMSE проверки 13,24. Я использовал библиотеку Keras для создания модели и ее оценки. В сети есть один скрытый слой размером 2000 с 50% отсевом и активацией ReLU.

Победившая модель имеет точное соответствие временному ряду, за исключением января 2016 года. Диаграмма рассеяния также показывает хорошее соответствие с линией 45 градусов. Существует некоторая гетероскедастичность между арендной платой ниже 100 и выше 100.

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

Заключение и подведение итогов

Оглядываясь назад на анализ двухмесячных данных в Части 3 серии, мы устранили несколько недостатков. Имея данные за 2 года для обучения моделей, мы можем гарантировать, что модель увидит ежегодные события дважды. Большое количество данных также помогает предотвратить переоснащение, которое приводит к плохой производительности при проверке данных.

Самая эффективная линейная модель, которую мы создали с использованием данных за 2 месяца, имела среднеквадратичное отклонение проверки 13,58 в течение двухнедельного набора данных проверки. Используя более сложные модели, нам удалось снизить количество ошибок в течение всего года 13.24.

С этим большим набором данных есть много других способов моделирования данных. Мы могли бы принять во внимание:

  • Пространственная корреляция между прокатами велосипедов. Могут ли станции рядом друг с другом иметь одинаковые тенденции аренды? В конце концов, если вы хотите взять напрокат велосипед, а на первой станции нет свободных велосипедов, вы должны взять его напрокат на ближайшей станции.
  • Обнаружение аномалии. Уведомление в реальном времени о том, что конкретная станция ведет себя не так, как обычно, может быть использовано для устранения проблемы с сетевым подключением или питанием станции.
  • Балансировка. С помощью моделей, описанных в этой статье, мы можем довольно точно прогнозировать количество поездок в течение всего года. Кластеризируя станции по их местоположению, мы могли бы помочь спланировать усилия по перебалансировке, чтобы предотвратить переполнение или опустошение станций.

В заключение я хотел бы поблагодарить всех в BCycle, особенно Ника за предоставление полного набора данных. Все блокноты, которые я использовал для создания статьи, находятся на моем Github. Недавно я прочитал, что есть большие планы по открытию новых станций, увеличению пропускной способности существующих станций и увеличению количества велосипедов в системе. Мы надеемся, что 2017 год станет отличным годом для Austin BCycle!

Наконец, если вам понравилась эта статья, порекомендуйте ее, нажав на значок сердца ниже. Это последний пост BCycle в серии. У меня есть несколько действительно интересных новых статей о различных приложениях науки о данных и машинного обучения. Если вы хотите получать уведомления, когда они будут опубликованы, вы можете подписаться на меня, нажав ниже. Спасибо за чтение !