使用ARIMA进行预测

4

我正在使用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 没有返回任何内容,并且缩进错误。可能是在原始发布后进行了更改。 - yoonghm
2个回答

3
最简单的方法是:
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个预测点,有没有办法做到这一点?此外,为什么它会以数组的形式呈现给我? - Niam45
要预测接下来的50个点,你必须记住ARIMA是一种自回归模型,它使用自身来预测未来值,使用时间滞后进行预测。因此,你需要先预测下一个值,然后使用这个新值与原始时间序列连接起来,以预测下一个值,依此类推。 - razimbres

2
您可以使用以下代码获取3个未来时间点:
 fcast<-forecast(fit,h=3)
 fcast<-data.frame(fcast)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接