一、风险预算入门:什么是风险预算?为什么它比传统的等权重或均值-方差模型更实用?核心思想与数学直觉

1.1 从一个让我头疼的项目说起

我记得刚入行那会儿,接手了一个多资产组合的配置任务。老板说:“你就按等权重来吧,简单。” 我照做了。结果呢?股票一跌,整个组合跟着跳水。债券那点收益根本填不上坑。

后来我改用均值-方差模型,觉得这下总该靠谱了吧?嗯,模型跑出来让我配了 80% 的国债。老板看了一眼说:“你这组合收益还不如存银行。” 我哑口无言。

这两个经历让我意识到一个问题:等权重只看资金分配,不管风险;均值-方差太敏感,稍微改点参数,结果就天差地别。 说白了,它们都没解决一个核心问题——你到底想让每个资产承担多少风险?

这就是风险预算要干的事。

1.2 风险预算是什么?一句话讲清楚

风险预算,英文叫 Risk Budgeting。它的核心思想很简单:你不是在分配钱,你是在分配风险。

举个例子。你有 100 万,等权重的话,股票和债券各 50 万。但股票的波动率可能是债券的 5 倍。所以实际上,股票贡献了 90% 以上的组合风险。债券那 50 万基本就是个摆设。

风险预算的做法是反过来:先定好每个资产要承担多少风险,再反推该投多少钱。

核心公式(直觉版):

目标风险贡献 = 总风险 × 风险预算比例

实际风险贡献 = 权重 × 波动率 × 相关性调整

让两者相等,解出权重。

你想想看,这样一来,每个资产对组合波动的“责任”是事先约定好的。股票波动大?那就少配点钱。债券波动小?那就多配点。最终,每个资产的风险贡献是相等的——这就是著名的风险平价(Risk Parity)策略。

1.3 为什么它比等权重和均值-方差更实用?

我这些年做下来,觉得风险预算最大的优势有三个:

  • 稳健性:等权重不考虑风险差异,均值-方差对输入参数极度敏感。风险预算只依赖协方差矩阵,而且对估计误差的容忍度更高。我在项目中遇到过,用过去 3 年的数据估算协方差,风险预算出来的权重,回测表现比均值-方差稳定得多。
  • 可解释性:你可以跟老板说:“我们给股票分配了 20% 的风险预算,给债券分配了 80%。” 老板一听就懂。但你说“均值-方差最优权重是股票 15%、债券 85%”,他可能会问:“为什么是 15% 不是 20%?” 你很难解释清楚。
  • 分散化效果更好:风险预算天然会分散风险到各个资产上。不会出现某个资产“隐形”承担了绝大部分风险的情况。
对比维度 等权重 均值-方差 风险预算
分配对象 资金 资金 风险
对参数敏感度 极高 中等
分散化效果 差(风险集中) 一般
可解释性
实际落地难度

1.4 核心思想与数学直觉

风险预算的数学基础其实不复杂。我尽量用白话讲。

假设组合由 n 个资产构成。组合的总风险(用方差表示)是:

σ²_p = w' Σ w

其中 w 是权重向量,Σ 是协方差矩阵。

每个资产对总风险的边际贡献(Marginal Risk Contribution, MRC)是:

MRC_i = ∂σ_p / ∂w_i = (Σ w)_i / σ_p

这个公式的意思是:如果你把资产 i 的权重增加一点点,组合风险会变化多少。

然后,资产 i 的总风险贡献(Total Risk Contribution, TRC)就是:

TRC_i = w_i × MRC_i

所有资产的 TRC 加起来,正好等于组合总风险 σ_p。这个性质很重要。

风险预算的目标就是:让每个资产的 TRC 等于你事先设定的预算比例 b_i。

TRC_i = b_i × σ_p

其中 b_i 是风险预算比例,且 ∑b_i = 1。

当 b_i = 1/n 时,就是风险平价。每个资产对组合风险的贡献完全相等。

一个小技巧: 我习惯用风险平价作为基准。如果某个资产我看好,就给它多分配一点风险预算(比如 b_i = 0.3 而不是 0.2)。这样既保留了风险预算的框架,又加入了主观判断。

1.5 一张图看懂风险预算的核心逻辑

下面这张 SVG 图,是我自己画的知识结构图。它把风险预算的整个流程串起来了。

风险预算核心逻辑流程图 输入:协方差矩阵 Σ 设定风险预算比例 b_i 求解:TRC_i = w_i × (Σ w)_i / σ_p = b_i × σ_p 输出:最优权重 w* 迭代优化 核心思想:分配风险,而非分配资金 当 b_i = 1/n 时,即为风险平价(Risk Parity)

1.6 避坑指南:我曾经踩过的三个坑

做风险预算看起来简单,但落地时有不少细节。我把自己踩过的坑分享给你:

  • 坑一:协方差矩阵估计不准。 我曾经直接用样本协方差,结果遇到极端行情,矩阵几乎奇异,解出来的权重全是负的。后来我改用收缩估计(Shrinkage),情况好多了。
  • 坑二:忽略了交易成本。 风险预算的权重对波动率变化很敏感。市场一波动,权重就需要调整。如果不考虑交易成本,频繁调仓会吃掉所有收益。我建议设置一个调仓阈值,比如权重偏离超过 10% 才调。
  • 坑三:风险预算比例设得太极端。 比如给某个资产设 90% 的风险预算。这其实违背了分散化的初衷。我个人习惯,单个资产的风险预算不超过 30%。

重要提醒: 风险预算不是万能药。它假设资产间的相关性是稳定的。如果遇到相关性突变(比如 2008 年金融危机,所有资产一起跌),风险预算也会失效。这时候需要结合宏观判断做调整。

1.7 一个简单的 Python 示例

下面是我常用的风险平价求解代码。它用到了 scipy 的优化器。

import numpy as np
from scipy.optimize import minimize

def risk_parity_weights(cov):
    """
    计算风险平价权重
    cov: 协方差矩阵 (n x n)
    返回: 权重向量
    """
    n = cov.shape[0]
    
    def risk_contribution(w):
        sigma_p = np.sqrt(w @ cov @ w)
        mrc = cov @ w / sigma_p
        trc = w * mrc
        return trc
    
    def objective(w):
        trc = risk_contribution(w)
        target = np.ones(n) * np.mean(trc)
        return np.sum((trc - target) ** 2)
    
    constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
    bounds = [(0, 1) for _ in range(n)]
    
    result = minimize(objective, 
                      x0=np.ones(n)/n,
                      bounds=bounds,
                      constraints=constraints,
                      method='SLSQP')
    return result.x

# 示例:3个资产
cov = np.array([[0.04, 0.01, 0.005],
                [0.01, 0.09, 0.01],
                [0.005, 0.01, 0.16]])
weights = risk_parity_weights(cov)
print("风险平价权重:", weights)
print("风险贡献:", weights * (cov @ weights) / np.sqrt(weights @ cov @ weights))

这段代码我用了很多年。它简单、稳定,适合作为基准。你可以在它的基础上,加入自定义的风险预算比例。

1.8 小结

风险预算的核心,就是把“分钱”的思路,换成“分风险”。它比等权重更科学,比均值-方差更稳健。虽然计算上稍微复杂一点,但换来的是更好的分散化和可解释性。

我个人觉得,这是量化投资里最实用的工具之一。你想想看,一个方法能让你的组合在大多数市场环境下都表现平稳,而且还能跟老板讲清楚逻辑,这难道不是每个量化人都想要的吗?

下一章,我会深入讲风险预算的数学推导和求解算法。到时候会涉及一些矩阵微积分,但我会尽量用白话讲明白。


专注资料整理