我有一个使用python拟合到时间序列数据(例如data[0:100]
)的ARIMA(p,d,q)模型。我想使用此模型进行预测(forecast[100:120]
)。但是,考虑到我也有未来的真实数据(例如:data[100:120]
),我如何确保多步预测将我拥有的未来的真实数据考虑在内,而不是使用其预测的数据? / p>
本质上,在预测时,我希望使用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模型的理解/使用是否存在错误?
答案 0 :(得分:6)
是的,如果您想使用新数据进行在线预测,则需要一遍又一遍地估计参数,这在计算上效率低下。 要注意的一件事是,对于ARIMA模型,模型中MA部分参数的估计主要是计算量大的,因为这些参数是使用数值优化而不是使用普通最小二乘法估计的。由于在为初始模型计算了一次参数之后,您便知道对未来模型的期望,由于一次观察不会对它们进行太大更改,因此您可以初始化对参数的搜索以提高计算效率。
此外,也许有一种方法可以更有效地进行估算,因为您拥有模型的旧数据和参数,因此唯一要做的就是添加一个数据点。这意味着您只需要为新数据点与所有其他数据点的组合计算theta和phi参数,而无需再次计算已知组合,这将节省大量时间。我非常喜欢这本书:Heij,Christiaan等。计量经济学方法及其在商业和经济学中的应用。牛津大学出版社,2004年。
本讲座可能使您了解这是如何可行的:lecture on ARIMA parameter estimation
恐怕您必须自己实现。据我所知,目前尚无可做的事情。
希望这会给您一些新的想法!
答案 1 :(得分:2)
这个非常好的博客建议(3 facts about time series forecasting that surprise experienced machine learning practitioners):
“每次要生成新的预测时,您都需要重新训练模型”,它还可以通过示例直观地了解为什么会发生这种情况。
这基本上突出了时间序列预测的挑战,它是一个不断变化的需求,需要重新调整。
答案 2 :(得分:2)
我一直在努力解决这个问题。幸运的是,我发现了一个非常有用的讨论。据我所知,python中的ARIMA不支持这种情况,我们需要使用SARIMAX。
您可以参考讨论链接:https://github.com/statsmodels/statsmodels/issues/2788