Keras, sklearn, LSTM, Pandas, Seaborne, Matplotlib, re

Целью проекта было изучить доступные варианты для создания модели, которая могла бы предсказать поведение цены в течение выбранного периода времени. Переменные, которые я решил использовать, были связаны с настроениями в твиттере. Настроение основано на 2 различных элементах: полярности и чувствительности. Я упустил из виду метрику, которую я включил, - это объем твитов, который играет важную роль или является отрицательным показателем, о чем я немного подробнее расскажу в этом посте.

0. Предварительные требования

Пакеты Python: Keras, sklearn, LSTM, Pandas, Seaborne, Matplotlib, re

IDE или ноутбук

Данные: поток данных Twitter за период x, цена BTC

1. Очистка данных и моделирование

1.1 Очистка набора данных Twitter

Удаление столбца «текст», так как после анализа тональности он больше не нужен. Также убираем столбец «имя». Следующим важным шагом является усечение метода dateTime, известного в Python как «floor». Которая будет постоянно округляться до часа.

Затем важно создать новую функцию «Объем твитов» путем агрегирования и группировки всех твитов по часам.

Наконец, мы получили набор данных Twitter:

1.2 Очистка набора данных BTC

Падающие столбцы (максимум, открытие, минимум, валюта объема, взвешенная цена)

Final_df, созданный с использованием Inner Join с функцией слияния pandas, слияние в столбце dateTime для создания данных.

… Очень важный этап

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

Параметры модели фитинга

Тренировочный тестовый сплит составил 200 часов из 294 общих.

Параметры модели обучены на 50 эпохах, разделение валидации 0,2, размер партии - 12

Скомпилировано с функцией потерь MAE и оптимизатором adam

2. Исследовательский анализ данных, основные выводы и результаты

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

Из графика ясно, что объем твитов очень сильно коррелирует с объемом торговли BTC. Две другие функции, которые имеют заметную корреляцию, - это громкость твита и полярность. Я изучу это дальше, создав 2 диаграммы, отображающие эти функции вместе, чтобы дать лучшее понимание ниже.

Итак, на рис. 2 это демонстрирует корреляцию между полярностью твитов и торгуемым объемом BTC. Чем выше полярность, тем меньше объем торговли и наоборот. С высокими объемами торговли с 18:00 до 20:00 по Гринвичу.

На рис. 3 показана почасовая корреляция между объемом твитов и объемом торговли BTC, которая говорит сама за себя, отображая основные часы работы в Европе. С наибольшим объемом твитов и торгов в период с 15:00 до 20:00 по Гринвичу.

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

рис. 5 - важная часть, показывающая, как модель работала при прогнозировании последних 90 часов данных с введенным лагом в 3 часа. Примечание: Синяя линия представляет реальную цену за этот период, а зеленая линия представляет прогнозируемую цену.

Производительность модели при тестировании:

Test MSE: 5498.255
Test RMSE: 74.150

3. Заключение

О чем мне говорят мои результаты?

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

Можно ли предсказать поведение цены биткойнов?

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

Что бы я сделал иначе?

  1. Получите больше данных!
  2. Выполните несколько статистических проверок гипотез на данных.
  3. Создал индекс волатильности и добавил его как функцию

Если у вас возникнут какие-либо вопросы, вопросы или идеи, обращайтесь ко мне. Также найдите ядро ​​Kaggle для этого проекта здесь.