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 последний известный элемент. Надеюсь, это поможет с вашей проблемой.