Прогнозирование цены Dogecoin с помощью машинного обучения
Dogecoin — это криптовалюта, такая же, как Ethereum или Bitcoin, несмотря на то, что она полностью отличается от обеих этих известных монет. Изначально Dogecoin создавался в какой-то степени как шутка для любителей криптовалюты и получил свое название от ранее известного мема.
В этой статье мы будем внедрять модель машинного обучения, которая может прогнозировать модель или прогнозировать цену монеты в ближайшие дни. Давайте теперь перейдем к реализации прогнозирования цен.
Импорт библиотек и набора данных
Библиотеки Python упрощают нам обработку данных и выполнение типичных и сложных задач с помощью одной строки кода.
- Pandas — эта библиотека помогает загружать фрейм данных в формате 2D-массива и имеет несколько функций для выполнения задач анализа за один раз.
- Массивы Numpy очень быстрые и могут выполнять большие вычисления за очень короткое время.
- Matplotlib/Seaborn — эта библиотека используется для рисования визуализаций.
Python3
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsfrom 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 SARIMAXmodel = SARIMAX(endog=train["Close"], exog=train.drop( "Close", axis=1), order=(2, 1, 1))results = model.fit()print(results.summary()) |
Выход:
Теперь наблюдайте прогноз во временном ряду.
Python3
start = 11end = 29predictions = 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) |
Выход: