Прогнозирование / предсказание с использованием ARIMA в python - как это работает? - PullRequest
0 голосов
/ 30 мая 2020

Я очень запутался в том, как предсказывать / прогнозировать с помощью ARIMA.

Предположим, у нас есть серия с именем y_orig, которую мы разбиваем на y_train и y_test. Предполагая, что y_orig не является стационарным, мы можем подобрать ARIMA, используя приведенный ниже код

# fit ARIMA model
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(y_train, order=(2,1,2))
model_fit = model.fit(disp=0)
print(model_fit.summary())

После подбора модели мы можем предсказать, используя приведенный ниже код

n_periods = len(`y_test`)

fc, -, - = model_fit.forecast(n_periods, alpha=0.05)  # 95% conf

Значение fc должен дать прогноз, который я затем сравниваю с y_test. Обратите внимание, что, как и ожидалось, y_test не используется на этапе обучения. Также обратите внимание, что я ищу не скользящий прогноз, а долгосрочный прогноз, в котором параметры (после обучения) фиксированы.

Я очень запутался, потому что y_test вообще не используется на этапе прогнозирования .
Например, если бы мы использовали другие модели прогнозирования (например, в Keras или tensorflow). мы бы так это кодировали.

Во-первых, мы подгоняем модель на этапе обучения, который я не показываю - это не имеет значения для моего вопроса. Затем мы прогнозируем и смотрим, насколько хорошо нам подходит in sample, используя приведенный ниже код.

y_pred_train=model.predict(y_train)

затем мы тестируем модель out of sample, как показано ниже:

y_pred_test=model.predict(y_test)

В этой ситуации параметры не переоцениваются и y_test используется на этапе тестирования для прогноза следующего значения (с фиксированными параметрами).

Отсюда мое замешательство с ARIMA. Почему мы не делаем то же самое с моделью ARIMA?

Пожалуйста, помогите мне понять, я очень запутался.

Большое спасибо !!

1 Ответ

1 голос
/ 30 мая 2020

Думаю, вас немного смущают .fit и y_train в блоке кода ARIMA. y_train - это просто переменная с плохим именем, это должно быть просто y, данные, которые я хочу спрогнозировать. Модель ARIMA не имеет фазы обучения / тестирования, это не самообучение. Он выполняет статистический анализ входных данных и делает прогноз. Если вы хотите сделать еще один прогноз (на y_test), вам нужно сделать еще один статистический анализ (используя model.fit) и сделать еще один прогноз (используя model.forecast). Модель ARIMA не имеет никакого weights, которое она тренирует на этапе обучения, ничего, связанное с какими-либо предыдущими данными, "подогнанными", в модели не сохраняется. Вы не можете использовать «подобранную» модель ARIMA для прогнозирования других выборок данных.

...