【问题标题】:Statsmodels ARIMA: Constant Value for Each ForecastStatsmodels ARIMA:每个预测的常数值
【发布时间】:2018-08-20 15:32:47
【问题描述】:

我正在尝试使用 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?

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

谢谢!

【问题讨论】:

  • 可以添加估计参数吗?我的猜测是几乎没有持久性,并且预测恢复到平均值的速度相对较快。如果数据的大变化不是强自相关,那么使用 ARMA 的长期预测将无法捕捉到波动。
  • 平坦的预测告诉您您的数据,正如 Rob Hydman 指出的那样,“没有趋势、没有季节性,并且时间动态不足以让未来的观察具有不同的条件手段。”
  • 你找到解决方案了吗?你是怎么解决这个问题的?@bclyaman

标签: python statsmodels arima


【解决方案1】:

您使用 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)

【讨论】:

    【解决方案2】:

    您正在使用递归策略进行多步预测,即前面步骤中生成的预测用于迭代地预测下一个预测。它会导致误差累积,因此预测会收敛到一个值。 Arima 在很长的数据系列中表现不佳。

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 2021-03-01
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 2018-01-17
      • 2020-08-29
      相关资源
      最近更新 更多