Прогнозирование цены Dogecoin с помощью машинного обучения
Dogecoin — это криптовалюта, такая же, как Ethereum или Bitcoin, несмотря на то, что она полностью отличается от обеих этих известных монет. Изначально Dogecoin создавался в какой-то степени как шутка для любителей криптовалюты и получил свое название от ранее известного мема.
В этой статье мы будем внедрять модель машинного обучения, которая может прогнозировать модель или прогнозировать цену монеты в ближайшие дни. Давайте теперь перейдем к реализации прогнозирования цен.
Импорт библиотек и набора данных
Библиотеки Python упрощают нам обработку данных и выполнение типичных и сложных задач с помощью одной строки кода.
- Pandas — эта библиотека помогает загружать фрейм данных в формате 2D-массива и имеет несколько функций для выполнения задач анализа за один раз.
- Массивы Numpy очень быстрые и могут выполнять большие вычисления за очень короткое время.
- Matplotlib/Seaborn — эта библиотека используется для рисования визуализаций.
Python3
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.ensemble import RandomForestRegressor |
Теперь давайте загрузим набор данных во фрейм данных панды. Файл CSV можно скачать отсюда.
Python3
data = pd.read_csv( "DOGE-USD.csv" ) data.head() |
Выход:
Теперь проверим корреляцию
Python3
data.corr() |
Выход:
Преобразование даты и времени строки в правильный формат даты и времени с помощью pandas. После этого проверьте, присутствует ли какое-либо нулевое значение или нет.
Python3
data[ "Date" ] = pd.to_datetime(data[ "Date" ], infer_datetime_format = True ) data.set_index( "Date" , inplace = True ) data.isnull(). any () |
Выход:
Open True High True Low True Close True Adj Close True Volume True dtype: bool
Теперь давайте проверим наличие нулевых значений в наборе данных.
Python3
data.isnull(). sum () |
Выход:
Open 1 High 1 Low 1 Close 1 Adj Close 1 Volume 1 dtype: int64
Отбросив эти недостающие значения, чтобы у нас не было ошибок при анализе.
Python3
data = data.dropna() |
Теперь проверьте статистический анализ данных с помощью методаscribe().
Python3
data.describe() |
Выход:
Теперь, во-первых, мы проанализируем цену закрытия, поскольку она нам нужна для выполнения прогноза.
Python3
plt.figure(figsize = ( 20 , 7 )) x = data.groupby( "Date" )[ "Close" ].mean() x.plot(linewidth = 2.5 , color = "b" ) plt.xlabel( "Date" ) plt.ylabel( "Volume" ) plt.title( "Date vs Close of 2021" ) |
Выход:
Столбец «Закрыть» — это наша предсказанная функция. Мы берем различные факторы из предопределенных факторов для собственного расчета и присваиваем им соответствующие имена. Кроме того, мы проверяем каждый фактор, сопоставляя его со столбцом «Закрыть», сортируя его в порядке убывания.
Python3
data[ "gap" ] = (data[ "High" ] - data[ "Low" ]) * data[ "Volume" ] data[ "y" ] = data[ "High" ] / data[ "Volume" ] data[ "z" ] = data[ "Low" ] / data[ "Volume" ] data[ "a" ] = data[ "High" ] / data[ "Low" ] data[ "b" ] = (data[ "High" ] / data[ "Low" ]) * data[ "Volume" ] abs (data.corr()[ "Close" ].sort_values(ascending = False )) |
Выход:
Close 1.000000 Adj Close 1.000000 High 0.995104 Low 0.994575 Open 0.992514 Volume 0.588678 b 0.456479 gap 0.383333 a 0.172057 z 0.063251 y 0.063868 Name: Close, dtype: float64
Путем наблюдения за коррелирующими факторами можно выбрать несколько из них. Мы исключаем High, Low и Open, поскольку они с самого начала сильно коррелированы.
Python3
data = data[[ "Close" , "Volume" , "gap" , "a" , "b" ]] data.head() |
Выход:
Представляем модель ARIMA для анализа временных рядов. ARIMA означает авторегрессионную интегрированную модель скользящего среднего и определяется тремя параметрами порядка: (p, d, q), где AR означает авторегрессию, т. е. p, I означает интеграцию, т. е. d, MA означает скользящее среднее, т.е. с экзогенными переменными.
Python3
df2 = data.tail( 30 ) train = df2[: 11 ] test = df2[ - 19 :] print (train.shape, test.shape) |
Выход:
(11, 5) (19, 5)
Форма поезда (11, 5), а тест (19, 5). Давайте реализуем модель SARIMAX и посмотрим на результаты.
Разработка модели
Python3
from statsmodels.tsa.statespace.sarimax import SARIMAX model = SARIMAX(endog = train[ "Close" ], exog = train.drop( "Close" , axis = 1 ), order = ( 2 , 1 , 1 )) results = model.fit() print (results.summary()) |
Выход:
Теперь наблюдайте прогноз во временном ряду.
Python3
start = 11 end = 29 predictions = results.predict( start = start, end = end, exog = test.drop( "Close" , axis = 1 )) predictions |
Выход:
Наконец, постройте прогноз, чтобы получить визуализацию.
Python3
test[ "Close" ].plot(legend = True , figsize = ( 12 , 6 )) predictions.plot(label = "TimeSeries" , legend = True ) |
Выход: