Эконометрика

Векторная авторегрессия (VAR) для бизнес-данных: когда она оправдана

VAR полезна там, где показатели влияют друг на друга во времени: продажи, цены, запасы, процентные ставки, макрофакторы. Но в большинстве бизнес-задач модель проваливается не на математике, а на подготовке данных и слабой интерпретации.

Не путайте VAR с VaR (Value at Risk) — метрикой рыночного риска портфеля. Если вы ищете расчёт VaR, стресс-тесты и риск-модели — это на странице финансовой аналитики. Здесь речь о другом инструменте: о векторной авторегрессии — системе уравнений для нескольких взаимно зависимых временных рядов.

Что такое VAR(p) формально

Векторная авторегрессия порядка p описывает вектор из k временных рядов так, что каждый ряд в текущий момент регрессируется на собственные лаги и на лаги всех остальных рядов системы. В компактной форме это записывают как y_t = c + A₁·y_{t−1} + … + A_p·y_{t−p} + ε_t, где y_t — вектор размерности k, c — вектор констант, каждая A_i — матрица коэффициентов k×k, а ε_t — вектор остатков (белый шум с нулевым средним и ковариационной матрицей Σ).

Ключевое отличие от набора независимых регрессий: матрицы A_i не диагональны, поэтому прошлое одного ряда влияет на будущее другого. Именно это даёт VAR её главную ценность — моделирование взаимного влияния, а не только автокорреляции внутри ряда. Платой за гибкость становится быстрый рост числа параметров: при k рядах и p лагах их порядка k²·p, и без дисциплины в выборе размерности модель легко переобучается.

Главное: VAR уместна, когда несколько рядов влияют друг на друга во времени и нужна интерпретация этой связи (импульсные отклики, декомпозиция дисперсии), а не только точечный прогноз одного показателя.

Подготовка: стационарность и развилка VAR / VECM

Стандартная спецификация VAR предполагает стационарность рядов — постоянство среднего и структуры автоковариаций во времени. Проверяют это парой взаимодополняющих тестов: ADF (Augmented Dickey–Fuller, нулевая гипотеза — наличие единичного корня, то есть нестационарность) и KPSS (Kwiatkowski–Phillips–Schmidt–Shin, нулевая гипотеза, наоборот, — стационарность вокруг детерминированного тренда). Их полезно читать вместе: согласие обоих тестов даёт уверенный вывод, расхождение — сигнал к более осторожной диагностике (например, к гипотезе тренд-стационарности или дробной интеграции).

Если ряды нестационарны, обычно берут первые разности (Δy_t = y_t − y_{t−1}) и строят VAR на них. Но здесь скрыта важная техническая развилка. Нестационарные ряды могут быть коинтегрированы — иметь устойчивую долгосрочную равновесную связь, вокруг которой колеблется система (классический пример — цена и объём, спрос и запасы). Наличие коинтеграции проверяют тестом Йохансена, который оценивает ранг коинтеграции.

Это не формальность. Если ряды коинтегрированы, VAR в первых разностях отбрасывает информацию о долгосрочном равновесии — модель видит только краткосрочную динамику и теряет механизм возврата к равновесию. Корректный инструмент в этом случае — VECM (vector error correction model), где явно моделируется член коррекции ошибки. Иначе говоря: тест Йохансена решает, идти в VAR в разностях или в VECM, и пропуск этого шага — одна из самых частых тихих ошибок в прикладной эконометрике. Подробнее о таком уровне строгости — на странице эконометрики для исследований.

Выбор числа лагов

Порядок p подбирают по информационным критериям, которые балансируют качество подгонки и сложность модели:

  • AIC (Akaike) — слабее штрафует число параметров, склонен выбирать более длинные лаги; хорош, когда приоритет — прогнозная точность.
  • BIC / SC (Bayesian / Schwarz) — штраф растёт с размером выборки, даёт более экономные модели; ближе к выбору «истинного» порядка на больших выборках.
  • HQIC (Hannan–Quinn) — промежуточный по жёсткости штраф.

Критерии нередко расходятся; на коротких рядах разумно склоняться к более экономному выбору (BIC/HQIC), потому что число параметров VAR растёт квадратично по числу рядов. Финальное решение опирается не только на минимум критерия, но и на диагностику остатков: лаги наращивают ровно до тех пор, пока в остатках остаётся автокорреляция.

Воспроизводимый код (statsmodels)

Ниже минимальный исполнимый конвейер на Python: подготовка данных, проверка стационарности, выбор порядка, оценка VAR, импульсные отклики и декомпозиция дисперсии. Числа в примере синтетические и иллюстративные — данные генерируются кодом, чтобы пример был воспроизводим без внешних файлов; на реальных данных результаты будут другими.

# Синтетический пример: данные генерируются для воспроизводимости.
# Результаты иллюстративны и не отражают реальных бизнес-показателей.
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller, kpss
from statsmodels.tsa.api import VAR

rng = np.random.default_rng(42)
n = 300

# Два связанных ряда: спрос реагирует на лаг цены (условный пример).
price = np.cumsum(rng.normal(0, 1, n))            # нестационарный (случайное блуждание)
demand = np.zeros(n)
for t in range(2, n):
    demand[t] = 0.6 * demand[t-1] - 0.4 * np.diff(price)[t-1] + rng.normal(0, 1)

df = pd.DataFrame({"price": price, "demand": demand})

# 1. Проверка стационарности: ADF (H0: единичный корень) и KPSS (H0: стационарность).
def stationarity(series):
    adf_p = adfuller(series.dropna(), autolag="AIC")[1]
    kpss_p = kpss(series.dropna(), regression="c", nlags="auto")[1]
    return {"adf_p": round(adf_p, 4), "kpss_p": round(kpss_p, 4)}

for col in df.columns:
    print(col, stationarity(df[col]))

# price нестационарен -> переходим к первым разностям.
# Прим.: при коинтеграции (тест Йохансена) здесь вместо VAR в разностях нужен VECM.
data = df.diff().dropna()

После приведения рядов к стационарному виду оцениваем модель: подбираем порядок по критериям, обучаем VAR, проверяем устойчивость и строим IRF/FEVD.

# 2. Выбор порядка по информационным критериям.
model = VAR(data)
order = model.select_order(maxlags=10)
print(order.summary())          # AIC / BIC / HQIC / FPE
p = order.aic                    # здесь выбираем по AIC; на коротких рядах ближе к BIC

# 3. Оценка модели.
res = model.fit(p)
print(res.summary())

# 4. Диагностика: устойчивость и автокорреляция остатков.
print("stable:", res.is_stable())                 # корни внутри единичного круга
lb = res.test_whiteness(nlags=12, adjusted=True)   # портманто-тест (Льюнга-Бокса)
print("residual autocorr p-value:", round(lb.pvalue, 4))

# 5. Импульсные отклики (IRF) на горизонт 10 шагов.
irf = res.irf(10)
# irf.plot(orth=True)  # ортогонализованные отклики (упорядочение Холецкого)

# 6. Декомпозиция дисперсии ошибки прогноза (FEVD).
fevd = res.fevd(10)
print(fevd.summary())

Диагностика остатков

Оценённая VAR пригодна для выводов только после проверки. Два обязательных шага:

  • Автокорреляция остатков. Если в остатках остаётся структура, модель что-то недомоделировала — отклики и интервалы становятся ненадёжными. Проверяют многомерным портманто-тестом (тип Льюнга–Бокса / Бройша–Годфри); в statsmodels это test_whiteness. Большое p-значение — остатки неотличимы от белого шума, это хороший знак.
  • Устойчивость (стабильность). VAR стабильна и стационарна тогда, когда все корни характеристического полинома лежат внутри единичного круга (эквивалентно — модули собственных значений компаньон-матрицы < 1). Нестабильная модель даёт расходящиеся прогнозы и бессмысленные импульсные отклики; в коде это проверяет is_stable().

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

IRF и FEVD: зачем это руководителю

Прогноз — лишь часть ценности VAR. Для решений важнее два инструмента интерпретации.

IRF (impulse response functions, импульсные отклики) показывают, как единичный шок в одном ряду распространяется по системе во времени: насколько и на сколько периодов он сдвигает остальные показатели. Это язык сценариев — «если цена резко выросла, как и когда отреагирует спрос». Важная оговорка: ортогонализованные IRF (разложение Холецкого) зависят от порядка переменных, и этот порядок должен опираться на содержательные допущения о причинности, а не выбираться произвольно.

FEVD (forecast error variance decomposition, декомпозиция дисперсии ошибки прогноза) отвечает на вопрос «какая доля неопределённости показателя на горизонте h объясняется собственными шоками, а какая — шоками других рядов». Для бизнеса это прямая подсказка, за какими драйверами следить в первую очередь. Подобные постановки — ядро задач прогноза спроса и бизнес-аналитики.

Каузальность по Грейнджеру: что она значит и чего нет

VAR естественно отвечает на вопрос предсказуемости: помогают ли прошлые значения одного ряда прогнозировать другой сверх его собственной истории. Это проверяет тест Грейнджера — совместный тест значимости лагов одной переменной в уравнении другой. Полезно держать в голове ограничение термина: каузальность по Грейнджеру — это о прогнозной полезности, а не о причинно-следственной связи в строгом смысле. Два ряда могут «грейнджер-влиять» друг на друга из-за общего ненаблюдаемого фактора. Поэтому выводы Грейнджера формулируют осторожно — как утверждения об опережающей информации, а не как доказательство механизма.

Отсюда же вытекает деликатность структурной идентификации. Остатки VAR обычно коррелированы между уравнениями, и чтобы перейти от статистических остатков к экономически осмысленным «шокам», нужны дополнительные допущения. Самый частый приём — рекурсивная идентификация через разложение Холецкого, где порядок переменных задаёт предполагаемую цепочку мгновенного влияния. Более аккуратные подходы (ограничения знака, долгосрочные ограничения) применяют, когда есть содержательная теория. Любой такой выбор следует проговаривать явно: импульсные отклики ровно настолько достоверны, насколько обоснованы допущения идентификации.

Какой метод выбрать

МетодКогда применять
VAR в уровнях Ряды стационарны (ADF отвергает единичный корень); нужна интерпретация взаимного влияния.
VAR в разностях Ряды нестационарны (интегрированы порядка 1) и не коинтегрированы по тесту Йохансена.
VECM Ряды нестационарны и коинтегрированы: важно сохранить долгосрочную равновесную связь.
Одиночная ARIMA Интерес к одному ряду, обратная связь от других переменных несущественна.
Бустинг / современные TS-модели Сильная нелинейность, много экзогенных признаков, приоритет — точность прогноза над интерпретацией.

Где VAR проигрывает

VAR — линейная модель. Если в данных доминирует нелинейность, режимные переключения или задача сводится к короткому прогнозу одного ряда при большом числе экзогенных факторов, лучше работают градиентный бустинг по деревьям и современные модели временных рядов. Они обычно дают меньшую ошибку на отложенной выборке, но платят интерпретируемостью: чистых импульсных откликов и декомпозиции дисперсии «из коробки» там нет. VAR выигрывает именно там, где ценится прозрачная структура взаимного влияния, а не только минимальная метрика на тесте.

Практический порядок работы

  1. Зафиксировать цель: прогноз, сценарии, объяснение драйверов — от этого зависит выбор модели.
  2. Выровнять частоты, закрыть пропуски, оценить сезонность, структурные разрывы и выбросы.
  3. Проверить стационарность (ADF + KPSS) и коинтеграцию (Йохансен) — выбрать VAR/VECM.
  4. Подобрать порядок по AIC/BIC/HQIC с оглядкой на длину ряда.
  5. Прогнать диагностику: автокорреляция остатков, устойчивость, поведение на окнах.
  6. Считать IRF и FEVD, перевести их в управленческие формулировки и зафиксировать ограничения.

Если нужна такая модель под конкретную задачу — с воспроизводимым кодом, честной диагностикой и отчётом для руководства — это формат, в котором мы работаем в StatGazer.

Нужна модель, а не статья?

Опишите задачу.
Ответим в течение 1–2 рабочих дней.

Мы не только пишем о методах — мы строим модели для бизнеса, фондов и исследователей.

NDA до передачи данных · границы работ, KPI и сроки фиксируются до старта · hello@statgazer.ru