我已经使用Python拟合了一个ARIMA(p,d,q)模型,该模型适用于时间序列数据(例如,
实质上,在进行预测时,我希望使用
我希望避免在每个时间步骤上重新拟合整个ARIMA模型以更新“历史”数据。
我按以下方式拟合ARIMAX模型:
现在,以下代码允许我预测整个数据集的值,包括测试数据。
但是这导致我不断地训练ARIMAX模型,这对我来说没有太多意义。这会使用大量计算资源,非常不实用。此外,由于每次迭代拟合参数都会发生变化,这进一步使评估ARIMAX模型变得困难。
我的ARIMAX模型的理解/使用是否存在问题?
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模型的理解/使用是否存在问题?