halo 的技术博客

返回

2008 年 9 月,雷曼破产。三个月后,一个只投了日经 ETF 的组合也腰斩了——你从来没碰过美国次贷,为什么也被拖下水?

答案只有两个字:传染

资产不是孤岛。股票的冲击会顺着相关性、资金流、避险情绪,传到债券、黄金、原油、外汇。真正的风险管理,不能只看「我买了什么」,还要看「我买的这些,会被谁传染、又会传染谁」。

Diebold-Yilmaz(DY)连通性框架干的就是这件事:它用一套 VAR + 预测误差方差分解,把「A 冲击对 B 波动的解释力」量化成一个数,然后拼成一张全网地图。从中你能读出两样东西:

  1. 总连通度 TCI——整张网的「联结紧密程度」,是系统性风险的体温计;
  2. 方向性净溢出 NET——谁是传染源(净输出),谁是接收方(净接收)。

本文用 5 类资产的自洽合成数据,从零复现这套方法,并给出真实可用的数字。

一、核心思想:用「方差解释力」度量传染#

经典思路:建一个 VAR 模型刻画各资产收益的联动,然后问一个问题——

如果我给资产 j 一个冲击,未来 H 步里,资产 i 的波动(预测误差方差)有多大比例是由这个 j 冲击造成的?

这个比例,就是 A 对 B 的「传染强度」。把全部 i、j 的比例排成矩阵,就是连通性矩阵 dijd_{ij}

  • ii:资产 ii 的波动,被各来源解释了多少(行归一,合计 100%);
  • jj:资产 jj 的冲击,解释了别人多少波动;
  • 对角 diid_{ii}:自身冲击解释自身波动的部分(越大越「独立」)。

DY 的精髓在于:不要求冲击正交(允许相关性),所以用广义预测误差方差分解(GFEVD,Koop-Pesaran-Shi 1996),比早期需要 Cholesky 排序的版本更稳健。

二、合成数据:让股票当「传染源」#

为了能验证方向,我们造一组 5 类资产日收益,故意让股票的滞后项单向驱动其他资产,危机窗口再放大这个传导:

三、VAR 估计 + 广义方差分解#

先 OLS 估计 VAR(1):

跑完得到连通性矩阵 dij(%)d_{ij}(\%)(行=被影响 i,列=冲击来源 j):

Diebold-Yilmaz 连通性矩阵:股行为冲击主源,对角为自身占比

图 1:第一列(股票作冲击来源)每一行都显著非零——说明股票冲击渗透到所有资产;而第一行几乎只有对角亮,说明股票自身的波动很少来自别人。这就是「股票是传染源」在矩阵上的长相。

被影响 i ↓ \ 来源 j →股票债券黄金原油外汇
股票85.45.62.23.92.8
债券76.613.63.12.44.3
黄金64.816.013.31.44.5
原油65.24.61.428.30.5
外汇82.66.72.03.25.5

读表技巧:看第一列——股票冲击解释了债券 76.6%、黄金 64.8%、原油 65.2%、外汇 82.6% 的方差里「来自他者」的那部分。这是典型的「中心—外围」结构。

四、从矩阵到方向性指标#

DY 派生了三个关键量:

  • 总连通度 TCI=1Nijdij×100\text{TCI} = \frac{1}{N}\sum_{i\neq j} d_{ij} \times 100——全网溢出强度,系统性风险温度计;
  • 净溢出 NETi=TOiFROMi\text{NET}_i = \text{TO}_i - \text{FROM}_i,其中 TOi\text{TO}_i 是列 ii 离对角之和(净输出),FROMi\text{FROM}_i 是行 ii 离对角之和(净接收)。

本文全样本结果:

资产TO(净输出)FROM(净接收)NET
股票289.314.6+274.7
债券32.986.4−53.5
黄金8.786.7−78.0
原油11.071.7−60.8
外汇12.194.5−82.4

股票 NET = +274.7,是压倒性的净传染源;其余四类全是负的净接收方,外汇最「被动」(NET −82.4)。总连通度 TCI = 70.8%——意味着全市场约七成的波动联动来自跨资产传染,而非各自独立。

把它画成网络图,一目了然:

连通性网络:红色=净输出(传染源),蓝色=净接收,边宽∝溢出强度

图 2:股票(红,居中)向四个蓝点放射状输出;箭头粗细即传染强度。这是「一个中心 + 多个外围接收者」的拓扑。

五、连通性会动:滚动 TCI 抓危机#

连通性不是常数。我们每 250 个交易日滚动重算 TCI:

WW = 250
tci = []
for end in range(WW, T):
    Ah, Sh = fit_var1(r[end - WW:end])
    dd = gfevd(Ah, Sh, H=10)
    tci.append((dd.sum() - np.trace(dd)) / N * 100)
python

滚动总连通度:危机窗口(700-820)传染显著飙升

图 3:红带是我们在 DGP 里埋的危机窗口。TCI 从常态区均值 66.9% 飙到峰值 91.2%——危机期资产联动骤升,独立配置的幻觉被打破。这正是 DY 框架最实用的地方:用 TCI 做系统性风险预警

实跑数字:滚动 TCI 均值 71.0%,危机峰值 91.2%,常态区 66.9%

六、三个落地用法#

  1. 系统性风险温度计:把组合里资产的 TCI 做成日更面板。TCI 跳升 = 跨资产联动加剧 = 分散化失效预警,此时应主动降杠杆、加黄金/现金对冲。
  2. 找真分散:想做「不相关」配置?别只看两两相关系数。用 NET 挑一个 NET 为负的资产(净接收、被动态),它和股票(净输出)的联动在危机里反而可能提供保护。本文中外币/黄金的负 NET 正是这个角色。
  3. 传染源预警:监测「核心资产 NET 是否持续走高」。当某资产从净接收转为净输出,说明它正变成新的风险策源地(例如某次危机里黄金从避险接收变被动接收),提前调整敞口。

七、四类真实陷阱#

  1. 滞后阶 p 误设:VAR 阶数决定动态结构。p 太小漏掉长记忆联动,p 太大吃掉自由度、放大估计噪声。实务用 AIC/BIC 选 p,并对 p 做敏感性(1/2/4/8)看 TCI 稳不稳。
  2. 预测期 H 的取舍:GFEVD 对 H 敏感。H 太短捕获瞬时传染不足,太长把历史都摊进来。DY 原文常用 H=10(日频),但应报告 H=5/10/20 的结果交叉验证。
  3. 混淆正交化与广义分解:老版 Cholesky 分解结果依赖变量排序(谁在 VAR 里排前面,谁「先动」),换顺序结论会变。本文用 GFEVD 规避,但若你用 Cholesky,务必做排序鲁棒性检验,否则 NET 排序可能是假象。
  4. 样本期与平稳性:连通性是样本依赖的。只用牛市数据,TCI 会被低估;样本含 08/20/22 危机,TCI 会被高估。且 VAR 对非平稳序列(单位根)会失真——落地前必须做 ADF/PP 检验,必要时用收益率或差分序列。

八、结论#

Diebold-Yilmaz 连通性框架把「风险传染」从 metaphor 变成可算、可画、可监控的指标:

  • 结构:VAR(1) + GFEVD 得到连通性矩阵 dijd_{ij},量化「谁冲击解释了谁多少波动」;
  • 全局:TCI = 70.8%(本文),是系统性风险体温计,危机期可飙到 91.2%;
  • 方向:NET 区分传染源与接收方——本文股票 NET +274.7 是核心策源地,其余均为净接收;
  • 动态:滚动 TCI 能抓危机(66.9%→91.2%),是实盘可用的预警线。

但记住四个坑:滞后阶、预测期、正交化排序、样本平稳性——任何一个设错,你画出的「地图」都可能指向错误的传染源。


本文数据均为自洽合成(5 资产 VAR,股票定向驱动 + 危机窗口放大),仅用于演示方法。真实落地时:用 AIC/BIC 选 VAR 滞后阶、对 H 与排序做鲁棒性、先做平稳性检验、并把 TCI 接入日更风险面板。代码已全部跑通,数字即输出。

溢出指数与连通性网络:用 Diebold-Yilmaz 把风险传染画成地图
https://blog.halo26812.eu.org/blog/diebold-yilmaz-connectedness
Author halo
Published at 2026年7月19日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨