АРМА вневыборочного прогнозирования с statsmodels

Я использую statsmodels для подгонки модели ARMA.

import statsmodels.api as sm
arma    = sm.tsa.ARMA(data, order =(4,4));
results = arma.fit( full_output=False, disp=0);

здесь data представляет собой одномерный массив. Я знаю, чтобы получить в-образец предсказаний:

pred = results.predict();

теперь, учитывая второй набор данных data2, как я могу использовать ранее откалиброванную модель для создания ряда с прогнозами (прогнозами), основанными на этих наблюдениях?

2 ответов


Я думал, что для этого есть проблема. Если вы подадите его на github, я, скорее всего, не забуду добавить что-то вроде этого. Механизм прогнозирования (пока) недоступен в качестве пользовательских функций, поэтому вам придется сделать что-то вроде этого.

Если вы уже вписались в модель, то вы можете это сделать.

# this is the nsteps ahead predictor function
from statsmodels.tsa.arima_model import _arma_predict_out_of_sample
res = sm.tsa.ARMA(y, (3, 2)).fit(trend="nc")

# get what you need for predicting one-step ahead
params = res.params
residuals = res.resid
p = res.k_ar
q = res.k_ma
k_exog = res.k_exog
k_trend = res.k_trend
steps = 1

_arma_predict_out_of_sample(params, steps, residuals, p, q, k_trend, k_exog, endog=y, exog=None, start=len(y))

Это новый прогноз на 1 шаг вперед. Вы можете прикрепить это к y, и вам нужно будет обновить остатки.


для одномерного ВНЕ-из прогноза образца (теста) мы можем использовать:

ARMAResults.forecast(steps=1, exog=None, alpha=0.05)

было бы res.forcast(steps=1)

то же самое доступно и для ARIMA.

ARIMAResults.forecast(steps=1, exog=None, alpha=0.05)