Почему SARIMA имеет сезонные ограничения? - PullRequest
0 голосов
/ 01 мая 2020

Исходный алгоритм ARMA имеет следующую формулу:

arima

И здесь вы можете видеть, что ARMA для вычисления p + q + 1 чисел , Таким образом, нет никаких вопросов по этому поводу, это довольно ясно.

Но, говоря об алгоритме SARIMA, я не могу понять одну вещь. Формула SARIMA выглядит как ARMA с exta:

SARIMA

Где S - число, обозначающее сезонный период. S является постоянным.

Итак, SARIMA должен вычислить p + q + P + Q + 1 чисел. Просто exta P + Q номера. Не слишком много, если P = 1 и Q = 2.

Но если мы используем слишком длинный период, например 365 дней для повседневных временных рядов, SARIMA просто не могу перестать примерять. Посмотрите на это для моделей. Первый пример занимает 9 секунд, в то время как второй не закончил примерку через 2 часа!

import statsmodels.api as sm

model = sm.tsa.statespace.SARIMAX(
    df.meantemp_box, 
    order=(1, 0, 2),
    seasonal_order=(1, 1, 1, 7)
).fit()

model = sm.tsa.statespace.SARIMAX(
    df.meantemp_box, 
    order=(1, 0, 2),
    seasonal_order=(1, 1, 1, 365)
).fit()

И я не могу этого понять. Математически эти модели одинаковы - обе они принимают одинаковые p, q, P и Q . Но второй или слишком долго учится, или не может учиться вообще.

Я что-то не так делаю?

1 Ответ

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

Во-первых, возможное решение: если вы используете Statsmodels v0.11 или версию для разработчиков, то при длительных сезонных эффектах вы можете использовать следующее:

mod = sm.tsa.arima.ARIMA(endog, order=(1, 0, 2), seasonal_order=(1, 1, 1, 365))
res = mod.fit(method='innovations_mle', low_memory=True, cov_type='none')

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

Кроме того, вам не будут доступны все наши функции результатов, но вы все равно сможете распечатать сводку с параметрами, вычислить логарифмические правдоподобия и критерии информации, вычислить прогнозирование в выборке и выполнить прогнозирование вне выборки.


Теперь объясним, в чем проблема:

Проблема в том, что эти модели оцениваются путем помещения их в форму пространства состояний и последующего применения фильтра Калмана для вычисления логарифмической вероятности. Размерность формы пространства состояний модели ARIMA быстро растет с увеличением количества периодов в полном сезоне - для вашей модели с s = 365 размерность вектора состояния равна 733.

Для фильтра Калмана требуется умножение матриц на это измерение, и по умолчанию память выделяется для матриц этого измерения для каждого из ваших периодов времени. Вот почему для его выполнения требуется вечность (и она также занимает много памяти).

Для решения, приведенного выше, вместо вычисления логарифмической вероятности с использованием фильтра Калмана мы вычисляем его так называемый алгоритм инноваций , Затем мы запускаем фильтр Калмана только один раз, чтобы вычислить объект результатов (это позволяет, например, прогнозировать). Опция low_memory=True указывает модели не сохранять все матрицы больших размеров для каждого временного шага, а опция cov_type=None указывает модели не пытаться вычислять стандартные ошибки для параметров модели (что потребует гораздо большего логарифмические оценки вероятности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...