4. 成分风险贡献:定义与计算、分解、与风险预算的关系
各位好,我是你们的老朋友。今天我们来聊聊风险贡献分析里最核心的一个概念——成分风险贡献(Component Risk Contribution,简称CRC)。
说实话,我刚开始做风控那会儿,对“风险贡献”的理解就是“谁波动大谁贡献多”。后来在实盘里吃了亏,才发现事情没那么简单。嗯,咱们今天就把这个事彻底讲透。
4.1 什么是成分风险贡献?
先给个直观的定义:成分风险贡献,指的是组合中某个资产,对整个组合风险的“边际贡献”乘以该资产的权重。
说白了,就是回答一个问题:“如果我把这个资产从组合里拿掉,组合风险会下降多少?”
但注意,这里有个坑——你不能直接拿掉资产去算,因为组合风险不是线性的。我当年在做一个多资产FOF项目时,就犯过这个错。当时我简单地把每个资产的波动率加起来,结果发现总和远大于组合实际波动率。后来才明白,风险贡献必须考虑资产之间的相关性。
数学上,成分风险贡献的定义是这样的:
CRC_i = w_i * (∂σ_p / ∂w_i)
其中:
w_i是资产 i 的权重σ_p是组合波动率∂σ_p / ∂w_i是组合波动率对权重 w_i 的偏导数(也就是边际风险贡献)
你想想看,这个公式其实很优雅。它把“权重”和“边际影响”乘在一起,正好反映了资产在组合中的真实风险暴露。
4.2 成分风险贡献的计算
计算其实不复杂,但有几个细节要注意。我习惯用矩阵运算来做,效率高,也不容易出错。
假设组合有 n 个资产,协方差矩阵为 Σ,权重向量为 w。那么组合波动率:
σ_p = sqrt(w' Σ w)
边际风险贡献向量:
MRC = (Σ w) / σ_p
成分风险贡献向量:
CRC = w * MRC = w * (Σ w) / σ_p
这里有个重要的性质:所有资产的CRC之和,正好等于组合波动率 σ_p。
我建议你在代码里这样实现:
import numpy as np
def component_risk_contribution(weights, cov_matrix):
"""
计算成分风险贡献
weights: 权重向量 (n,)
cov_matrix: 协方差矩阵 (n, n)
"""
portfolio_vol = np.sqrt(weights @ cov_matrix @ weights)
marginal_contrib = (cov_matrix @ weights) / portfolio_vol
component_contrib = weights * marginal_contrib
return component_contrib, portfolio_vol
# 示例
weights = np.array([0.4, 0.3, 0.3])
cov = np.array([[0.04, 0.01, 0.005],
[0.01, 0.09, 0.02],
[0.005, 0.02, 0.16]])
crc, vol = component_risk_contribution(weights, cov)
print("成分风险贡献:", crc)
print("组合波动率:", vol)
print("CRC之和:", np.sum(crc))
4.3 成分风险贡献的分解
光算出CRC还不够,我们得能把它拆开来看。我个人习惯把CRC分解成三个部分:
- 权重效应:资产权重越大,CRC通常越大(但不是线性关系)
- 波动率效应:资产自身波动率越高,CRC越大
- 相关性效应:资产与其他资产的相关性越高,CRC越大
为什么会这样?我们来看CRC的另一种表达形式:
CRC_i = w_i * (w_i * σ_i^2 + Σ_{j≠i} w_j * σ_i * σ_j * ρ_ij) / σ_p
你看,分子里第一项是自身方差贡献,第二项是与其他资产的协方差贡献。说白了,一个资产的风险贡献,一半来自自己,一半来自“朋友圈”。
我记得有一次做风险归因,发现某个债券的CRC特别高。一开始以为是它波动大,后来一查,原来是它跟股票的相关性很高,导致协方差贡献很大。这就是相关性效应在作怪。
为了更直观地展示,我画了一张图:
4.4 风险预算与成分风险贡献的关系
好,接下来是重点中的重点——风险预算(Risk Budgeting)和成分风险贡献的关系。
简单来说:风险预算,就是给每个资产设定一个目标CRC占比。
比如,你希望组合里股票贡献60%的风险,债券贡献40%的风险。那么你就要调整权重,使得:
CRC_股票 / σ_p = 60%
CRC_债券 / σ_p = 40%
这就是所谓的风险平价(Risk Parity)——当所有资产的CRC占比相等时,就是等风险贡献。
我当年在做一个养老金组合时,客户要求“每个资产的风险贡献不能超过20%”。当时我直接用等权重,结果发现某个高波动资产的风险贡献占了35%。后来改用风险预算方法,重新优化权重,才满足要求。
这里有个表格,对比了等权重和等风险贡献的区别:
| 资产 | 波动率 | 等权重 | 等权重CRC占比 | 风险预算权重 | 风险预算CRC占比 |
|---|---|---|---|---|---|
| 股票A | 20% | 33.3% | 55% | 25% | 33.3% |
| 债券B | 10% | 33.3% | 25% | 50% | 33.3% |
| 商品C | 15% | 33.3% | 20% | 25% | 33.3% |
你看,等权重下,股票A的CRC占比高达55%,远高于其他资产。而风险预算通过调整权重,让每个资产的CRC占比都变成33.3%。
4.5 避坑指南
最后,分享几个我踩过的坑:
- 不要用历史波动率直接算CRC——历史会变,我建议用预测波动率或条件波动率。
- 注意协方差矩阵的稳定性——我曾经用60天滚动窗口算协方差,结果CRC每天剧烈波动,后来改用指数加权移动平均(EWMA)才稳定下来。
- CRC为负怎么办?——如果某个资产的CRC为负,说明它是组合的“对冲工具”,降低了整体风险。这在多空组合里很常见,别慌。
好了,关于成分风险贡献,今天就聊到这里。记住一句话:风险贡献不是看谁波动大,而是看谁在组合里“搅局”最厉害。
公众号:蓝海资料掘金营,微信deep3321