ValueError при добавлении новых наблюдений в модель SARIMAX перед составлением нового прогноза на n шагов вперед - PullRequest
1 голос
/ 27 мая 2020

Я построил модель 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...