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

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

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

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

Что такое 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 предполагает стационарность рядов — постоянство среднего и структуры автоковариаций во времени. Проверяют это парой взаимодополняющих тестов: ADF7 (Augmented Dickey–Fuller, нулевая гипотеза — наличие единичного корня, то есть нестационарность) и KPSS8 (Kwiatkowski–Phillips–Schmidt–Shin, нулевая гипотеза, наоборот, — стационарность вокруг детерминированного тренда). Их полезно читать вместе: согласие обоих тестов даёт уверенный вывод, расхождение — сигнал к более осторожной диагностике (например, к гипотезе тренд-стационарности или дробной интеграции).

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

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

37 43 49 55 61 Уровни рядов цена (I(1)) спрос-уровень (I(1)) -5 0 5 Спред (I(0)) 0 20 40 60 80 100 120 Время t
Рис. 1. Коинтеграция. Два нестационарных ряда (I(1)) с общим стохастическим трендом движутся вместе; их разность — спред — стационарна (I(0)) и колеблется вокруг равновесия. Это и есть случай для VECM, а не для VAR в первых разностях. Синтетические данные · для наглядности.

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

Порядок 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. Для решений важнее два инструмента интерпретации210.

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

-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0 1 2 3 4 5 6 7 8 9 10 Горизонт h, периодов после шока Отклик спроса отклик 95% ДИ
Рис. 2. Импульсный отклик (IRF) спроса на единичный шок цены с 95% доверительным интервалом. Отклик отрицательный, затухает геометрически (множитель ≈ 0.6) и на дальних горизонтах перестаёт быть статистически значимым — интервал накрывает ноль. Синтетические данные · для наглядности.

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

0% 25% 50% 75% 100% 1 2 3 4 5 6 7 8 9 10 Горизонт прогноза h шоки спроса шоки цены
Рис. 3. Декомпозиция дисперсии ошибки прогноза (FEVD) спроса по горизонту. Собственные шоки спроса доминируют; доля шоков цены растёт с горизонтом и стабилизируется около 86% собственных против ≈14% ценовых. Синтетические данные · для наглядности.

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

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

Отсюда же вытекает деликатность структурной идентификации. Остатки 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. Sims, C. A. (1980). Macroeconomics and Reality. Econometrica, 48(1), 1–48. doi:10.2307/1912017. — основополагающая работа, вводящая VAR как альтернативу большим структурным моделям.
  2. Stock, J. H., & Watson, M. W. (2001). Vector Autoregressions. Journal of Economic Perspectives, 15(4), 101–115. doi:10.1257/jep.15.4.101. — доступный обзор четырёх задач VAR: описание, прогноз, структурный вывод, политика.
  3. Granger, C. W. J. (1969). Investigating Causal Relations by Econometric Models and Cross-spectral Methods. Econometrica, 37(3), 424–438. doi:10.2307/1912791. — определение каузальности по Грейнджеру.
  4. Engle, R. F., & Granger, C. W. J. (1987). Co-integration and Error Correction: Representation, Estimation, and Testing. Econometrica, 55(2), 251–276. doi:10.2307/1913236. — коинтеграция и модель коррекции ошибок (ECM/VECM).
  5. Johansen, S. (1988). Statistical Analysis of Cointegration Vectors. Journal of Economic Dynamics and Control, 12(2–3), 231–254. doi:10.1016/0165-1889(88)90041-3. — тест Йохансена на ранг коинтеграции.
  6. Johansen, S. (1991). Estimation and Hypothesis Testing of Cointegration Vectors in Gaussian Vector Autoregressive Models. Econometrica, 59(6), 1551–1580. doi:10.2307/2938278. — оценка и тестирование коинтеграции в гауссовой VAR.
  7. Dickey, D. A., & Fuller, W. A. (1979). Distribution of the Estimators for Autoregressive Time Series with a Unit Root. Journal of the American Statistical Association, 74(366), 427–431. doi:10.2307/2286348. — тест Дики–Фуллера на единичный корень (ADF).
  8. Kwiatkowski, D., Phillips, P. C. B., Schmidt, P., & Shin, Y. (1992). Testing the Null Hypothesis of Stationarity against the Alternative of a Unit Root. Journal of Econometrics, 54(1–3), 159–178. doi:10.1016/0304-4076(92)90104-Y. — тест KPSS (нулевая гипотеза — стационарность).
  9. Toda, H. Y., & Yamamoto, T. (1995). Statistical Inference in Vector Autoregressions with Possibly Integrated Processes. Journal of Econometrics, 66(1–2), 225–250. doi:10.1016/0304-4076(94)01616-8. — корректная проверка причинности по Грейнджеру на возможно интегрированных рядах.
  10. Lütkepohl, H. (2005). New Introduction to Multiple Time Series Analysis. Springer. doi:10.1007/978-3-540-27752-1. — справочник по VAR/VECM, импульсным откликам и декомпозиции дисперсии.
  11. Hamilton, J. D. (1994). Time Series Analysis. Princeton University Press. press.princeton.edu. — классический учебник по анализу временных рядов.

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

Опишите задачу.
Ответим в течение 24 часов.

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

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