Во-первых, возможное решение: если вы используете 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
указывает модели не пытаться вычислять стандартные ошибки для параметров модели (что потребует гораздо большего логарифмические оценки вероятности).