Частная автокорреляция 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 читают вместе и только на стационарном ряде.
  • Это подсказки, а не приговор: финальный порядок проверяют по качеству прогноза.
Проверьте себя
1. Чем PACF отличается от ACF?
APACF считается быстрее
BPACF показывает прямую связь на лаге, исключив влияние промежуточных лагов
CPACF всегда положительна
DОни идентичны
2. Какую модель подсказывает резкий обрыв PACF после лага p при плавно затухающей ACF?
AMA(p)
BAR(p)
CСлучайное блуждание
DЧистый шум