Statsmodels ARIMA - Different results using predict() and forecast()(统计模型ARIMA-使用Forecast()和Forecast()的不同结果)
问题描述
我会使用(StatsModels)ARIMA来预测序列中的值:
plt.plot(ind, final_results.predict(start=0 ,end=26))
plt.plot(ind, forecast.values)
plt.show()
我以为我会从这两个图中得到相同的结果,但结果却是这样的:
我想知道问题是关于预测还是预测
推荐答案
从图表上看,您似乎正在使用forecast()
进行样本外预测,使用Forecast进行比特样本内预测。根据ARIMA方程的性质,对于较长的预测期,超出样本的预测往往会收敛到样本平均值。
forecast()
和predict()
在不同场景下是如何工作的,我系统地比较了ARIMA_results
类中的各种模型。请随意复制与statsmodels_arima_comparison.py
in this repository的比较。我研究了order=(p,d,q)
的每一种组合,只将p, d, q
限制为0或1。例如,order=(1,0,0)
可以得到一个简单的自回归模型。
简而言之,我研究了三个选项,使用以下(stationary) time series:
A.迭代样本内预测形成历史。历史由时间序列的前80%形成,最后20%形成测试集。然后预测测试集的第一个点,将真实值添加到历史中,预测第二个点,等等。这将给出模型预测质量的评估。
for t in range(len(test)):
model = ARIMA(history, order=order)
model_fit = model.fit(disp=-1)
yhat_f = model_fit.forecast()[0][0]
yhat_p = model_fit.predict(start=len(history), end=len(history))[0]
predictions_f.append(yhat_f)
predictions_p.append(yhat_p)
history.append(test[t])
B.接下来,我通过迭代预测测试系列的下一个点,并将此预测附加到历史中,来研究样本外预测。
for t in range(len(test)):
model_f = ARIMA(history_f, order=order)
model_p = ARIMA(history_p, order=order)
model_fit_f = model_f.fit(disp=-1)
model_fit_p = model_p.fit(disp=-1)
yhat_f = model_fit_f.forecast()[0][0]
yhat_p = model_fit_p.predict(start=len(history_p), end=len(history_p))[0]
predictions_f.append(yhat_f)
predictions_p.append(yhat_p)
history_f.append(yhat_f)
history_f.append(yhat_p)
C.我使用了forecast(step=n)
参数和predict(start, end)
参数,以便使用这些方法进行内部多步预测。
model = ARIMA(history, order=order)
model_fit = model.fit(disp=-1)
predictions_f_ms = model_fit.forecast(steps=len(test))[0]
predictions_p_ms = model_fit.predict(start=len(history), end=len(history)+len(test)-1)
原来:
A.预测和预测AR的结果相同,但ARMA的结果不同:test time series chart
B.预测和预测对AR和ARMA产生不同的结果:test time series chart
C.预测和预测AR的结果相同,但ARMA的结果不同:test time series chart
此外,比较B.和C.中看似相同的方法,我在结果中发现了细微但明显的差异。我认为,差异主要是因为forecast()
和predict()
中的"预测是在原始内生变量的水平上进行的"产生了对水平差异的预测(compare the API reference)。
此外,考虑到我更信任统计模型函数的内部功能,而不是我的简单迭代预测循环(这是主观的),我建议使用forecast(step)
或predict(start, end)
。
这篇关于统计模型ARIMA-使用Forecast()和Forecast()的不同结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:统计模型ARIMA-使用Forecast()和Forecast()的不同结果
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01