Python statsmodels ARIMA прогноз

Я пытаюсь сделать из примера прогнозирования с помощью Python statsmodels. Я не хочу просто прогнозировать следующее x число значений из конца набора обучения, но я хочу прогнозировать одно значение за раз и учитывать фактические значения при прогнозировании. Другими словами, Я хочу делать прогнозы на 1 период, но я не хочу каждый раз перекалибровать модель. Ближайший пост, который я смог найти, был здесь:

Arma out-of-sample прогнозирование с statsmodels

однако это использует ARMA не ARIMA. Как я могу достичь этого с ARIMA или есть лучший метод? Я знаю, что я мог бы на самом деле вытащить коэффициенты и применить функцию сам, но в моем коде модель ARIMA, которую я использую, динамична во времени, поэтому количество используемых коэффициентов и запаздывающих значений не является постоянным. Любая помощь будет очень признательна.

1 ответов


Если я прав, у меня была очень похожая проблема: в основном я хотел разделить свой временной ряд на тренировочный и тестовый набор, обучить модель, а затем предсказать произвольно любой элемент тестового набора с учетом его прошлой истории. Однако мне не удалось достичь этого, используя класс ARIMA statsmodels.

вот как я это сделал с помощью statsmodels: я применил разницу первого порядка к серии для достижения стационарности и вычислил модель arma:

model = sm.tsa.ARMA(fitting_data, order=(p, q), dates=fitting_dates).fit()

Я преобразовал модель arma в модель pure-ar:

ar_params = model.arparams
ma_params = model.maparams

ar_coefficients = arma2ar(ar_params, ma_params, nobs=final_ar_coeff)

на Нобса параметры влияют на количество авторегрессионных коэффициентов, которые вы получите. Я попробовал несколько значений, увеличивая их до тех пор, пока не наблюдалось существенного изменения прогнозов. Как только вы получите свои прогнозы w.r.т. дифференцированные серии, вы хотите вернуть их к первоначальному. Я реализовал метод, который, учитывая одну или цепочку предсказаний и последний известный элемент перед вашим прогнозы, вычисляет прогнозы в исходном ряду:

def differenced_series_to_original(values, starting_value):

    original_series = [starting_value]
    [original_series.append(original_series[-1]+i) for i in values]

    return original_series[1:]

очевидно значения это список ваших прогнозов,starting_value последний известный элемент. Надеюсь, это поможет с вашей проблемой.