Кто не слышал о самых известных цифровых деньгах в мире, криптовалюте десятилетия? Правильно, я говорю о Биткойн. Все говорят о Биткойне и о том, что будет с его рекордно высокой ценой, включая известные финансовые бренды, такие как JPMorgan и Morgan Stanley. В этом году Биткойн сообщил о своей рекордно высокой цене в 61 556,59 долларов в марте 2021 года, согласно CoinDesk 20.
Самый большой вопрос, конечно же, что будет с ценой на эти волшебные деньги. Это вопрос, на который ни у кого нет определенного ответа, потому что предсказать точную цену биткойна или, фактически, любого другого финансового инструмента практически невозможно. Однако мы можем использовать методы Data Science для прогнозирования цены биткойнов с высокой точностью, и именно этим мы и собираемся заниматься в этой статье. Мы построим модель глубокого обучения, которая будет использовать исторические данные Биткойна для прогнозирования его цены.
К концу статьи вы узнаете о:
- Глубокое обучение (RNN, LSTM)
- Предварительная обработка данных
- Оценка модели прогнозирования цен на биткойны
О биткойнах
Биткойн предлагает эффективные денежные переводы через Интернет, управляется децентрализованной сетью с прозрачным набором правил и работает как альтернатива фиатным деньгам, контролируемым центральным банком. Ключевой технологией, лежащей в основе этой криптовалюты, является феномен цепочки блоков, представляющий собой постоянно растущий список записей (блоков), связанных с использованием криптографии, где каждый блок содержит криптографический хэш предыдущего блок, отметку времени и данные транзакции.
По своей конструкции блокчейн не может быть изменен, потому что после того, как он был записан, данные в любом данном блоке не могут быть изменены впоследствии без изменения всех последующих блоков. Следовательно, любые изменения в одном блоке сделают все последующие блоки в цепочке блоков недействительными, что сделает очевидным, что исходные данные были изменены.
Исторические данные о ценах на биткойны
Для обучения нашей модели ценообразования мы используем общедоступные данные о ценах на биткойн за период 2016–2020 гг., Финансовые данные за 5 лет, загруженные из Yahoo Finance. Для оценки наших В модели мы используем данные о ценах на биткойны за период с января 2021 года по март 2021 года. Мы используем модель для прогнозирования цен на биткойны за этот период и сравниваем их с реальными ценами, чтобы понять, насколько хорошо модель смогла спрогнозировать цены.
Предварительная обработка данных
Шаг 1: Нормализация Наша модель основана на RNN со слоями LSTM, в которой используется сигмовидная функция активации для преобразования входных векторов в векторы с записями, значение которых находится в диапазоне [0, 1]. Поэтому мы используем нормализацию для масштабирования функций модели, учитывая, что знаменатель всегда будет больше, чем знаменатель, выходное значение всегда будет числом от 0 до 1.
from sklearn.preprocessing import MinMaxScaler sc = MinMaxScaler(feature_range=(0,1)) training_set_scaled = sc.fit_transform(training_set)
Шаг 2. Преобразование данных. Для RNN мы делаем предположение относительно количества периодов времени, на которые модель должна вернуться во времени, чтобы узнать о текущем периоде времени. Учитывая, что в месяце обычно 30 дней, 3 месяца, то есть 90 дней, период времени кажется разумным предположением для нашей модели RNN, чтобы учиться на ценах на биткойны в прошлом. Следовательно, для каждой цены X_train будет содержать цены на биткойны за последние 60 дней, а Y_train будет ценой биткойнов на этот день, и это будет сохраняться для всех периодов времени.
import numpy as np X_train = [] y_train = [] X_test = [] for i in range(90,training_set_scaled.size): X_train.append(training_set_scaled[i-90:i, 0]) y_train.append(training_set_scaled[i, 0]) X_train, y_train = np.array(X_train), np.array(y_train) for i in range(90,inputs.size): X_test.append(inputs[i-90:i, 0]) X_test = np.array(X_test)
Шаг 3. Формирование данных. Добавление дополнительного измерения к модели, которое позволит использовать дополнительные индикаторы, помогающие прогнозировать цену (например, внешние события, вызывающие беспокойство общественности). Таким образом мы преобразуем данные из 2D в 3D.
X_train = np.reshape(X_train, [X_train.shape[0], X_train.shape[1], 1]) X_test = np.reshape(X_test, [X_test.shape[0], X_test.shape[1], 1])
Загрузите данные обучения и тестирования биткойнов здесь: https://github.com/TatevKaren/recurrent-neural-network-stock-price-predicition/tree/main/bitcoin_data
Глубокое обучение
Вся идея Глубокого обучения состоит в том, чтобы имитировать функциональные возможности человеческого мозга. Если искусственные нейронные сети (ИНС) отвечают за долговременную память, как височная доля нашего мозга, и если сверточные нейронные сети (CNN) отвечают за распознавание изображений и визуальную интерпретацию, как затылочная доля наш мозг, а затем рекуррентные нейронные сети (РНС), как и лобная доля нашего мозга, отвечают за кратковременную память.
Рекуррентные нейронные сети (RNN)
С одной стороны, информация течет от входных слоев к выходному слою, а с другой стороны, вычисленная ошибка распространяется обратно по сети для обновления весов. В отличие от ANN и CNN, в случае RNN, скрытые слои не только обеспечивают вывод, но и сами себя питают.
Что делает RNN, так это то, что она переводит предоставленные входные функции в машиночитаемые векторы. Затем система обрабатывает каждый из этой последовательности векторов один за другим, переходя от самого первого вектора к следующему в последовательном порядке. Во время обработки система передает информацию через скрытое состояние (состояние памяти) на следующий шаг этой последовательности.
Как только скрытое состояние собрало всю существующую информацию в системе из предыдущих шагов, оно готово перейти к следующему шагу и объединить эту информацию с входными данными текущего шага (Xt), чтобы сформировать новый информационный вектор.
Долгосрочные кратковременные воспоминания (LSTM)
При обучении модели RNN, во время процесса оптимизации, в самую начальную эпоху, веса - это случайно выбранные значения, и в случае, если эти выбранные значения очень малы, многократно умножая их на один и тот же рекуррентный вес, градиент становится все меньше и меньше. и в какой-то момент градиент исчезает. Затем, чем ниже градиент, тем сложнее обновить вес, а значит, тем медленнее будет процесс оптимизации.
Кроме того, существует эффект домино и один неправильно обновленный вес влияет на расчет оставшихся весов и делает их неточными, учитывая, что все веса связаны. Эта проблема в RNN называется Проблема исчезающего градиента, а Долгосрочные краткосрочные запоминания (LSTM) решают эту проблему RNN. Разница между обычным RNN и LSTM заключается в наборе операций, которые выполняются с переданной информацией и входным значением на этом конкретном шаге. Информация в LSTM проходит через его ворота:
- ворота забыть: ворота, которые решают, какую информацию следует выбросить или оставить
- входной вентиль: вентиль для обновления состояния ячейки
- состояние ячейки: шлюз для обновления состояния ячейки до новых значений, которые сеть считает релевантными
- выходной шлюз: шлюз, определяющий, каким должно быть следующее скрытое состояние
Построение модели ценообразования биткойнов
Цель состоит в том, чтобы спрогнозировать цены акций, которые представляют собой непрерывную стоимость выпуска, поэтому у нас есть проблема регрессии, а не классификации. Мы инициализируем этот регрессор как объект с последовательными слоями, для чего используем модуль Sequential из Keras, позволяющий создать объект нейронной сети с последовательными слоями. Затем мы добавляем слои LSTM и, учитывая, что прогнозирование цены финансового продукта - довольно сложная задача, нам нравится иметь модель с высокой размерностью, которая может фиксировать восходящие и нисходящие тенденции в цене акций, поэтому мы используем большое количество LSTM. единиц на уровень LSTM, и мы используем несколько уровней LSTM. Кроме того, мы добавляем слой Dropout для регуляризации, чтобы игнорировать часть нейронов в слоях LSTM. Наконец, мы используем модуль Dense, чтобы добавить выходной слой.
from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from keras.layers import Dropout regressor = Sequential() # LSTM layer 1 regressor.add(LSTM(units = 50, return_sequences=True, input_shape = (X_train.shape[1], 1))) regressor.add(Dropout(0.2)) # LSTM layer 2,3,4 regressor.add(LSTM(units = 50, return_sequences=True)) regressor.add(Dropout(0.2)) regressor.add(LSTM(units = 50, return_sequences=True)) regressor.add(Dropout(0.2)) regressor.add(LSTM(units = 50, return_sequences=True)) regressor.add(Dropout(0.2)) regressor.add(LSTM(units = 50, return_sequences=True)) regressor.add(Dropout(0.2)) # LSTM layer 5 regressor.add(LSTM(units = 50)) regressor.add(Dropout(0.2)) # Fully connected layer regressor.add(Dense(units = 1)) # Compiling the RNN regressor.compile(optimizer = 'adam', loss = 'mean_squared_error') #Fitting the RNN model regressor.fit(X_train, y_train, epochs = 120, batch_size = 32)
Прогнозы модели ценообразования биткойнов
После обучения модели ценообразования мы используем ее в сочетании с тестовыми данными для создания прогнозов цен на биткойны на период тестирования с января 2021 года по март 2021 года, которые затем сравниваем с реальными ценами на биткойны, сообщенными за тот же период времени.
Как мы видим, наша модель RNN, основанная на нескольких слоях LSTM, смогла правильно предсказать восходящие и нисходящие тенденции, поскольку мы видим, что синяя линия, соответствующая прогнозируемым ценам на биткойны, следует той же схеме, что и желтая линия, которая соответствует реальным ценам биткойнов.
import matplotlib.pyplot as plt predicted_stock_price= regressor.predict(X_test) predicted_stock_price= sc.inverse_transform(predicted_stock_price) plt.plot(real_stock_price, color = '#ffd700', label = "Real Price January - March 2021") plt.plot(predicted_stock_price, color = '#4782B4', label = "Predicted Price January - March 2021") plt.title("Bitcoin Price Prediction") plt.xlabel("Time") plt.ylabel("Bitcoin Price") plt.legend() plt.show()
Ресурсы
Более
Модель ценообразования акций Google с RNN: https://github.com/TatevKaren/recurrent-neural-network-price-predicition
Модель прогнозирования оттока клиентов с ИНС: https://github.com/TatevKaren/artificial-neural-network-business_case_study
Модель распознавания изображений с CNN: https://github.com/TatevKaren/convolutional-neural-network-image_recognition_case_study