所以在这里我试图用时间序列(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