Как выполнить многоэтапный прогноз вне времени, который не требует переоснащения модели ARIMA? - PullRequest
0 голосов
/ 28 мая 2019

У меня уже есть модель 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?

...