使用statsmodels进行时间序列预测

时间:2017-01-09 19:18:46

标签: python pandas statistics time-series statsmodels

所以在这里我试图用时间序列(ts)预测一年的价值,使用arima模型,但我实际上无法获得预测值,预测值有点在不同的比例(你可以看到数据集中的最后一个是339,预测非常小)但我不知道在哪里调整代码。我试图将fill_value更改为不同的值,但我不知道这是否是正确的方法。 我想这也可能与这一行有关:

predictions_ARIMA_log = pd.Series(ts_log.ix[0], index=ts_log.index)

有没有办法扩展索引以涵盖预测值?

代码如下:

ts_log = np.log(ts)
ts_log_diff = ts_log - ts_log.shift()

model = ARIMA(ts_log, order=(2, 1, 2))
results_ARIMA = model.fit(disp=-1)
plt.plot(ts_log_diff)
plt.plot(results_ARIMA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-ts_log_diff)**2))

predictions_ARIMA_diff = pd.Series(results_ARIMA.predict('1949-02-01','1961-12-01'), copy=True)
predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum()
predictions_ARIMA_log = pd.Series(ts_log.ix[0], index=ts_log.index)
predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum,fill_value=0)
predictions_ARIMA = np.exp(predictions_ARIMA_log)

plt.plot(ts)
plt.plot(predictions_ARIMA)
plt.title('RMSE: %.4f'% np.sqrt(sum((predictions_ARIMA-ts)**2)/len(ts)))

所以在这里你可以看到结果的外观,第一个是我的最后一个值,以1961-01-01开头,我预测了值。

1960-12-01    339.216967
1961-01-01      3.111950
1961-02-01      3.295407
1961-03-01      3.540066
1961-04-01      3.789093
1961-05-01      3.980322
1961-06-01      4.068641
1961-07-01      4.045327
1961-08-01      3.939715
1961-09-01      3.802622
1961-10-01      3.684713
1961-11-01      3.622262
1961-12-01      3.632668

0 个答案:

没有答案