Statsmodels ARIMA:每个预测的常数值

时间:2018-03-12 14:52:46

标签: python statsmodels arima

我试图使用statsmodels' ARIMA预测时间序列。我使用sklearn' TimeSeriesSplit来评估我的模型。不幸的是,当我预测下一个数据折叠(具有真值Y_test)时,我会得到一个恒定的预测:

if is_arima:
      Y_train = Y_train.astype(float)
      # build basic ARIMA model
      arima_model = ARIMA(Y_train, order=(2,0,1))
      # fit it, using exogenous variables
      arima_results = arima_model.fit()
      # predict next len(test) values, using exogenous variables (X_test)
      preds = arima_results.forecast(steps=len(Y_test))[0]
      print(preds)

这给了我:

115.65096239  120.89113477  121.52020239  121.59572014  121.60478583
  121.60587414  121.60600479  121.60602047  121.60602235  121.60602258
  121.6060226   121.60602261  121.60602261  121.60602261  121.60602261
  121.60602261  121.60602261  121.6060226   121.6060226   121.6060226
  121.6060226   121.6060226   121.6060226   121.6060226   121.6060226
  121.6060226   121.6060226   121.6060226   121.6060226   121.6060226...

这让我觉得我的ARIMA在时间t没有使用预测来预测时间t + 1?

我知道输出不是完全恒定的,但我的数据集显示出很大的变化,所以这是有点关注的。知道发生了什么吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您使用的是ARIMA(2,0,1),因此您的预测是

x(t) = constant + w(t) + a1 * x(t-1) + a2 * x(t-2) + b1 * w(t-1)

因此,您的预测取决于2个因素。您具有自回归项和移动平均项。您的自回归项只是前一个期间值的常数乘以2之前的值的常数。然后有一个移动平均项,它是前一时期预测的误差的常数倍。因此,您的模型可能主要由前两个时期控制,并且它可能很快找到平衡。

尝试打印出参数,然后将其插入excel以查看模型中发生了什么。

print(arima_model.summary())
print(arima_model.params)

答案 1 :(得分:0)

您正在使用递归策略进行多步预测,即,先前步骤中生成的预测将用于迭代地预测下一个预测。这会导致错误累积,结果是预测收敛到一个值。 在很长的数据序列中,有马软件的性能都不好。