- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试仅使用自动回归算法来构建老式模型。我发现在 statsmodel
包中有它的实现。我已经阅读了文档,据我了解它应该作为 ARIMA 工作。所以,这是我的代码:
import statsmodels.api as sm
model = sm.tsa.AutoReg(df_train.beer, 12).fit()
当我想预测新值时,我会尝试遵循文档:
y_pred = model.predict(start=df_test.index.min(), end=df_test.index.max())
# or
y_pred = model.predict(start=100, end=1000)
两者都返回一个 NaN 列表。
此外,当我输入 model.predict(0, df_train.size - 1)
时,它会预测实际值,但 model.predict(0, df_train.size)
预测 NaN 列表。
我做错了什么吗?
P.S. 我知道有 ARIMA、ARMA 或 SARIMAX 算法可以用作基本的自动回归。但我确实需要 AutoReg。
最佳答案
我们可以通过几种方式进行预测:
predict()
函数和AutoReg()
学习的参数:这将有助于短期预测,我们将看到.让我们从 statsmodels
的示例数据集开始,数据如下所示:
import statsmodels.api as sm
data = sm.datasets.sunspots.load_pandas().data['SUNACTIVITY']
plt.plot(range(len(data)), data)
让我们拟合一个 AR(p) 过程来对时间序列建模,并使用偏自相关图找到阶数 p,如下所示
从上面可以看出,前几个 PACF 值仍然很重要,让我们使用 p=10 作为 AR(p)。
让我们将数据分为训练和验证(测试)数据集,并使用训练数据拟合 10 阶自回归模型:
from statsmodels.tsa.ar_model import AutoReg
n = len(data)
ntrain = int(n*0.9)
ntest = n - ntrain
lag = 10
res = AutoReg(data[:ntrain], lags = lag).fit()
现在,使用 predict()
函数预测与保留数据集对应的所有值:
preds = res.model.predict(res.params, start=n-ntest, end=n)
请注意,我们可以使用训练模型中的参数得到完全相同的预测,如下所示:
x = data[ntrain-lag:ntrain].values
preds1 = []
for t in range(ntrain, n):
pred = res.params[0] + np.sum(res.params[1:]*x[::-1])
x[:lag-1], x[lag-1] = x[-(lag-1):], pred
preds1.append(pred)
请注意,以这种方式生成的预测值与使用上面的 predict()
函数获得的预测值相同。
np.allclose(preds.values, np.array(preds1))
# True
现在,让我们绘制测试数据的预测值:
可以看出,对于长期预测,预测质量不是很好(因为预测值用于长期预测)。
现在让我们改为进行短期预测,并使用数据集中的最后一个滞后 点来预测下一个值,如下一个代码片段所示。
preds = []
for t in range(ntrain, n):
pred = res.params[0] + np.sum(res.params[1:]*data[t-lag:t].values[::-1])
preds.append(pred)
从下图中可以看出,短期预测效果更好:
关于python - 如何在 python 中使用 AutoReg 预测时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63428622/
我是一名优秀的程序员,十分优秀!