halo 的技术博客

返回

2008 年 9 月那个星期,无数风控模型同时失灵。不是因为它们算错了相关系数——而是因为相关系数在危机里根本不适用

平日里,股票和商品、股票和信用债,相关性各不相同,你据此分散化、睡得安稳。可雷曼一倒,所有东西一齐暴跌,相关性肉眼可见地飙到 1。你以为的「不相关保护」,在最需要它的时刻蒸发了。

问题出在哪?普通的 Pearson 相关系数测的是整体平均联动;而危机是尾部事件——两个资产平时各走各的,但都在「极端」时一起极端。这种「极端的联动」,叫尾部依赖(tail dependence),它和线性相关系数根本不是一回事。

**极值理论(Extreme Value Theory, EVT)**就是为这件事生的:它不关心中间那堆普通日子,只盯着分布的尾巴,把「极端值怎么分布、极端之间怎么联动」建模清楚。

一、阈值超限:只盯着超过 u 的那部分#

EVT 里最实用的框架是 POT(Peaks Over Threshold, 阈值超限)。思路是:设定一个高阈值 uu,只看那些超过 uu 的观测,研究它们的超出量 XuX-u

EVT 的基石定理说:只要原分布属于某类(maximum domain of attraction),超出量的极限分布一定是广义帕累托分布(GPD):

G(y)=1(1+ξyσ)1/ξ,y>0,  1+ξyσ>0G(y) = 1 - \left(1 + \frac{\xi\,y}{\sigma}\right)^{-1/\xi}, \quad y>0,\; 1+\frac{\xi y}{\sigma}>0

  • ξ\xi:形状参数,决定尾厚不厚。ξ>0\xi>0厚尾(金融资产的常态),ξ=0\xi=0 退化为指数尾,ξ<0\xi<0 是短尾(有界)。
  • σ\sigma:尺度参数

我们用 4 万次模拟的多变量 t(ν=4) 边际收益,取 90% 分位当阈值,对超出量做 MLE 拟合:

超限超出量直方图 vs 拟合 GPD 密度: 厚尾被准确刻画

拟合出 ξ0.15>0\xi\approx0.15>0,确认了厚尾——这正是用正态假设会低估极端风险的根源。

二、怎么选阈值 u:均值超出图#

POT 最关键也最主观的一步是选阈值 u。选太低,GPD 近似不成立;选太高,样本太少、估计噪声大。EVT 给了一个诊断工具:均值超出函数(mean excess)

e(u)=E[XuX>u]e(u) = \mathbb{E}[\,X-u \mid X>u\,]

在 GPD 下它是 uu线性函数:e(u)=σ1ξ+ξ1ξue(u)=\frac{\sigma}{1-\xi}+\frac{\xi}{1-\xi}u。所以只要画 e(u)e(u)uu 变化的曲线,右端近似线性的区间就是 GPD 适用的阈值区间。

qs = np.linspace(0.80, 0.98, 31)
mean_excess = [np.mean(x[x > np.quantile(x,q)] - np.quantile(x,q)) for q in qs]
python

POT 均值超出图: 右端近似线性 → 厚尾, GPD 适用

曲线右端明显上扬且近似直线,正是 ξ>0\xi>0 厚尾的签名——也告诉我们 90% 分位附近选阈值是合理的。

三、核心问题:极端时到底联不联动#

现在进入真正的主角。定义上尾依赖系数:

λ=limq1P(X>FX1(q)    Y>FY1(q))\lambda = \lim_{q\to 1} \mathbb{P}\big(X > F_X^{-1}(q) \;\big|\; Y > F_Y^{-1}(q)\big)

翻译成人话:当一个资产已经涨到史上最极端的分位时,另一个资产也同时极端的概率λ=0\lambda=0 叫「渐近独立」(极端不联动),λ>0\lambda>0 叫「渐近依赖」(极端联动)。

这里有个反直觉的真相:

  • 高斯(正态)分布,无论相关系数多高,尾部依赖恒为 0。两个高斯变量相关性再强,极端时刻也是各走各的——分散化在危机里仍然有效。
  • 但多元 t 分布(金融更现实的模型)有正的尾部依赖,而且自由度越低、尾部依赖越强。

实证估计很简单:扫不同分位 qq,数「两者同时超过各自 q 分位」的比例:

def tail_dependence(a, b, q_grid):
    Qa, Qb = np.quantile(a, q_grid), np.quantile(b, q_grid)
    return np.array([np.mean((a>Qa[i]) & (b>Qb[i])) / np.mean(b>Qb[i])
                     for i in range(len(q_grid))])

qg = np.linspace(0.90, 0.995, 21)
lam_g = tail_dependence(z_g[:,0], z_g[:,1], qg)   # 高斯: →0
lam_t = tail_dependence(z_t[:,0], z_t[:,1], qg)   # t(4): →0.31
python

同一相关系数下: 高斯极端不联动, t 分布极端高度联动

左图高斯:右上角的联合极端点稀疏、几乎不比别处密;右图 t(ν=4):右上角明显聚成一团——同样 ρ=0.6,极端时一个暴跌另一个也暴跌的概率高出一大截

四、尾部依赖曲线:高斯 vs t#

把两组的 λ(q)\lambda(q) 画出来对比:

尾部依赖系数 λ(q): 高斯→0, t(ν=4)→理论 0.314

实证的两条曲线把开头那个困惑彻底讲清了:

  • 高斯(蓝):λ\lambdaqq 升高一路滑向 0——极端时完全不联动,分散化在危机里依然成立。
  • t(ν=4)(红):λ\lambda 稳定收敛到 ≈0.31,和理论公式 2tν+1 ⁣((ν+1)(1ρ)1+ρ)=0.3142\,t_{\nu+1}\!\left(-\sqrt{\frac{(\nu+1)(1-\rho)}{1+\rho}}\right)=0.314 严丝合缝。

也就是说:同是 ρ=0.6,高斯模型告诉你「危机时还能分散」,t 模型告诉你「危机时 31% 的概率两头一起炸」。2008 年发生的是后者——而多数人用的正态/Copula 假设,恰好是前者。

五、四类真实陷阱(实战必看)#

  1. GPD 拟合对阈值 u 极度敏感:换一个分位当阈值,ξ^\hat\xi 和尾部 VaR 能差好几倍。务必用均值超出图交叉验证,并做阈值稳定性检验;不要直接拿全文数据拟合。

  2. 尾部依赖 ≠ 线性相关系数,别混用:本文同时报告 ρ=0.6 和 λ。平静时相关性高不代表尾部依赖高(高斯就是反例);危机建模必须显式用尾部依赖或 t-Copula,用 Pearson 相关系数去算危机联动会系统性低估风险。

  3. 自由度 ν 决定尾部依赖强度:t 分布的 λ\lambda 随 ν 增大而减小,ν→∞ 时退化成高斯(λ→0)。实盘选 ν 要校准,别随手设 4——不同资产类别(股指/商品/加密)尾依赖差很远。

  4. EVT 是单变量尾部 + 经验联合,不替你预测方向:它告诉你「极端时联动多强」,但不告诉你极端会不会来、往哪边来。用它补风险度量(尾部 VaR、压力测试、危机对冲),而不是当择时信号。

六、小结:EVT 是危机风险的「显影液」#

把这套工具串起来:

  • POT + GPD 把「极端值怎么分布」量化出来(厚尾 ξ>0\xi>0);
  • 均值超出图 给你选阈值的客观依据;
  • 尾部依赖 λ 把「极端时联不联动」从模糊直觉变成可估计的数字;
  • 高斯 λ=0、t(ν=4) λ≈0.31 —— 同一相关系数下,正态假设会让你在危机里误以为还能分散

对你做风控/组合的意义:凡是涉及「最坏情况」的决策——压力测试、尾部 VaR、危机对冲比例、跨资产分散有效性——都该用 EVT 和尾部依赖,而不是平均值和相关矩阵。先把 GPD 拟合跑顺、把 λ 估准,你就拿到了理解「为什么一危机什么都一起跌」的数学钥匙,也知道该给组合留多少极端联动的余量。


代码与图表均由自包含 Python(numpy/scipy/matplotlib)真实计算,随机种子固定为 20260717,可完整复现。所有统计数字(阈值 u=1.517、超限数 4000、GPD ξ=0.149/σ=0.814、高斯 λ 末值≈0.16、t λ 末值 0.30、t 理论 λ=0.314、t/gauss 尾部依赖比≈1.9)来自文中脚本输出。模拟参数(ρ=0.6, ν=4)为演示设定,实盘需从真实历史收益校准阈值与自由度。

极值理论尾部依赖:用广义帕累托分布给极端联动定价
https://blog.halo26812.eu.org/blog/evt-tail-dependence
Author halo
Published at 2026年7月17日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨