【问题标题】:How to perform multi-step out-of-time forecast which does not involve refitting the ARIMA model?如何执行不涉及重新拟合 ARIMA 模型的多步超时预测?
【发布时间】:2019-10-13 14:46:07
【问题描述】:

我有一个现有的 ARIMA (p,d,q) 模型适合使用 python 的时间序列数据(例如,data[0:100])。我想用这个模型做预测(forecast[100:120])。但是,鉴于我也有未来的真实数据(例如:data[100:120]),我如何确保多步预测考虑到我拥有的未来真实数据,而不是使用它预测的数据?

本质上,在预测时,我希望使用data[100] 而不是forecast[100] 来计算forecast[101]

我想避免在每个时间步都用更新的“历史”重新拟合整个 ARIMA 模型。

我对 ARIMAX 模型的拟合如下:

train, test = data[:100], data[100:]
ext_train, ext_test = external[:100], external[100:]
model = ARIMA(train, order=(p, d, q), exog=ext_train)
model_fit = model.fit(displ=False)

现在,下面的代码允许我预测整个数据集的值,包括测试

forecast = model_fit.predict(end=len(data)-1, exog=external, dynamic=False)

但是,在这种情况下,经过 100 步后,ARIMAX 预测值会迅速收敛到长期平均值(正如预期的那样,因为在 100 步后它仅使用预测值)。我想知道是否有办法提供“未来”的真实值来提供更好的在线预测。大致如下:

forecast = model_fit.predict_fn(end = len(data)-1, exog=external, true=data, dynamic=False)

我知道我总是可以通过这样做来不断改装 ARIMAX 模型

historical = train
historical_ext = ext_train
predictions = []

for t in range(len(test)):
    model = ARIMA(historical, order=(p,d,q), exog=historical_ext)
    model_fit = model.fit(disp=False)
    output = model_fit.forecast(exog=ext_test[t])[0]
    predictions.append(output)
    observed = test[t]
    historical.append(observed)
    historical_ext.append(ext_test[t])

但这导致我一次又一次地训练 ARIMAX 模型,这对我来说没有多大意义。这会导致使用大量计算资源并且非常不切实际。这进一步使得评估 ARIMAX 模型变得困难,导致拟合的参数在每次迭代时都在不断变化。

我对 ARIMAX 模型的理解/使用有什么不正确的地方吗?

【问题讨论】:

  • 我也有同样的问题。你找到答案了吗?
  • 很遗憾,没有。我找不到一个简单的方法来做到这一点。我相信 R 包对此有一些支持,但我无法将我已经拥有的所有内容移植到 R。
  • 这是正确的@john.Ludlum
  • 如果您的问题还没有解决,您可能会发现这很有帮助:statsmodels.org/dev/examples/notebooks/generated/…

标签: python forecasting arima


【解决方案1】:

您是对的,如果您想使用新数据进行在线预测,您将需要一遍又一遍地估计参数,这在计算上是低效的。 需要注意的一点是,对于 ARIMA 模型,主要是模型的 MA 部分参数的估计计算量很大,因为这些参数是使用数值优化来估计的,而不是使用普通的最小二乘法。由于在为初始模型计算了一次参数后,您就知道未来模型的预期值,因为一次观察不会对它们产生太大影响,您也许可以初始化参数搜索以提高计算效率。

另外,可能有一种方法可以更有效地进行估计,因为您拥有模型的旧数据和参数,您唯一要做的就是再添加一个数据点。这意味着您只需要计算新数据点与所有其他数据点组合的 theta 和 phi 参数,而无需再次计算已知组合,这将节省相当多的时间。我非常喜欢这本书:Heij、Christiaan 等。计量经济学方法在商业和经济学中的应用。牛津大学出版社,2004 年。

本次讲座可能会让您了解这如何可行:lecture on ARIMA parameter estimation

恐怕您必须自己实施。据我所知,没有现成的方法可以做到这一点。

希望这能给你一些新的想法!

【讨论】:

    【解决方案2】:

    正如这个非常好的博客所建议的那样 (3 facts about time series forecasting that surprise experienced machine learning practitioners):

    “每次要生成新的预测时都需要重新训练模型”,它还可以直观地理解为什么会发生这种情况。
    这基本上强调了时间序列预测挑战是一个不断变化的变化,需要重新调整。

    【讨论】:

    • 恕我直言你应该得到更多的细节。这接近于仅链接的答案。
    • 我明白了,我只是试着不重复博客,总结了一个很简短的解释。
    【解决方案3】:

    我一直在努力解决这个问题。幸运的是,我发现了一个非常有用的讨论。据我所知,python中的ARIMA不支持这种情况,我们需要使用SARIMAX。

    可以参考讨论链接:https://github.com/statsmodels/statsmodels/issues/2788

    【讨论】:

    • 哇,太好了,谢谢!要是我在做这个的时候能找到这个就好了
    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多