Копулы для моделирования совместного риска в крипто-портфелях

За пределами линейной корреляции - как копульные модели улавливают хвостовую зависимость и совместный риск в крипто-портфелях для точной оценки VaR и CVaR. Vine-копулы, GARCH-EVT пайплайн и Python-реализация.

Копульные модели — совместное распределение рисков

Корреляция — первый инструмент, за который берётся портфельный менеджер при оценке диверсификации. Но на крипто-рынке корреляция опасно обманчива. Два токена могут показывать корреляцию Пирсона 0.3 в спокойные дни, а потом взлетать до 0.95 в момент краха — именно тогда, когда диверсификация нужна больше всего.

Копульные модели решают эту проблему, разделяя поведение каждого актива по отдельности (маргиналы) и структуру зависимости между ними (копула). Это даёт гибкий фреймворк для моделирования полного совместного распределения — включая хвосты, где и живёт настоящий риск.

Почему линейная корреляция не работает для крипты

Рассмотрим портфель из BTC, ETH, SOL и AVAX. Во время коллапса Terra/Luna в мае 2022 корреляции между этими активами сошлись к 1.0 — ровно тогда, когда диверсификация была нужна больше всего.

Три фундаментальные проблемы корреляции Пирсона:

  1. Неэллиптические распределения. Крипто-доходности демонстрируют значительные асимметрию и эксцесс. У BTC эксцесс дневных доходностей регулярно превышает 10 (у нормального распределения — 3).

  2. Асимметричная зависимость. Активы более коррелированы на падениях, чем на ростах. Этот «breakdown корреляции» ещё более выражен в крипте, чем в акциях.

  3. Хвостовая зависимость. Вероятность того, что два актива одновременно испытают экстремальные потери, не улавливается линейной корреляцией.

Теорема Склара: фундамент

Теорема Склара (1959) утверждает: любое многомерное совместное распределение можно разложить на маргинальные распределения отдельных активов и копулу, которая кодирует всю структуру зависимости.

Это мощно, потому что позволяет:

  • Моделировать маргиналы каждого актива отдельно (GARCH, EVT, любое подходящее распределение)
  • Моделировать зависимость независимо через копулу
  • Комбинировать для получения полного совместного распределения

Семейства копул и хвостовая зависимость

Сравнение хвостовой зависимости разных копул

Гауссова копула

Параметризуется корреляционной матрицей. Хвостовая зависимость: нулевая — систематически недооценивает вероятность совместных экстремальных событий. Это ключевой фактор, который привёл к неправильной оценке CDO до 2008 года, и он столь же опасен для крипто-рисков.

Копула Стьюдента (t-копула)

Вводит симметричную хвостовую зависимость через параметр степеней свободы ν. При ν = 4 и ρ = 0.5, вероятность одновременного попадания обоих активов в худший квантиль ≈ 18%. Крипто-рынки обычно требуют ν в диапазоне 3–8.

Но t-копула навязывает симметричные хвосты — а в реальности крипто-активы чаще падают вместе (нижний хвост), чем растут (верхний).

Копула Клейтона

Улавливает нижнюю хвостовую зависимость — именно то поведение «обвала заражения», которое мы видим в крипте. При θ = 2 вероятность совместных экстремальных потерь ≈ 71%. Верхняя зависимость = 0.

Копула Гумбеля

Зеркальное отражение — улавливает верхнюю хвостовую зависимость (совместный рост).

Выбор копулы для крипто

СемействоНижняя хвостовая зав.Верхняя хвостовая зав.Когда использовать
Гауссова00Только для тела распределения
СтьюдентаСимметричнаяСимметричнаяОбщий случай
КлейтонаСильная0Моделирование обвалов
Гумбеля0СильнаяМоделирование ралли
Франка00Зависимость без хвостовых эффектов

Vine-копулы: решение проблемы размерности

Структура vine-копулы для крипто-портфеля

Стандартные копулы (Гауссова, t) масштабируются на высокие размерности, но навязывают одинаковую зависимость всем парам. Архимедовы копулы (Клейтон, Гумбель) по природе двумерны.

Vine-копулы решают это, разбивая d-мерную копулу на каскад двумерных копул, организованных в древовидную структуру. Каждая пара переменных получает своё семейство и параметр.

Для портфеля из 10 криптоактивов это 45 парных копул — каждая потенциально из другого семейства:

  • BTC-ETH: t-копула (ν=4, ρ=0.72)
  • BTC-SOL: Клейтон (θ=2.1) — сильная зависимость при обвалах
  • ETH-AVAX: Франк (θ=5.3) — зависимость без хвостов
  • SOL-DOT | BTC: Гумбель (θ=1.8) — условная верхняя зависимость

Типы vine-структур

  • C-vine: один центральный узел (например, BTC) связан со всеми. Лучший выбор, когда один актив доминирует.
  • D-vine: последовательная цепочка. Хорош при естественном порядке (по капитализации).
  • R-vine: наиболее общая структура, включающая C-vine и D-vine как частные случаи.

Моделирование маргиналов: GARCH-EVT

Перед подгонкой копулы нужно трансформировать ряды доходностей в равномерные [0,1] переменные:

  1. GARCH-модель для каждого актива → захватывает кластеризацию волатильности
  2. Стандартизированные остатки — убираем временну́ю зависимость
  3. Хвосты через EVT — обобщённое распределение Парето (GPD) для экстремумов
  4. Эмпирическая CDF для тела распределения
  5. Интегральное преобразование вероятности → псевдо-равномерные наблюдения

Для крипто хорошо работает GJR-GARCH(1,1) с t-инновациями — улавливает асимметричный отклик волатильности (плохие новости увеличивают волатильность сильнее хороших).

VaR и CVaR через копулы

Value-at-Risk (VaR)

Через Monte Carlo:

  1. Симулировать N выборок из vine-копулы (в пространстве [0,1])
  2. Обратно трансформировать через обратные маргинальные CDF
  3. Посчитать портфельные доходности
  4. VaR = α-квантиль распределения потерь

CVaR (Expected Shortfall)

CVaR — ожидаемый убыток при условии, что убыток превысил VaR. В отличие от VaR, CVaR когерентен (удовлетворяет субаддитивности), что делает его лучше для оптимизации портфеля.

Почему копульный риск точнее корреляционного

Два портфеля с одинаковой попарной корреляцией 0.5:

ПортфельКопула99% CVaR
AГауссова (хвостовая зав. = 0)8.2%
BКлейтон (хвостовая зав. = 0.71)11.5%

Разница в 99% CVaR между гауссовой и vine-копульной моделями может превышать 30–40% — корреляционные модели недооценивают хвостовой риск на треть и более.

Реализация на Python

Шаг 1: Подгонка GARCH-маргиналов

from arch import arch_model
import numpy as np

def fit_garch_marginal(series, dist="t"):
    model = arch_model(
        series * 100,
        vol="GARCH", p=1, o=1, q=1,  # GJR-GARCH
        dist=dist, mean="AR", lags=1
    )
    result = model.fit(disp="off")
    return result.std_resid.dropna(), result

Шаг 2: Подгонка vine-копулы

import pyvinecopulib as pv

controls = pv.FitControlsVinecop(
    family_set=[
        pv.BicopFamily.student,
        pv.BicopFamily.clayton,
        pv.BicopFamily.gumbel,
        pv.BicopFamily.frank,
        pv.BicopFamily.joe,
        pv.BicopFamily.bb1,       # смесь Clayton-Gumbel
        pv.BicopFamily.bb7,       # смесь Joe-Clayton
    ],
    selection_criterion="bic",
    tree_criterion="tau",
    trunc_lvl=5,
)

vine = pv.Vinecop(U, controls=controls)

Шаг 3: Monte Carlo VaR/CVaR

U_sim = vine.simulate(n=100_000, seeds=[42])

# Обратная трансформация → портфельные доходности → VaR
losses = -portfolio_returns
var_99 = np.quantile(losses, 0.99)
cvar_99 = np.mean(losses[losses >= var_99])

Практические рекомендации

Вычислительная стоимость

Vine-копулы — O(d² · n) на уровень дерева. Стратегии оптимизации:

  • Усечение vine (trunc_lvl=3–4) — верхние деревья вносят мало
  • Кэширование модели — перефит копулы раз в неделю, GARCH обновляется ежедневно
  • Параллелизация — GARCH для каждого актива независим

Типичные ошибки

  1. Забыть PIT. Подать сырые доходности в копулу вместо равномерных наблюдений = бессмысленные результаты.
  2. Переобучение семейств. Включить все возможные семейства → используйте BIC и ограничьте до 4–5.
  3. Игнорировать автокорреляцию. Пропустить GARCH-шаг и подать автокоррелированные ряды → зависимость заражена временными эффектами.
  4. Статичные копулы. Копула 2021-го бычьего рынка плохо откалибрована для 2022-го краха → скользящие окна.

Ссылки

  • 📄 Sklar, A. (1959). Fonctions de repartition a n dimensions et leurs marges
  • 📄 Joe, H. (2014). Dependence Modeling with Copulas. Chapman and Hall/CRC
  • 📄 Aas, K. et al. (2009). Pair-copula constructions of multiple dependence. Insurance: Math & Economics
  • 📄 Jeleskovic, V. & Bruhn, L. (2024). Cryptocurrency portfolio optimization: GARCH-Copula within Markowitz
  • 💻 pyvinecopulib — Python-библиотека для vine-копул

Вывод

Копульные модели — особенно vine-копулы — дают математически строгий фреймворк для моделирования совместного риска крипто-портфелей, далеко выходящий за рамки линейной корреляции. Пайплайн GARCH-EVT-Copula стал стандартом на квантовых хедж-фондах и крипто-ориентированных рисковых десках. С библиотеками вроде pyvinecopulib порог входа достаточно низок, чтобы любой систематический трейдер мог интегрировать копульное моделирование в свой рабочий процесс.