第4章:风险预算核心原理:等风险贡献(ERC)模型
风险预算这个概念,说白了就是回答一个问题:我的组合里,每个资产到底承担了多少风险?
很多新手做资产配置,只看资金权重。比如股票配60%,债券配40%。但实际运行起来,股票一波动,组合里90%的风险都来自股票。那这个配置还有什么意义?
我个人习惯把风险预算看作「风险层面的公平分配」。今天我们就从最经典的等风险贡献模型(ERC)入手,把数学推导和直觉都讲透。
4.1 从「资金权重」到「风险权重」
先看一个简单例子。
假设组合里只有两个资产:
- 资产A:年化波动率 20%
- 资产B:年化波动率 5%
- 两者相关系数 0.3
如果按50/50的资金权重配置,组合波动率大概在11%左右。但风险贡献呢?
我算给你看:
- A对组合风险的贡献:约 82%
- B对组合风险的贡献:约 18%
看到了吗?资金各一半,风险却严重失衡。这就是为什么我们需要风险预算。
核心观点:风险预算不是看「你投了多少钱」,而是看「你承担了多少风险」。等风险贡献(ERC)就是让每个资产对组合总风险的贡献完全相等。
4.2 等风险贡献(ERC)的数学定义
先定义几个符号:
- 组合有 n 个资产,权重向量 w = (w₁, w₂, ..., wₙ)ᵀ
- 协方差矩阵 Σ,其中 σᵢⱼ 是资产 i 和 j 的协方差
- 组合方差:σ²_p = wᵀ Σ w
- 组合波动率:σ_p = √(wᵀ Σ w)
资产 i 的边际风险贡献(Marginal Risk Contribution, MRC)定义为:
MRC_i = ∂σ_p / ∂w_i = (Σ w)_i / σ_p
这个公式的含义是:权重每增加一点点,组合波动率变化多少。
然后,资产 i 的总风险贡献(Total Risk Contribution, TRC)就是:
TRC_i = w_i × MRC_i = w_i × (Σ w)_i / σ_p
等风险贡献(ERC)要求:
TRC_1 = TRC_2 = ... = TRC_n
并且所有权重之和为1,且通常不允许做空(w_i ≥ 0)。
直觉理解:ERC 就像切蛋糕。每块蛋糕(风险贡献)必须一样大。如果某个资产波动太大,就少给它一点权重;如果某个资产很稳定,就多给它一点权重。最终让每块「风险蛋糕」大小相同。
4.3 数学推导:如何求解 ERC 权重?
求解 ERC 权重没有解析解,需要数值优化。我常用的方法是:
把问题转化为一个最小化问题:
min Σᵢ (TRC_i - TRC_j)² 对于所有 i ≠ j
s.t. Σ w_i = 1, w_i ≥ 0
或者更优雅的形式:
min Σᵢ (TRC_i - 1/n)²
因为所有 TRC 之和等于组合方差 σ²_p,所以平均风险贡献就是 σ²_p / n。
在实际项目中,我习惯用 Python 的 scipy.optimize 来求解。下面是一个完整的代码示例:
import numpy as np
from scipy.optimize import minimize
def erc_weights(cov_matrix):
"""
求解等风险贡献(ERC)权重
cov_matrix: 协方差矩阵 (n x n)
返回: 最优权重向量
"""
n = cov_matrix.shape[0]
# 目标函数:各资产风险贡献与平均值的差的平方和
def objective(w):
w = w / np.sum(w) # 归一化
port_var = w @ cov_matrix @ w
port_vol = np.sqrt(port_var)
# 计算每个资产的风险贡献
mrc = cov_matrix @ w / port_vol
trc = w * mrc
target = port_var / n
return np.sum((trc - target) ** 2)
# 初始权重:等权重
w0 = np.ones(n) / n
# 约束条件:权重和为1,且非负
constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
bounds = [(0, 1) for _ in range(n)]
result = minimize(objective, w0, method='SLSQP',
bounds=bounds, constraints=constraints)
# 归一化确保精度
w_opt = result.x / np.sum(result.x)
return w_opt
# 示例:3个资产
cov = np.array([
[0.04, 0.01, 0.005],
[0.01, 0.09, 0.02],
[0.005, 0.02, 0.16]
])
w_erc = erc_weights(cov)
print("ERC权重:", w_erc)
print("权重和:", np.sum(w_erc))
避坑指南:我曾经在求解 ERC 时遇到过收敛到局部最优的问题。建议多试几个初始点,或者用等权重作为初始值。另外,如果协方差矩阵是奇异的(比如资产数量多于时间窗口),需要先做正则化处理。
4.4 ERC 的直觉:为什么它有效?
你可能会问:为什么非要让风险贡献相等?
原因有三:
- 分散化最大化:ERC 在数学上等价于最大化组合的「有效分散化程度」。它让组合不会过度依赖某一个资产。
- 稳健性:相比最小方差组合(GMV),ERC 对参数估计误差不那么敏感。我在回测中发现,ERC 的样本外表现通常比 GMV 更稳定。
- 直观可解释:你可以跟客户说:「我们让每个资产承担相同的风险份额。」这比「我们优化了夏普比率」更容易被理解。
举个例子。假设你有三个资产:
| 资产 | 波动率 | 等权重 | ERC权重 | 等权重风险贡献 | ERC风险贡献 |
|---|---|---|---|---|---|
| 股票 | 20% | 33.3% | 18.5% | 62% | 33.3% |
| 债券 | 5% | 33.3% | 52.1% | 12% | 33.3% |
| 商品 | 15% | 33.3% | 29.4% | 26% | 33.3% |
看到没?等权重下,股票承担了62%的风险。ERC 通过降低股票权重、提高债券权重,让每个资产的风险贡献都变成33.3%。
关键洞察:ERC 本质上是在「风险层面做平均分配」。它不追求收益最大化,而是追求风险分散化。对于长期投资者来说,这种「风险平价」思路往往能带来更平滑的净值曲线。
4.5 ERC 与风险预算的关系
ERC 是风险预算的一个特例。更一般地,风险预算允许你自定义每个资产的目标风险贡献比例。
比如,你可以设定:
- 股票承担 40% 的风险
- 债券承担 30% 的风险
- 商品承担 30% 的风险
然后求解权重,使得 TRC_i / σ²_p = 目标比例。
数学上,风险预算的约束条件是:
TRC_i = b_i × σ²_p
其中 b_i 是目标风险预算比例,且 Σ b_i = 1。
当 b_i = 1/n 时,就是 ERC。
我的经验:在实际工作中,我很少用严格的 ERC。因为不同资产的风险收益特征差异很大。我更倾向于给股票设定 30-40% 的风险预算,债券 40-50%,商品 10-20%。这样既保留了 ERC 的分散化思想,又加入了主观判断。
4.6 本章知识体系图
下面我用一张 SVG 图来总结本章的核心逻辑:
这张图展示了从「发现问题」到「数学定义」再到「求解方法」和「实际应用」的完整链路。你可以把它当作本章的思维导图。
4.7 小结
等风险贡献(ERC)是风险预算的基石。它告诉我们:真正的分散化不是资金层面的平均,而是风险层面的平均。
我个人认为,理解 ERC 的关键在于三点:
- 边际风险贡献衡量的是「权重变化对风险的影响」
- 总风险贡献是「权重乘以边际风险」
- ERC 让所有资产的总风险贡献相等
嗯,这里要注意:ERC 不是万能的。当资产间相关性很高时,ERC 的效果会打折扣。另外,协方差矩阵的估计质量直接影响结果。我建议至少用 2-3 年的日度数据来估计,并且定期再平衡。
下一章我们会深入讨论风险预算的扩展形式——如何加入主观观点、如何处理约束条件。但今天先把 ERC 吃透,后面的内容就水到渠成了。
公众号:蓝海资料掘金营,微信deep3321