使用 ARIMA 进行预测
Posted
技术标签:
【中文标题】使用 ARIMA 进行预测【英文标题】:Forecasting with ARIMA 【发布时间】:2019-05-06 21:11:06 【问题描述】:我正在使用 ARIMA 模型预测时间序列数据。我使用以下代码找到了最适合的 ARIMA 模型:
def run_arima_model(df, ts, p,d,q):
from statsmodels.tsa.arima_model import ARIMA
model=ARIMA(df[ts], order=(p,d,q))
results_=model.fit(disp=-1)
len_results = len(results_.fittedvalues)
ts_modified = df[ts][-len_results:]
# calculate root mean square error (RMSE) and residual sum of squares (RSS)
rss = sum((results_.fittedvalues - ts_modified)**2)
rmse = np.sqrt(rss / len(df[ts]))
# plot fit
plt.plot(df[ts])
plt.plot(results_.fittedvalues, color = 'red')
plt.title('For ARIMA model (%i, %i, %i) for ts %s, RSS: %.4f, RMSE: %.4f' %(p, d, q, ts, rss, rmse))
plt.show()
plt.close()
return results_
model_AR = run_arima_model(df,
ts = 'I',
p = 1,
d = 0,
q = 0)
# MA model with 1st order differencing - ARIMA (0,0,1)
model_MA = run_arima_model(df,
ts = 'I',
p = 0,
d = 0,
q = 1)
# ARMA model with 1st order differencing - ARIMA (1,0,1)
model_MA = run_arima_model(df,
ts = 'I',
p = 1,
d = 0,
q = 1)
ARIMA(1,0,1) 最适合我当前的数据,我如何让它来预测未来的点?
【问题讨论】:
函数run_arima_model
不返回任何内容并且缩进错误。也许它在原始帖子之后被更改了。
【参考方案1】:
最简单的方法:
model00 = ARIMA(np.array(dataframe.ix[:,4]), dates=None,order=(2,1,0))
model11 = model00.fit(disp=1)
model11.forecast()
model11.summary()
你会得到你的预测加:
【讨论】:
如果我打印model11的预测,它会给我以下: (array([0.13386933]), array([0.01517833]), array([[0.10412034, 0.16361831]]))我希望能够指定我需要接下来的 50 个预测点,有没有办法做到这一点?此外,为什么它会在一个数组中给我这个? 要预测接下来的 50 个点,您必须记住 ARIMA 是一个自回归模型,它使用自身来预测未来值,使用时间滞后,因此您预测下一个值,然后使用这个新值连接使用原始时间序列来预测下一个值等等。【参考方案2】:您可以使用以下代码获得 3 个未来点
fcast<-forecast(fit,h=3)
fcast<-data.frame(fcast)
【讨论】:
以上是关于使用 ARIMA 进行预测的主要内容,如果未能解决你的问题,请参考以下文章
使用 auto.arima() 和 xreg 进行样本外预测