跳转到内容

均值—方差与其失败

均值—方差优化在给定输入下是数学最优的:

max⁡w  μ⊤w−λ2w⊤Σw.\max_w \; \mu^\top w - \tfrac{\lambda}{2} w^\top \Sigma w.

但实践中的表现糟糕,根源只有一个:输入的估计误差。均值估计的误差远大于协方差(见均值与协方差的估计误差),而优化器把均值放在了输出里权重最大的位置——于是给出极端、不稳定的权重:多头集中在本期均值被高估的资产,权重月月剧变,换手成本把理论优势吃光。

修补思想
协方差收缩(Ledoit–Wolf)稳定 Σ\Sigma,治标
均值收缩 / 不用均值最小方差、风险平价,绕开 μ\mu
Black–Litterman以市场组合为先验,把"观点"做贝叶斯更新
约束与正则化权重上下限、L1L_1 换手惩罚、L2L_2 权重惩罚
交易成本入目标换手本身变成惩罚项,见凸优化速览

其中最有效的是最朴素的两个:约束与换手约束。

mv-constrained.py
import cvxpy as cp
import numpy as np
def mv_portfolio(mu: np.ndarray, Sigma: np.ndarray, w0: np.ndarray,
lam: float = 5.0, w_max: float = 0.15, tc: float = 0.002) -> np.ndarray:
"""带换手成本与权重上限的均值—方差:约束是稳定的来源"""
w = cp.Variable(len(mu))
trade = w - w0
obj = cp.Maximize(mu @ w - lam * cp.quad_form(w, cp.psd_wrap(Sigma))
- tc * cp.norm1(trade)) # L1 换手惩罚
cons = [cp.sum(w) == 1, w >= 0, w <= w_max]
cp.Problem(obj, cons).solve(solver=cp.CLARABEL)
return w.value

直接估均值不可靠,Black–Litterman 换了个思路:

  • 先验:市场组合权重反推的隐含均衡收益(市场已把所有公开信息定价);
  • 更新:研究者的观点("A 跑赢 B 2%")按置信度与均衡做贝叶斯融合。

结果:观点置信度低时权重靠近市场组合,置信度高时才偏离——输出对输入的敏感度被先验驯服。它没有解决估计误差,而是给了误差一个安全的默认值。

DeMiguel–Garlappi–Uppal (2009) 的著名发现:在多种数据集上,简单等权(1/N)的样本外夏普难以被复杂优化显著战胜。含义很残酷:均值—方差的理论优势,在估计误差与换手成本之后所剩无几。任何复杂组合构建方法,都必须先过等权这一关。

  • 默认带权重上限与 L1L_1 换手约束,优化器输出与上期持仓做比较;
  • 均值输入用 Black–Litterman 或收缩,不用原始样本均值;
  • 等权作为永久基准,季度对比。
  • 优化器是"误差放大器":均值估计误差被放大成极端权重
  • 加入换手约束能显著稳定权重
  • Black–Litterman 以市场组合为先验,观点为更新