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

问题描述 投票:3回答:2

我有一个已经存在的ARIMA(p,d,q)模型,适合使用python的时间序列数据(例如data[0:100])。我想对此模型进行预测(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个时间步长后,它仅使用预测值)。我想知道是否有办法提供“未来”的真实价值,以提供更好的在线预测。类似于以下内容:

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 forecasting arima
2个回答
3
投票

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

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

并且本讲座可能使您了解这是如何可行的:lecture on ARIMA parameter estimation

恐怕您必须自己实现。据我所知,目前尚无可做的事情。

希望这会给您一些新的想法!


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.