Частная автокорреляция PACF
Разбираемся, как PACF убирает «эхо» промежуточных лагов и показывает прямую связь точки с прошлым.
PACF (частная автокорреляция) — связь между x_t и x_{t-k} после исключения влияния всех промежуточных лагов 1..k-1; показывает «чистую» зависимость на лаге k.
Зачем нужна PACF, если есть ACF
ACF на лаге 2 может быть высокой просто потому, что лаг 1 высок: связь «протекает» через промежуточную точку. ACF не различает прямое влияние и переданное по цепочке. PACF отвечает на более тонкий вопрос: есть ли прямая связь точки с тем, что было k шагов назад, помимо всего, что между ними. Это ключ к выбору порядка авторегрессии.
Аналогия из жизни: продажи сегодня похожи на продажи позавчера. Но значит ли это, что позавчерашний день напрямую влияет на сегодняшний? Чаще нет — он повлиял на вчерашний, а тот уже на сегодняшний, и связь дотянулась по цепочке. ACF засчитает её как настоящую, PACF — отбросит. Для практика это разница между «мне нужно держать в модели два дня истории» и «достаточно одного»: лишние лаги усложняют модель, переобучают её на шуме и ухудшают прогноз спроса.
Та же логика спасает при анализе веб-трафика и конверсий. Представьте, что вы ищете, на сколько дней назад стоит смотреть, прогнозируя заявки с сайта. ACF покажет значимую связь и на лаге 1, и на 2, и на 3 — и соблазн заложить в модель три дня истории велик. PACF же часто обнаруживает, что прямая связь есть только с вчерашним днём, а всё остальное — отголоски. Выбрав по PACF минимальный честный набор лагов, вы получаете более простую модель, которую легче поддерживать и которая устойчивее ведёт себя на новых данных. Это прямой путь от «графика автокорреляции» к конкретному решению «сколько прошлого брать в прогноз».
Интуиция на примере
Возьмём чистый AR(1): каждая точка зависит только от предыдущей. Тогда ACF будет затухать постепенно (1 влияет на 2, 2 на 3, эхо тянется), а PACF резко оборвётся после лага 1 — прямая связь есть только с непосредственным соседом.
Это и есть главное наблюдение урока: в данных заложена связь всего на один шаг, но ACF «размазывает» её на много лагов, создавая иллюзию долгой памяти. Если довериться ACF, легко решить, что ряд помнит своё состояние на три-четыре дня назад, и заложить это в модель. PACF возвращает к истине — память ровно в один шаг.
Чтобы прочувствовать механику, удобно держать в голове картинку с двумя графиками рядом. У AR(1) они зеркально дополняют друг друга: ACF — плавный спуск, тянущийся хвостом, PACF — одинокий столбик на лаге 1 и плоская тишина дальше. У процесса другого типа, MA(q), картинка перевернётся: резкий обрыв даст уже ACF, а плавно затухать будет PACF. Поэтому опытный аналитик смотрит не на один график, а на пару — именно их сочетание, а не каждый по отдельности, однозначно указывает на тип и порядок модели.
# детерминированный «шум» (простой LCG), чтобы пример воспроизводился
seed = 12345
def noise():
global seed
seed = (1103515245 * seed + 12345) % (2**31)
return seed / (2**31) * 2 - 1 # в диапазоне [-1, 1)
# AR(1): x_t = 0.7 * x_{t-1} + шум
x = [0.0]
for _ in range(400):
x.append(0.7 * x[-1] + noise())
def mean(a): return sum(a)/len(a)
def acf(a, k):
m = mean(a)
num = sum((a[i]-m)*(a[i-k]-m) for i in range(k, len(a)))
den = sum((v-m)**2 for v in a)
return round(num/den, 3)
print("ACF lag1:", acf(x, 1))
print("ACF lag2:", acf(x, 2))
print("ACF lag3:", acf(x, 3))
Вывод:
ACF lag1: 0.699 ACF lag2: 0.508 ACF lag3: 0.375
ACF затухает плавно (0.70 → 0.51 → 0.38), хотя в данных каждая точка зависит только от предыдущей. Это «эхо» лага 1, протекающее дальше. PACF же показала бы значимый всплеск только на лаге 1, а на лагах 2-3 — почти ноль. Именно так PACF и помогает: первый незначимый лаг подсказывает порядок AR.
Заметьте, что числа подчиняются простому закону: 0.7 в первой степени, во второй и в третьей дают примерно 0.70, 0.49 и 0.34 — почти ровно то, что мы видим. Коэффициент модели (0.7) возводится в степень, равную лагу, и так рождается геометрическое затухание ACF. Это не совпадение, а математическая подпись процесса AR(1): по скорости спада ACF можно даже прикинуть силу связи с соседом.
Правило выбора порядка
| Картина | Подсказка |
| PACF обрывается после лага p, ACF затухает | модель AR(p) |
| ACF обрывается после лага q, PACF затухает | модель MA(q) |
| обе затухают плавно | смешанная ARMA |
На реальных данных эти картинки выглядят не так хрестоматийно: пики чуть выше или ниже коридора значимости, шум смазывает границы, и «обрыв» приходится угадывать. Поэтому ACF и PACF — это не автомат, выдающий ответ, а пара подсказок, которые сужают круг моделей-кандидатов. Окончательный порядок обычно выбирают, сравнивая несколько вариантов по качеству прогноза на отложенной части ряда.
Как работает под капотом
PACF на лаге k — это коэффициент при x_{t-k} в авторегрессии, построенной на лагах 1..k. Технически её считают рекуррентным алгоритмом Дарбина-Левинсона, который последовательно добавляет лаги и пересчитывает коэффициенты. Идея: «насколько лаг k добавляет предсказательной силы сверх уже учтённых лагов». Если не добавляет — PACF около нуля.
Можно представить это как пошаговую регрессию: вы уже объяснили сегодняшнее значение лагами 1..k-1, и теперь спрашиваете, остаётся ли в остатке хоть что-то, что объясняет именно лаг k. Если вся полезная информация лага k уже «впитана» предыдущими лагами, добавлять его бессмысленно — частичный коэффициент падает к нулю. Алгоритм Дарбина-Левинсона делает это эффективно, не пересчитывая каждый раз всю систему уравнений с нуля, а аккуратно достраивая решение при добавлении очередного лага.
Полезно понимать, что PACF строится поверх ACF: входными данными для алгоритма служат именно автокорреляции на лагах 1..k. То есть это не два независимых измерения, а два взгляда на одну и ту же ковариационную структуру ряда — ACF показывает её «как есть», а PACF пересобирает в форму, где видно прямое влияние каждого лага. Значимость столбиков PACF проверяют тем же коридором примерно ±2/√n, что и у ACF: всё, что внутри коридора, считается неотличимым от нуля, и порядок модели определяют по последнему лагу, который из этого коридора заметно выбивается.
Частые ошибки
- Определять порядок AR по ACF (нужна PACF) и наоборот для MA.
- Принимать плавно затухающую ACF за прямую связь на дальних лагах.
- Анализировать ACF/PACF нестационарного ряда — сначала приведите его к стационарности.
- Гнаться за каждым пиком, чуть выходящим за коридор, и раздувать порядок модели — лишние лаги ловят шум, а не сигнал.
Итоги
- PACF показывает прямую связь на лаге k без эха промежуточных лагов.
- Обрыв PACF после лага p → AR(p); обрыв ACF после q → MA(q).
- ACF и PACF читают вместе и только на стационарном ряде.
- Это подсказки, а не приговор: финальный порядок проверяют по качеству прогноза.