Подбор p, d, q и SARIMA
Учимся выбирать порядки модели по графикам и критериям и расширять ARIMA до сезонной SARIMA.
SARIMA(p,d,q)(P,D,Q)m — это ARIMA с дополнительным сезонным блоком: те же идеи AR/I/MA, но на лагах кратных периоду m.
Зачем системно подбирать порядки
Параметры p, d, q нельзя угадать; их подбирают по данным. Слишком маленькие — модель недоучится и пропустит зависимости. Слишком большие — переобучится и будет ловить шум. Грамотный подбор балансирует точность на истории и простоту модели.
Цена ошибки тут вполне денежная. Недоученная модель прогноза спроса не заметит инерцию продаж и будет систематически промахиваться — склад то переполнен, то пуст. Переобученная модель идеально повторит исторический ряд, включая случайные всплески, которые никогда не повторятся, и развалится на первой же новой неделе. Поэтому подбор p, d, q — это не поиск модели с минимальной ошибкой на истории, а поиск модели, которая обобщается на будущее. Бокс и Дженкинс, придумавшие ARIMA, предложили дисциплинированную процедуру из трёх шагов: сначала привести ряд к стационарности (выбрать d), затем по графикам автокорреляции прочитать p и q, затем сравнить кандидатов по критерию, штрафующему сложность. Ниже мы пройдём ровно эти три шага.
Шаг 1: определить d
d — это число дифференцирований до стационарности. Проверяют ADF-тестом: дифференцируют, пока p-value не станет малым. Обычно d равно 0, 1 или 2; больше почти не встречается.
Важно не передифференцировать. Лишнее дифференцирование не делает ряд «ещё стационарнее» — оно вносит искусственную отрицательную автокорреляцию и раздувает дисперсию, ухудшая модель. Признак передифференцирования виден на графике ACF: после нужного d она быстро гаснет, а вот резкий отрицательный выброс на первом лаге у уже стационарного ряда сигналит, что одну разность стоит убрать. Практическое правило: берите минимальное d, при котором ADF-тест уже отвергает гипотезу о нестационарности, и не больше. Для большинства бизнес-рядов это d=1; d=2 нужно лишь там, где ускоряется сам темп роста.
Шаг 2: p и q по ACF/PACF
На уже стационарном (продифференцированном) ряде смотрят графики: обрыв PACF после лага p подсказывает порядок AR, обрыв ACF после лага q — порядок MA. Это связывает раздел про автокорреляцию с подбором ARIMA.
Почему именно так распределены роли между двумя графиками? PACF показывает «чистую» связь точки с лагом, очищенную от влияния промежуточных лагов, — и для AR-процесса она резко обрывается ровно на порядке p, потому что глубже прямой связи нет. ACF же для AR гаснет плавным хвостом, а вот для MA-процесса, наоборот, обрывается на порядке q. Отсюда зеркальное правило: ищете AR — смотрите, где обрывается PACF; ищете MA — где обрывается ACF. На реальных шумных данных обрывы редко идеально чёткие, поэтому эти графики дают не точный ответ, а короткий список кандидатов (например, «p около 1–2, q около 0–1»), которые дальше сравнивают численно.
| Наблюдение | Параметр |
| PACF обрывается на лаге p | AR-порядок = p |
| ACF обрывается на лаге q | MA-порядок = q |
| ADF стал значим после d разностей | I-порядок = d |
Шаг 3: сравнить по AIC
Несколько кандидатов сравнивают по информационному критерию AIC: он штрафует за число параметров, поэтому выбирает модель, которая хорошо описывает данные, но не раздута. Меньший AIC — лучше. Сравним два кандидата по упрощённой формуле AIC = n·ln(SSE/n) + 2k.
Разберём формулу по слагаемым. Первая часть, n·ln(SSE/n), вознаграждает точность: чем меньше суммарная ошибка SSE, тем меньше слагаемое. Вторая часть, 2k, — это штраф ровно за число параметров k. В этом весь смысл AIC: добавить параметр стоит «налога» в 2 единицы, и если новый параметр снижает ошибку слабее, чем на этот налог, критерий его отвергает. Так формула формализует здравый смысл «не усложняй без нужды» в одно сравнимое число.
import math
def aic(sse, n, k):
return round(n * math.log(sse / n) + 2 * k, 2)
# два кандидата: модель A проще, B сложнее но точнее
print("ARIMA(1,1,0): AIC =", aic(sse=50.0, n=40, k=2))
print("ARIMA(2,1,2): AIC =", aic(sse=44.0, n=40, k=5))
Вывод:
ARIMA(1,1,0): AIC = 12.93 ARIMA(2,1,2): AIC = 13.81
Хотя сложная модель чуть точнее (SSE 44 против 50), её AIC выше (13.81 против 12.93): три лишних параметра не окупились. AIC выбирает экономную ARIMA(1,1,0). Так критерий защищает от переобучения.
Стоит подчеркнуть: абсолютное значение AIC само по себе ничего не означает — оно зависит от шкалы данных и числа точек. Осмысленна только разница между моделями на одном и том же ряде. Поэтому AIC всегда используют для сравнения кандидатов, а не как «оценку качества» в вакууме. Рядом с ним часто приводят BIC — родственный критерий с более жёстким штрафом (ln(n) вместо 2 на параметр), который на длинных рядах ещё сильнее тянет к простым моделям. Если AIC и BIC указывают на одного и того же кандидата — выбор уверенный; если расходятся, AIC склонен к чуть более богатой модели, BIC — к более скупой, и решает уже здравый смысл и проверка остатков.
SARIMA: сезонный блок
Когда в ряде есть сезонность (продажи каждый декабрь, трафик каждое воскресенье), к ARIMA добавляют сезонные порядки (P, D, Q) на лагах, кратных периоду m. Например, SARIMA(1,1,1)(1,1,1)12 для месячного ряда с годовым циклом. Сезонное дифференцирование D убирает повторяющийся паттерн, а сезонные AR/MA ловят зависимость «год к году».
Ключевая идея: обычные порядки (p,d,q) работают на соседних лагах (вчера, позавчера), а сезонные (P,D,Q) — на лагах, отстоящих на целый период. Сезонное дифференцирование с D=1 для месячных данных вычитает значение год назад: декабрь сравнивается с прошлым декабрём, а не с ноябрём. Это снимает годовой узор так же, как обычное дифференцирование снимает тренд. Сезонные AR и MA затем ловят остаточную связь между одноимёнными месяцами разных лет — например, что сильный декабрь обычно следует за сильным прошлым декабрём. Период m задаёт масштаб: 12 для месячных данных с годовым циклом, 7 для дневных с недельным, 24 для часовых с суточным. Указать m правильно критично — ошибка в периоде сводит весь сезонный блок на нет.
Как работает под капотом
На практике порядки часто подбирают автоматически: auto_arima перебирает сетку (p,d,q)(P,D,Q) и выбирает минимум AIC, отбраковывая неустойчивые модели. Это удобно, но не отменяет понимания: автоподбор может выбрать переусложнённую модель на шумных данных, и проверка остатков (их ACF должна быть «пустой») остаётся обязательной.
Стоит понимать, что именно делает автоподбор, чтобы доверять ему с оглядкой. Перебор сетки из семи порядков (p,d,q,P,D,Q,m) — это потенциально сотни моделей, и чтобы не считать их все, auto_arima применяет умный пошаговый поиск: стартует с разумной модели и двигается по сетке туда, где AIC падает, как при спуске с горы. Это быстро, но может застрять в локальном минимуме и пропустить лучшую модель чуть в стороне. Кроме того, инструмент сам определяет d и D статистическими тестами, и здесь он иногда ошибается на зашумлённых или коротких рядах. Поэтому финальное слово всегда за диагностикой остатков: если в их ACF остались значимые лаги, значит модель что-то не уловила, какой бы низкий AIC ни показал автоподбор. Хороший остаток должен выглядеть как белый шум — без структуры, которую ещё можно было бы смоделировать.
Частые ошибки
- Подбирать p и q на нестационарном ряде — сначала определите d.
- Гнаться за минимальной ошибкой на истории без штрафа за сложность (отсюда AIC).
- Игнорировать сезонность и пытаться поймать её большим p вместо сезонного блока SARIMA.
- Сравнивать AIC моделей с разным d — после дифференцирования меняется сам ряд и его SSE, поэтому такие AIC несопоставимы.
Последний пункт ловит даже опытных. AIC корректно сравнивает только модели, обученные на одном и том же ряде. Как только вы меняете d, вы фактически меняете данные (ряд приращений вместо уровней), и числа AIC становятся из разных миров. Поэтому d фиксируют отдельным шагом (тестами на стационарность), а уже при выбранном d перебирают и сравнивают по AIC только p, q и сезонные порядки. Нарушение этого правила — типичная причина, по которой автоподбор без присмотра выдаёт странную модель.
Итоги
- Сначала определяют d (по ADF), затем p и q (по PACF/ACF), затем сравнивают по AIC.
- AIC штрафует сложность и защищает от переобучения; меньше — лучше.
- SARIMA добавляет сезонные (P,D,Q)m для рядов с периодическим циклом.
- Финальная проверка — диагностика остатков: их ACF должна быть пустой, иначе модель что-то упустила.