第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 的直觉:为什么它有效?

你可能会问:为什么非要让风险贡献相等?

原因有三:

  1. 分散化最大化:ERC 在数学上等价于最大化组合的「有效分散化程度」。它让组合不会过度依赖某一个资产。
  2. 稳健性:相比最小方差组合(GMV),ERC 对参数估计误差不那么敏感。我在回测中发现,ERC 的样本外表现通常比 GMV 更稳定。
  3. 直观可解释:你可以跟客户说:「我们让每个资产承担相同的风险份额。」这比「我们优化了夏普比率」更容易被理解。

举个例子。假设你有三个资产:

资产 波动率 等权重 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 图来总结本章的核心逻辑:

风险预算核心原理:ERC 模型知识体系 问题:资金权重 ≠ 风险权重 核心概念:边际风险贡献 (MRC) → 总风险贡献 (TRC) ERC 定义:TRC₁ = TRC₂ = ... = TRCₙ 数学推导:最小化 (TRCᵢ - 1/n)² 直觉理解:风险蛋糕平均分配 应用:风险预算(自定义 bᵢ)→ 更灵活的风险管理

这张图展示了从「发现问题」到「数学定义」再到「求解方法」和「实际应用」的完整链路。你可以把它当作本章的思维导图。

4.7 小结

等风险贡献(ERC)是风险预算的基石。它告诉我们:真正的分散化不是资金层面的平均,而是风险层面的平均。

我个人认为,理解 ERC 的关键在于三点:

  • 边际风险贡献衡量的是「权重变化对风险的影响」
  • 总风险贡献是「权重乘以边际风险」
  • ERC 让所有资产的总风险贡献相等

嗯,这里要注意:ERC 不是万能的。当资产间相关性很高时,ERC 的效果会打折扣。另外,协方差矩阵的估计质量直接影响结果。我建议至少用 2-3 年的日度数据来估计,并且定期再平衡。

下一章我们会深入讨论风险预算的扩展形式——如何加入主观观点、如何处理约束条件。但今天先把 ERC 吃透,后面的内容就水到渠成了。


公众号:蓝海资料掘金营,微信deep3321