Dogecoin(狗狗币)是一种加密货币,就像以太坊或比特币一样-尽管它与这两种着名的硬币完全不同。Dogecoin最初在某种程度上是作为加密爱好者的一个笑话,并从一个以前众所周知的模因中取了它的名字。
在本文中,我们将实现一个机器学习模型,该模型可以预测未来几天狗狗币的模式或价格。现在让我们转向价格预测的实施。
导入库和数据集
Python库使我们可以轻松地处理数据,并通过一行代码执行典型和复杂的任务。
Pandas -此库有助于以2D数组格式加载数据框,并具有多个功能,可一次性执行分析任务。
Numpy - Numpy数组非常快,可以在很短的时间内执行大型计算。
Matplotlib/Seaborn -此库用于绘制可视化。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestRegressor
现在让我们将数据集加载到panda的数据框中。
data = pd.read_csv("DOGE-USD.csv")
data.head()
现在,让我们检查一下相关性
data.corr()
将字符串date & time转换为正确的日期和时间格式。之后检查是否存在任何空值。
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
现在,让我们检查数据集中是否存在空值。
data.isnull().sum()
输出:
Open 1
High 1
Low 1
Close 1
Adj Close 1
Volume 1
dtype: int64
删除那些缺失的值,以便我们在分析时不会有任何错误。
data = data.dropna()
现在,使用describe()方法检查数据的统计分析。
data.describe()
现在,首先我们将分析收盘价,因为我们需要它来执行预测。
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")
“Close”列是我们预测的功能。我们从预定义的因子中选取不同的因子用于自己的计算,并适当地命名它们。此外,我们检查每个因素,同时与“Close”列相关,同时按降序对其进行排序。
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,因为它们从一开始就高度相关。
data = data[["Close", "Volume", "gap", "a", "b"]]
data.head()
这里,使用时间序列分析的ARIMA模型。ARIMA代表自回归积分移动平均模型,由三个阶参数指定(p, d, q):其中AR代表自回归,即p,I代表积分,即d,MA代表移动平均线,q。而SARIMAX是带有外生变量的季节性ARIMA 。
df2 = data.tail(30)
train = df2[:11]
test = df2[-19:]
print(train.shape, test.shape)
输出:
(11, 5) (19, 5)
让我们实现SARIMAX模型并查看结果。
模型构建
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())
现在,观察时间序列中的预测。
start = 11
end = 29
predictions = results.predict(
start=start,
end=end,
exog=test.drop("Close", axis=1))
predictions
最后,绘制预测以获得可视化。
test["Close"].plot(legend=True, figsize=(12, 6))
predictions.plot(label='TimeSeries', legend=True)