Прогнозирование цены Dogecoin с помощью машинного обучения

Опубликовано: 21 Февраля, 2023

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)

Выход: