如果你只记一个”最安全”的组合,教科书会告诉你:最小方差组合(Minimum Variance Portfolio, MVP)——在给定资产池里,把权重调到让组合波动率最小的那一个。它不预测收益,只管风险,看似最”客观”、最不依赖主观判断。
但有个反直觉的真相:最小方差组合,恰恰是对估计误差最敏感的优化。 它的解是 w = Σ⁻¹1 / (1'Σ⁻¹1)——一个求逆。而当你把有噪声的样本协方差 S 直接求逆时,每一个估计误差都被 S⁻¹ 放大,尤其在那些”伪小特征值”方向上,噪声被当成信号、权重被推到极端。结果:一个在样本内方差最小得漂亮的组合,样本外可能比随机组合还危险。
结论先放这里:在 25 个资产、只用 30 个交易日数据估计协方差时,朴素样本最小方差组合的样本外真实方差,是”用真实协方差”理论下界的近 7 倍;而把估计误差当风险来管理的 Ledoit-Wolf 收缩与岭正则,能把它压回最优附近(约 1.3 倍)。 最小方差组合没有错,错的是”拿噪声当真相去求逆”。
一、MVP 的解,为什么对估计误差过敏#
给定协方差 Σ,无约束最小方差组合的闭式解是:
import numpy as np
def mvp(Sigma):
"""w = Sigma^-1 1 / (1' Sigma^-1 1)。用伪逆保数值稳定。"""
ones = np.ones(Sigma.shape[0])
w = np.linalg.pinv(Sigma) @ ones
return w / w.sum()python问题在于:实盘里你手里只有 S(从 T 条历史算出的样本协方差),不是 Σ。S 和 Σ 之间的差距,会在求逆时被剧烈放大。直观理解:
Σ若有一个很小的特征值λ_min,对应的特征方向在Σ⁻¹里就被放大成1/λ_min倍。- 样本协方差
S在样本量T不够大时,会凭空造出一些伪小特征值(本该是正的,被噪声压到接近 0)。 - 于是
S⁻¹在这些伪方向上输出天文数字的权重——组合把全部筹码压到一两个资产上,样本内方差确实最小,但那只是因为噪声被拟合了。样本外,这些极端权重撞上真实但不同的协方差,方差直接爆炸。
这正是”把估计误差当风险”这句话的由来:误差不只在 S 里,更在 S⁻¹ 里被杠杆化了。
二、Python:从零构造实验并对比四种求解器#
我们固定一个”真实”协方差 Σ_true(因子模型 Σ = B B' + D,其中 B 是因子载荷、D 是异质方差),然后每次试验只给它 T 条历史观测,让求解器在有噪声的样本上工作。评价指标是样本外真实方差 w' Σ_true w——越小越好。
rng = np.random.default_rng(20240713)
N = 25 # 25 个资产
B = rng.normal(0, 1, size=(N, 3))
D = np.diag(rng.uniform(0.5, 1.5, N))
Sigma_true = B @ B.T + D # 固定不随试验变的"真实"协方差
def oos_var(w):
return float(w @ Sigma_true @ w) # 样本外真实方差(越小越好)
def trial(T, seed):
rng = np.random.default_rng(seed)
X = rng.multivariate_normal(np.zeros(N), Sigma_true, size=T) # 只抽 T 条历史
S = np.cov(X, rowvar=False) # 有噪声的样本协方差
# (1) 朴素样本最小方差: 直接拿 S 求逆
w_sample = mvp(S)
# (4) Oracle: 用真实协方差(不可达下界, 作参照)
w_oracle = mvp(Sigma_true)
# (2) Ledoit-Wolf 风格收缩: S -> 常相关性目标 F, 强度 δ 用 5 折 CV 按样本外方差最小化来定
# (3) 岭正则: 用 (S + λI) 求逆, λ 同样用 CV 来定
...
return w_sample, w_lw, w_ridge, w_oracle, ...python四种求解器的核心区别,就在”怎么对待 S”:
- (1) 样本最小方差:
S直接求逆。误差被杠杆化得最狠。 - (4) Oracle:用
Σ_true求逆。理论下界,实盘不可达,只作参照——它告诉我们”最优本该多好”。 - (2) Ledoit-Wolf 收缩:把
S往一个更稳健的目标矩阵F(这里用常相关性目标:对角不变、非对角用平均相关重构)拉:Σ_LW = δ·F + (1−δ)·S。δ小=几乎不收缩(回到样本法),δ大=几乎全用目标(放弃数据)。收缩把那些伪小特征值”垫”回合理水平,等于主动承认”S 有噪声,我少信它一点”。 - (3) 岭正则最小方差:直接往
S加λI再求逆:w ∝ (S+λI)⁻¹1。λ大,λI主导 →S+λI趋近λI,权重趋近等权;λ小 → 回到样本法。这等于显式惩罚极端权重——把”权重太大”本身当成一种风险。
关键的设计选择:δ 和 λ 都不拍脑袋,而是用 5 折交叉验证,去选”让样本外方差最小”的那个值。下面三张图,就是用这套实验跑出来的真相。
三、结果一:朴素样本法,在小样本下方差爆炸#

把训练样本量 T 从 30 拉到 500,看四种方法的平均样本外真实方差:
| 训练样本 T | 30 | 60 | 120 | 250 | 500 |
|---|---|---|---|---|---|
| 样本最小方差 | 0.249 | 0.062 | 0.046 | 0.040 | 0.038 |
| LW 收缩 | 0.052 | 0.046 | 0.042 | 0.040 | 0.038 |
| 岭正则 | 0.046 | 0.042 | 0.040 | 0.039 | 0.038 |
| Oracle(下界) | 0.036 | 0.036 | 0.036 | 0.036 | 0.036 |
这张表是整个文章的灵魂。在 T=30(25 个资产只给 30 天数据,T 与 N 几乎可比)时:
- 朴素样本最小方差的样本外方差高达 0.249——是 Oracle 下界 0.036 的近 7 倍。你以为自己在做”最小方差”,实盘承担的风险却是最优的 7 倍。
- 而 Ledoit-Wolf 收缩(0.052)和岭正则(0.046)硬生生把它压回 Oracle 附近(分别只多 44% 和 28%)。
再看右端 T=500:四种方法全部收敛到 0.036——当数据足够多,样本协方差够准,朴素法自然就好了。所以”样本法有没有错”取决于 T/N 这个比:数据相对维度越稀缺,估计误差越致命,朴素求逆越是在拿噪声当真相。
四、结果二:即便在”中等”样本,样本法仍显著更差#

把 T 固定在更”像样”的 120 个交易日(约半年日频数据,对 25 资产而言仍是 T/N≈4.8 的偏薄样本),跑 500 次蒙特卡洛,看样本外方差的分布:
- 样本最小方差均值 0.0456,比 Oracle(0.0363)高出 25.5%;
- Ledoit-Wolf 收缩 0.0424(+16.8%);
- 岭正则 0.0400(仅 +10.2%)。
也就是说,即便在”半年数据”这种看似合理的设定里,直接 S 求逆仍让你多承担约四分之一的真实风险;而把估计误差当成风险来管(收缩或正则),能把这笔”隐形税”砍掉一大半。箱线图里样本法的整条分布都明显右移(方差更大、更不稳定)。
五、结果三:两种”把误差当风险”的具体手法#
手法 A:协方差收缩(Ledoit-Wolf 思想)。 不硬信 S,把它朝一个结构化的目标 F 拉一点。下图用单次试验画出”收缩强度 δ vs 样本外方差”的曲线:

它是条 U 形:δ=0(纯样本法)在最右端方差最高;δ=1(完全放弃数据、只用目标矩阵)也高(欠拟合,把真结构也扔了);中间某个 δ*≈0.15 处方差最低。收缩是门艺术——收得太少(过拟合噪声)与收得太多(欠拟合结构)都糟,交叉验证替你选的那个点,恰好把两者平衡。
手法 B:岭正则(显式惩罚极端权重)。 往 S 加 λI 再求逆,等价于在”最小化 w'Sw”之外,额外惩罚 λ·w'w(权重平方和)。λ 越大,权重越被往等权方向拽,单个资产的极端暴露被压住。上表的岭正则列,在每一个 T 上都略优于 LW,正是因为它直接从”权重不能太极端”这个角度切入。
六、权重长什么样:样本法把筹码压到极少数资产#

上图是一次 T=30 试验里,把三种方法的 |权重| 从大到小排好后的曲线。样本最小方差(红)前几个资产权重飙升、其余几乎归零——它把所有赌注压在少数名字上;而收缩(蓝)与岭(绿)的曲线平坦得多,权重更均衡。平均来看,样本法的最大单资产权重 |w| 约 0.10,岭正则约 0.06;集中度(Herfindahl 指数)样本法 0.05 vs 等权基准 0.04——样本法确实更集中,但真正的代价不在”集中”这个表象,而在上两节那种样本外方差的爆炸。很多时候,极端权重只是估计误差被杠杆化后的症状,方差暴涨才是它酿成的苦果。
七、五类真实陷阱#
- 用同一份数据既估 Σ 又测表现:本文的”样本外方差”是用独立的真实 Σ 算的,已经避开了这个坑。实盘若用同一段历史既估协方差又回测组合表现,会把样本内拟合也当样本外,严重低估风险。务必留出真正独立的验证段。
- 无视无约束 MVP 会卖空:
w = Σ⁻¹1在一般Σ下允许负权重(做空某些资产)。本文刻意用无约束形式,因为估计误差的故事在最干净地展现;但实盘常要求纯多(long-only),那要解带约束的二次规划,边界会把极端权重砍掉——long-only 能缓和爆炸,却也牺牲了部分分散,且估计误差问题并未消失,只是被夹紧。 - 误把”样本内方差最小”当目标达成:MVP 的目标是”样本外方差最小”。用
S求逆只在样本内最小;本文图三表一已经显示,样本内最优 ≠ 样本外最优,二者之间的鸿沟就叫估计误差。 - 收缩目标的错配:Ledoit-Wolf 的
F不一定非得是常相关性矩阵。若你的资产有明显行业/因子结构,用单指数(single-index)或因子模型目标往往更贴;目标选错,收缩会把真结构也一并抹平。 T/N幻觉:很多人觉得”我有 3 年日线(750 天),估 25 个资产的协方差足够了”。但 MVP 求逆对最弱的那些方差方向最敏感,而那恰恰是最需要大量数据才能估准的部分——T看似大,在”最该估准的方向”上依然稀薄。
结论#
最小方差组合 w = Σ⁻¹1 没有错,错的是”拿有噪声的样本协方差直接求逆”这一步——求逆会把每一个估计误差杠杆化,在伪小特征值方向上造出极端权重,最终让样本外方差爆炸。我们的实验给这个数字定了量级:25 资产、30 日样本下,朴素样本法样本外方差是理论下界的近 7 倍,而把估计误差当成风险来管理的 Ledoit-Wolf 收缩与岭正则,能把它压回最优附近。记住三条:(1) 看 T/N 而非绝对样本量——维度相对样本越稀缺越危险;(2) 优先收缩或正则,且用交叉验证替你选强度;(3) 永远用独立数据验证样本外表现,别把样本内拟合当成绩单。最小方差的精髓,从来不是”最小”,而是”诚实地对待你不知道的那部分”。