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

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

Данные:

Для этой задачи я использовал набор данных Bike Sharing, который находится по адресу https://archive.ics.uci.edu/ml/datasets/bike+sharing+dataset. В этом наборе данных есть данные о прокате велосипедов в столичном регионе Вашингтона. В наборе данных есть такие параметры, как температура, скорость ветра, день недели, час дня, праздник и т. Д., А также параметр cnt, который показывает количество раз, когда велосипеды использовались для поездок за час.



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

Очевидно, что в будние дни с 6:00 до 10:00 и с 16:00 до 19:00 наблюдается рост активности совместного использования велосипедов с небольшим повышением в полдень, что понятно, поскольку это пиковые часы работы / учебы, а полдень - обеденный перерыв. Следовательно, спрос на долю велосипедов в это время высок.

На рисунке 2 ниже показана доля спроса на велосипеды в выходные субботу и воскресенье 12 и 13 февраля 2011 года.

Из рисунка 2 видно, что спрос на велосипеды увеличивается с 6:00 до 14:00, а затем уменьшается. Можно заметить, что спрос на велосипеды по выходным дням не имеет двух пиков, которые показали данные по будням, вероятно, показывающие, что люди пользуются долевым велосипедом утром, получают удовольствие на улице, а после 14:00 спрос снижается.

На Рисунке 3 показан подсчет спроса по месяцам.

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

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

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

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

  1. Случайный (сколько пользователей используют байкшеринг случайно)
  2. Зарегистрирован (сколько зарегистрированных пользователей пользуются велопрокатом)
  3. Будний день (день недели)
  4. Мгновенно (порядковый номер записи данных)
  5. Атемп (нормализованная температура)

После удаления этих столбцов в наших данных останутся следующие столбцы, показанные на рисунке 4:

Здесь

  1. сезон имеет 4 различных значения: 1 = весна, 2 = лето, 3 = осень, 4 = зима
  2. праздник (0 или 1) - считается ли день праздником
  3. рабочий день (0 или 1) - является ли день ни выходным, ни праздником
  4. Погода имеет 4 различных значения 1: Ясно, Небольшая облачность, Небольшая облачность, Небольшая облачность
    2: Туман + Облачность, Туман + Расколотые облака, Туман + Небольшая облачность, Туман
    3: Легкий снег, Небольшой дождь + Гроза + рассеянные облака, небольшой дождь + рассеянные облака
    4: сильный дождь + ледяные поддоны + гроза + туман, снег + туман
  5. temp - температура в градусах Цельсия
  6. влажность - относительная влажность
  7. windspeed - скорость ветра
  8. cnt - количество велосипедов в час

Масштабирование данных

Поскольку влажность, скорость ветра и температура являются непрерывными значениями, мы используем стандартный масштабатор scikit-learn, чтобы масштабировать каждый столбец так, чтобы он имел среднее значение 0 и стандартное отклонение 1. Причина в том, что алгоритмы машинного обучения хорошо работают, если значения масштабируются или нормализуются. Мы поступаем так же со столбцом спроса на долю велосипедов «cnt».

Создание последовательности данных

Чтобы предсказать общий спрос на велосипеды в течение часа, мы даем нашему алгоритму последовательность значений «n» и получаем из нее значение «(n + 1) th». Для этого мы создаем последовательность из «n» входов для «n» часов, а затем используем алгоритм для прогнозирования «(n + 1) -го» спроса на велосипеды на «(n + 1) -й» час. Я использовал последовательность из 10 значений, чтобы предсказать спрос на велосипеды на 11-й час.

Разделить данные

Наконец, мы разбиваем данные на разделение поезд: тест. Я выбрал разделение на 90:10 поезд: тестовый сплит.

Модель машинного обучения

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

Эти LSTM очень хороши для сбора последовательных данных на основе временных рядов. Я не буду вдаваться в подробности его теории, поскольку это отдельная тема.

Я использовал библиотеку Keras со следующими характеристиками модели, показанными на рисунке 6.

Полученные результаты

Модель обучена для 10 EPOCHS, и потери при обучении и проверке оказались равными 0,08 и 0,13 соответственно, как показано на рисунке 7.

Эффективность модели прогнозирования для прогнозирования спроса на долю велосипедов можно увидеть на рисунке 8.

Видно, что наша модель довольно хорошо предсказывает спрос на долю байков.

Заключение

Я надеюсь, что эта реализация LSTM для прогнозирования спроса на акции Capital Bike была интересна читателям. Это помогло мне реализовать LSTM с Keras и укрепило мои знания о Pandas. Полный код можно найти в моем репозитории GitHub по адресу https://github.com/shayanalibhatti/Predicting_Bike_Share_Demand_with_LSTM.