У меня уже есть модель ARIMA (p, d, q), подходящая для данных временного ряда (например, data[0:100]
) с использованием python.Я хотел бы делать прогнозы (forecast[100:120]
) с этой моделью.Однако, учитывая, что у меня также есть будущие истинные данные (например, data[100:120]
), как мне обеспечить, чтобы в многоэтапном прогнозе учитывались будущие истинные данные, которые у меня есть, вместо использования данных, которые он прогнозировал?
В сущности, при прогнозировании я бы хотел, чтобы forecast[101]
вычислялся с использованием data[100]
вместо forecast[100]
.
Я бы хотел избегать переоснащения всей модели ARIMA на каждом временном шаге с обновленным"history".
Я подгоняю модель 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?