Мы повысили точность результатов машинного обучения с помощью Capital Bikeshare, добавив данные о погоде и событиях. Читайте дальше, пока мы разбираем наш процесс.

В предыдущем проекте Лаборатории машинного обучения мы использовали данные о поездках из системы DC Capital Bikeshare, чтобы сделать простой прогноз того, будет ли конкретная станция проката велосипедов (например, стойка) полностью заполнена или пуста в заданное время. Мы начали первоначальный проект, предполагая, что одних временных данных может быть недостаточно для получения наилучших прогнозов. Однако мы не могли этого знать, пока не поэкспериментировали с использованием только временных данных, не дополнили их и не проверили результаты.

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

Нам нужны были два типа данных о погоде: исторические данные для обучения и текущие или будущие прогнозы, чтобы делать прогнозы на заданное время. Исторические данные получены от Национального управления океанических и атмосферных исследований (NOAA), а прогнозы предоставлены Weather Underground API. Из этих источников мы использовали почасовое количество осадков и почасовую температуру в качестве двух основных точек данных.

Как мы это сделали

Первым ключевым шагом было переформатирование данных NOAA и Weather Underground в единую структуру. Последовательная структура была необходима для построения нашей модели машинного обучения.

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

Отчет о классификации scikit-learn дал нам представление о том, насколько близок набор прогнозов с точки зрения точности. Он состоит из ряда метрик (точность, полнота и т. д.), которые рассматривают прогнозы как двоичные числа: 1 или 0. Поскольку мы делали прогноз между наличием пустой станции и непустой станцией, отчет о классификации предоставил ряд метрик, которые сказали нам о нашей точности более 30 000 прогнозов.

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

Оценка Брайера показывает, насколько ваши прогнозы далеки от точности. Потеря очков Брайера — это число от 0 до 1, и, поскольку оно измеряет, насколько далеко от вашего прогноза был ваш прогноз, вы хотите, чтобы число было как можно ближе к нулю. Оценка Брайера содержит больше нюансов, чем отчет о классификации, поскольку учитывает уровень достоверности. Очевидно, что прогноз с уровнем достоверности 50% менее значим для пользователей, которые должны решить, будут ли они предпринимать действия, чем прогноз с уровнем достоверности 95%. Таким образом, включение показателя Брайера имеет большое значение, поскольку оно дополняет расчет, отраженный в Классификационном отчете.

Мы создали приложение, которое объединило выходные данные отчета о классификации и оценки Брайера в два отчета, сравнивающих алгоритмы друг с другом. В одном отчете прогнозировалось, что одна станция за раз, с данными о погоде и без них, будет либо не полностью пустой, либо полностью пустой. Второй отчет был идентичен, за исключением того, что мы предсказывали, была ли станция полностью или не полностью заполнена. В этом приложении использовалось то же разделение 70/30, что описано в последнем посте, обучение на 70% данных и тестирование оставшихся 30% на модели. Всего мы использовали 100 000 точек данных, в результате чего был получен обучающий набор из 70 000 точек данных и тесты против 30 000 точек данных.

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

Brier Score loss: 0.018248834757
Classification Report:
precision    recall  f1-score   support
0       0.99      0.99      0.99     29544
1       0.12      0.09      0.11       456
avg / total       0.97      0.98      0.97     30000

Вы можете видеть, что показатель Брайера выглядит не так уж плохо — 1,8%. В отчете о классификации первая строка представляет состояние стойки, когда она не была пустой (0). В данном случае точность, с которой мы предсказали это, составила 99%. Вторая строка, начинающаяся с 1, представляет состояние стойки, когда она была полностью пустой. В этом случае мы предсказали правильно в 12% случаев.

Ясно, что мы лучше предсказываем не совсем пустую, чем предсказываем полностью пустую, потому что вероятность того, что стойка будет полностью пустой (т. е. ноль велосипедов), очень мала. Последняя строка представляет два состояния в комбинации. Поскольку в этом вычислении доминирует не совсем пустое состояние, точность 97% выглядит не так уж плохо, но мы действительно хотим, чтобы это полностью пустое состояние имело более высокое число.

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

Brier Score loss: 0.00388922158247
Classification Report:
precision    recall  f1-score   support
0       1.00      1.00      1.00     29543
1       0.85      0.80      0.83       457
avg / total       0.99      0.99      0.99     30000

Теперь оценка Брайера составляет 0,3% по сравнению с 1,8%, что является определенным улучшением. Две строки представляют те же состояния, что и выше. В первой строке у нас теперь 100% точность, если не совсем пусто. Во второй строке, полностью пустое состояние, теперь мы имеем точность 85% по сравнению с 12% раньше. Именно такого улучшения мы надеялись достичь, добавляя дополнительные точки данных. Просто добавив погоду в качестве входных данных, мы повысили точность на 73%.

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

И последнее замечание: мы использовали вероятность 50 % или более, чтобы указать, находится ли стойка в заданном состоянии или нет (т. е. если мы проверяем, что стойка полностью пуста, а вероятность составляет 51 %, то говорят, что она полностью пуста). ). Это может привести к промахам, когда модель предсказывает 51% вероятность того, что стойка будет полностью пуста, а на самом деле это не так. Именно здесь важна оценка Брайера, поскольку она учитывает этот потенциал. В обоих случаях нам удалось существенно снизить оценку Бриера. В реальном мире также было бы уместно показать вероятность конечным пользователям, чтобы они могли принять собственное окончательное решение о том, идти ли к стойке, чтобы взять велосипед.

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

Задачи

Одна из наших самых больших проблем заключалась в том, чтобы перевести исторические данные о погоде из NOAA в формат, аналогичный данным API Weather Underground. Мы были усердны в этой работе и потратили много времени на форматирование и очистку данных NOAA. Ведь данные, используемые моделями, не должны содержать ошибок, иначе прогнозы не будут точными.

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

Дальнейшие шаги

Наш план на будущее состоит в том, чтобы взять то, что мы узнали при построении модели прогнозирования, и превратить это в API, который могут использовать другие, заинтересованные в прогнозировании доступности велосипедов. Как только API будет создан, мы, скорее всего, воспользуемся им для создания как веб-интерфейса, так и, возможно, Slack или даже интерфейса Alexa.

Голосование PanelPicker SXSW 2017 идет в прямом эфире, и мы будем рады, если вы поддержите нашу заявку Innovation Labs: Our Journey Into Emerging Tech. Чтобы проголосовать, нажмите здесь — вы можете быстро создать учетную запись, используя свой профиль Facebook или нажав Создать учетную запись и введя свое имя, адрес электронной почты и пароль. Голосование заканчивается 2 сентября. Мы ценим ваше время и поддержку!