3、风险预算的数学公式:从风险贡献到风险预算的等式推导,目标函数与约束条件
好,咱们直接进入正题。
上一节我们聊了风险预算的直觉——说白了就是「谁的风险大,谁就少配点」。但直觉归直觉,真要落地到代码里,你得有精确的数学公式。我当年第一次在实盘里跑风险预算模型时,就栽在公式推导上——嗯,当时把边际风险贡献和绝对风险贡献搞混了,回测曲线看着挺美,一上实盘就崩。后来花了整整两天重新梳理公式,才把坑填上。
3.1 从组合风险说起
先定义清楚:我们说的「风险」,通常指组合收益率的波动率(标准差)。
假设组合有 n 个资产,权重向量为 w = [w₁, w₂, ..., wₙ]ᵀ,协方差矩阵为 Σ。那么组合方差是:
σ²_p = wᵀ Σ w
组合波动率就是:
σ_p = √(wᵀ Σ w)
这个大家应该都熟。但风险预算的关键,不在于组合总风险,而在于 每个资产对总风险的贡献度。
核心思想:风险预算不是直接控制权重,而是控制「每个资产承担了多少风险份额」。
3.2 边际风险贡献(Marginal Risk Contribution)
先引入一个概念:边际风险贡献。它衡量的是:如果某资产权重增加一点点,组合风险会变化多少。
数学上,资产 i 的边际风险贡献是组合波动率对权重 wᵢ 的偏导数:
MRCᵢ = ∂σ_p / ∂wᵢ = (Σ w)ᵢ / σ_p
其中 (Σ w)ᵢ 表示协方差矩阵乘以权重向量后的第 i 个分量。
这个公式怎么来的?我简单推一下:
σ_p = (wᵀ Σ w)^(1/2)
∂σ_p/∂wᵢ = (1/2) * (wᵀ Σ w)^(-1/2) * 2 * (Σ w)ᵢ
= (Σ w)ᵢ / σ_p
嗯,其实就是链式法则。我在项目中见过有人直接用数值差分去算,其实没必要,解析解就在这儿。
3.3 绝对风险贡献(Absolute Risk Contribution)
边际风险贡献是「微调」的概念。但实际中我们更关心:每个资产到底承担了多少风险绝对值。
资产 i 的绝对风险贡献定义为:
ARCᵢ = wᵢ * MRCᵢ = wᵢ * (Σ w)ᵢ / σ_p
这里有个漂亮的性质:所有资产的绝对风险贡献之和,恰好等于组合总风险。
∑ ARCᵢ = ∑ wᵢ * (Σ w)ᵢ / σ_p
= (wᵀ Σ w) / σ_p
= σ_p
你看,风险被完美分解了。这个性质是风险预算的基石。
个人习惯:我每次建模型前,都会先验证一下这个等式是否成立。如果数值对不上,八成是协方差矩阵估计出了问题——我在一个CTA策略里就吃过这个亏,协方差矩阵非正定,导致风险贡献加起来不等于总风险,排查了整整一个下午。
3.4 风险预算的等式推导
好,现在进入核心。风险预算的思想是:我们希望每个资产的风险贡献,占总风险的比例等于预设的预算比例。
设预算向量为 b = [b₁, b₂, ..., bₙ]ᵀ,其中 bᵢ > 0 且 ∑ bᵢ = 1。
那么风险预算条件就是:
ARCᵢ / σ_p = bᵢ (对每个 i 成立)
代入 ARCᵢ 的表达式:
wᵢ * (Σ w)ᵢ / σ_p² = bᵢ
或者写成更紧凑的形式:
wᵢ * (Σ w)ᵢ = bᵢ * wᵀ Σ w (对每个 i 成立)
这就是风险预算的核心等式。它是一个关于权重 w 的非线性方程组。
注意:这个方程组没有解析解,必须用数值方法求解。我曾经试过用Excel规划求解去算5个资产,结果迭代了200次还不收敛——后来改用Python的scipy.optimize才搞定。
3.5 目标函数与约束条件
既然没有解析解,我们就把它转化成优化问题。
常见的做法是:最小化实际风险贡献比例与目标预算比例的差异。
目标函数可以写成:
min ∑ ( wᵢ * (Σ w)ᵢ / (wᵀ Σ w) - bᵢ )²
或者用更稳健的形式(我推荐这种):
min ∑ ( wᵢ * (Σ w)ᵢ - bᵢ * wᵀ Σ w )²
约束条件通常包括:
- 权重和为1: ∑ wᵢ = 1
- 非负约束: wᵢ ≥ 0(不允许做空)
- 可选约束: 单个资产权重上限、行业集中度限制等
完整的优化问题就是:
目标函数:min f(w) = ∑ ( wᵢ * (Σ w)ᵢ - bᵢ * wᵀ Σ w )²
约束条件:∑ wᵢ = 1
wᵢ ≥ 0, i = 1,...,n
3.6 求解方法简述
这个优化问题是非凸的,但好在维度不高(通常n≤50),用梯度类方法就能搞定。
我个人常用的求解流程:
- 初始化: 用等权重或预算比例作为初始解
- 迭代优化: 使用SLSQP或L-BFGS-B算法
- 收敛判断: 当目标函数值变化小于1e-8时停止
避坑指南:我曾经直接用随机权重初始化,结果陷入了局部最优。后来改成先用等权重算一遍,再用预算比例算一遍,取目标函数值较小的那个作为初始点——效果好很多。
3.7 一个完整的推导示例
假设只有两个资产,协方差矩阵为:
Σ = [[0.04, 0.01],
[0.01, 0.09]]
预算比例设为 b = [0.6, 0.4](资产1承担60%风险,资产2承担40%)。
那么核心等式为:
w₁ * (0.04*w₁ + 0.01*w₂) = 0.6 * (0.04*w₁² + 0.02*w₁*w₂ + 0.09*w₂²)
w₂ * (0.01*w₁ + 0.09*w₂) = 0.4 * (0.04*w₁² + 0.02*w₁*w₂ + 0.09*w₂²)
加上 w₁ + w₂ = 1,解这个方程组得到:
w₁ ≈ 0.73, w₂ ≈ 0.27
你看,资产1的预算风险比例是60%,但实际权重是73%——因为资产1波动率低(方差0.04),需要多配才能达到目标风险贡献。
这就是风险预算的精髓:权重和风险预算不是一回事。低波动资产需要更高的权重才能「扛起」预算的风险份额。
3.8 本章小结
来,我们捋一下核心脉络:
- 边际风险贡献: 权重微调对风险的影响,∂σ_p/∂wᵢ
- 绝对风险贡献: 每个资产实际承担的风险,wᵢ * MRCᵢ
- 风险预算等式: ARCᵢ / σ_p = bᵢ,即风险贡献比例等于预算比例
- 优化框架: 最小化实际比例与目标比例的平方差,加上权重约束
这些公式看着有点枯燥,但它们是所有风险预算模型的基石。下一章我们会把这些公式写成Python代码,到时候你就知道——嗯,原来数学推导和工程实现之间,还隔着好几个坑呢。
公众号:蓝海资料掘金营,微信deep3321