Я построил модель SARIMAX на таймсерии. Теперь цель состоит в том, чтобы использовать эту модель для регулярного прогнозирования на следующие 12 недель.
Мои тренировочные данные содержат 152 наблюдения. Я мог строить прогнозы, которые затем предсказывали значения для следующих 12 наблюдений. Однако сейчас мы прошли еще 3 недели, и я хочу добавить фактические значения моих эндогенных и экзогенных переменных за эти 3 недели к моим тренировочным данным и получить обновленный прогноз на следующие 9 недель по этим 155 наблюдениям без переоборудования модели.
On https://www.statsmodels.org/dev/examples/notebooks/generated/statespace_forecasting.html Я обнаружил, что можно сделать это с помощью:
append_newobs = <fitted model>.append(endog=detrended_test.loc[153:155],
exog=exog_test.loc[153:155], refit=False)
fcast = append_newobs.get_forecast(9, exog=exog_test[156:])
Однако это дает мне ошибку значения: «ValueError: all входные массивы должны иметь одинаковое количество измерений, но массив с индексом 0 имеет 1 измерение (я), а массив с индексом 1 имеет 2 измерения (а) "
Как мне решить эту проблему?
Мой exog_test - это Pandas фрейм данных с 3 наблюдениями и 12 экзогенными переменными.
Соответствующие кодовые блоки:
# =============================================================================
# ------------------------------ FIT SARIMAX ON DETRENDED DATA-----------------
# =============================================================================
exog=train[['fl_has_publicholiday', 'fl_krokusvakantie', 'fl_paasvakantie',
'jul', 'aug', 'fl_herfstvakantie', 'Christmas_week', 'Newyears_week', 'jan', 'mei',
'sep']]
modx8 = sm.tsa.statespace.SARIMAX(endog=detrended, trend='n', order=(0,0,1), seasonal_order=(0,0,1,52), exog=exog)
resx8 = modx8.fit(disp=False)
# =============================================================================
# ------------------------------ PRODUCE 12 WEEKS FORECAST -----------------
# =============================================================================
exog_test=test[['fl_has_publicholiday', 'fl_krokusvakantie', 'fl_paasvakantie',
'jul', 'aug', 'fl_herfstvakantie', 'Christmas_week', 'Newyears_week', 'jan', 'mei',
'sep']]
pred_test=resx8.get_forecast(12, exog=exog_test) #Forecast fluctuations around the trend
print('Forecast:')
print(pred_test.predicted_mean)
print('Confidence intervals:')
print(pred_test.conf_int())
# ==================================================================================================
# -----------ADD NEW OBSERVED DATA AND BUILD FORECAST ON LONGER TIMESERIES WITHOUT REFIT ------------
# ==================================================================================================
append_newobs = resx8.append(endog=detrended_test.loc[153:155], exog=exog_test.loc[153:155],
refit=False)
fcast = append_newobs.get_forecast(9, exog=exog_test[156:])
This fails with the value error stated above.