【发布时间】: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