python - 如何执行不涉及重新拟合ARIMA模型的多步时差预测?

标签 python forecasting arima

我已经有一个适合使用python的时间序列数据(例如,data[0:100])的ARIMA(p,d,q)模型。我想使用此模型进行预测(forecast[100:120])。但是,鉴于我也有将来的真实数据(例如data[100:120]),如何确保多步预测将我拥有的将来的真实数据考虑在内,而不是使用其预测的数据?

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

我想避免在每个时间步都用更新的“历史记录”来重新拟合整个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步后,它仅使用预测值)。我想知道是否有办法提供“ future ”的真实值(value),以提供更好的在线预测。类似于以下内容:

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模型的理解/使用是否存在某些错误?

最佳答案

我正在为这个问题而苦苦挣扎。幸运的是,我发现了一个非常有用的讨论。据我所知,Python中的ARIMA不支持这种情况,我们需要使用SARIMAX。

您可以引用讨论链接:https://github.com/statsmodels/statsmodels/issues/2788

关于python - 如何执行不涉及重新拟合ARIMA模型的多步时差预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56335992/

相关文章:

Python排列列表并将其写回文件

python - 如何在时间序列预测中使用mysql数据集

r - 避免在 R 中的 for 循环中使用 "optimization failure"

python - 时间序列平稳性

python - auto arima python 中的预测区间

Python-将大数组排序为多个

python - 通过外键关联的两个不同模型的搜索结果

r - 将 Forecast.gts(hts 包)与外部回归器和并行处理结合使用

python - 湿度时间序列预测

Python subprocess.call bash 别名