halo 的技术博客

返回

上一篇 Ledoit-Wolf 的药方是”整体往结构化目标拉”:一个标量收缩强度 δ,全矩阵统一剂量。这一篇换一种更外科手术式的思路:协方差矩阵的病灶不是均匀分布的,它集中在特征值谱的特定区域——先用随机矩阵理论(RMT)画出”纯噪声特征值能活动的范围”,凡是待在范围里的特征值全部按噪声处理压平,越界的尖峰才当信号保留

先把结论放上来。N=100 只资产的因子结构市场、模拟最小方差组合的真实(样本外)年化波动率:

估计窗 T样本协方差MP 裁剪Ledoit-Wolf理论最优
126 天24.1%12.6%14.5%11.1%
252 天14.2%12.0%13.2%11.1%
504 天12.4%11.8%12.2%11.1%
1008 天11.7%11.7%11.7%11.1%

数据越稀缺,谱手术的优势越大:T=126(q=N/T=0.79)时 MP 裁剪比 LW 低了近 2 个百分点,比裸样本协方差低了 11.5 个百分点;T=1008 时三者已无差别。原因值得讲清楚。

Marchenko-Pastur 定律:纯噪声的特征值长什么样#

设 T 天、N 只资产的收益全部是独立标准正态(纯噪声、零相关),样本相关矩阵 SS 的特征值会怎么分布?直觉答案是”都挤在 1 附近”——毕竟真实相关矩阵是单位阵,所有真实特征值都等于 1。

直觉错了。当 N 和 T 同阶时(q=N/Tq = N/T 不趋于零),样本特征值会扩散成一个有确定形状的分布。Marchenko-Pastur(1967)定律给出精确刻画:特征值密度收敛到

ρ(λ)=(λ+λ)(λλ)2πqλ,λ±=(1±q)2\rho(\lambda) = \frac{\sqrt{(\lambda^+ - \lambda)(\lambda - \lambda^-)}}{2\pi q \lambda}, \qquad \lambda^\pm = (1 \pm \sqrt{q})^2

关键是那两个边界:纯噪声的特征值几乎全部落在 [λ,λ+][\lambda^-, \lambda^+]。q=0.25(N=100, T=400)时 λ+=2.25\lambda^+ = 2.25——真实特征值明明全是 1,最大的样本特征值却能冲到 2.25,纯粹是估计噪声吹出来的。

import numpy as np

N, T = 100, 400
q = N / T
X = np.random.default_rng(42).standard_normal((T, N))
S = X.T @ X / T
ev = np.linalg.eigvalsh(S)

lam_minus, lam_plus = (1 - q**0.5)**2, (1 + q**0.5)**2
print(f"MP 边界 [{lam_minus:.3f}, {lam_plus:.3f}]")   # [0.250, 2.250]
print(f"样本特征值范围 [{ev.min():.3f}, {ev.max():.3f}]")  # [0.292, 2.217]
python

模拟结果:100 个样本特征值全部落在 [0.292, 2.217],与理论边界 [0.25, 2.25] 严丝合缝。

纯噪声协方差的特征值谱与 Marchenko-Pastur 理论密度

这条定律给了我们一台噪声检测仪:如果市场数据的某个特征值超过 λ+\lambda^+,它不可能由纯噪声产生——那是真实相关结构(信号);如果待在边界之内,它和纯噪声在统计上不可区分——按噪声处理不冤枉它

真实结构下的谱:3 个尖峰 + 59% 的噪声体#

给市场装上因子结构(1 个市场因子 + 3 个板块因子 + 特质波动),N=100、T=252(q=0.40,λ+=2.66\lambda^+ = 2.66),样本相关矩阵的特征值谱立刻分成两个世界:

因子结构相关矩阵的特征值谱:3 个尖峰越过 λ+,其余为噪声体

  • 3 个尖峰越过 λ+\lambda^+:最大特征值 33.2(市场模式,一荣俱荣一损俱损),后面两个是板块模式。这些是信号。
  • 其余 97 个特征值挤在 MP 边界内,构成”噪声体”(bulk)——它们合计占了矩阵迹的 59%

这就是高维协方差估计的残酷现实:矩阵里一大半的”信息”其实是噪声,而组合优化器最爱的恰恰是噪声体里的小特征值——最小方差优化会往最小特征值方向重仓(那里”看起来”风险最低),而小特征值恰恰被噪声系统性压低,样本内的低风险是幻觉。

裁剪手术:噪声体压平,尖峰保留#

RMT 去噪(Laloux et al. 1999 起的标准做法)只有三步:

  1. 特征分解样本相关矩阵 C=VΛVC = V \Lambda V^\top
  2. 凡是 λi<λ+\lambda_i < \lambda^+ 的特征值,全部替换成它们的平均值(保持迹不变,即总方差守恒);
  3. 用修剪后的谱重构矩阵,再把对角线归一回 1。
def mp_clip(S, T):
    """Marchenko-Pastur 裁剪去噪(相关矩阵口径)"""
    N = S.shape[0]
    d = np.sqrt(np.diag(S))
    C = S / np.outer(d, d)                    # 转相关矩阵
    w, V = np.linalg.eigh(C)                  # 特征分解(升序)
    lam_plus = (1 + np.sqrt(N / T))**2
    noise = w < lam_plus
    w_clip = w.copy()
    w_clip[noise] = w[noise].mean()           # 噪声体压平,保迹
    C_clip = V @ np.diag(w_clip) @ V.T
    dd = np.sqrt(np.diag(C_clip))
    C_clip = C_clip / np.outer(dd, dd)        # 对角线归一
    return C_clip * np.outer(d, d)            # 转回协方差
python

MP 裁剪前后的特征值谱:尖峰原样保留,噪声体压成一条平线

注意它和 Ledoit-Wolf 的本质区别:LW 把所有特征值都往中心拉(尖峰也被削),MP 裁剪只动噪声体、对尖峰一根手指都不碰。市场因子那个 λ=33 的大特征值是真实信号,LW 会把它往 1 的方向收缩一截(引入偏差),MP 裁剪原样保留。反过来,在噪声体内部 MP 下手比 LW 狠得多——直接全部压平,LW 只是按比例缩。

最小方差组合实测:谱手术在数据稀缺时更锋利#

30 次独立模拟取平均,四条曲线的故事线很清晰:

最小方差组合 OOS 波动率对比:MP 裁剪 vs Ledoit-Wolf vs 样本协方差

T=126(q=0.79,接近奇异):样本协方差的组合真实波动率 24.1%——是理论最优(11.1%)的两倍还多,优化器在噪声特征值上疯狂加杠杆。MP 裁剪 12.6%,LW 14.5%。裁剪赢在它对噪声体的处理是”格杀勿论”,而 LW 的统一收缩强度被尖峰方向拖累——为了不过度扭曲市场因子,它对噪声体下手不够重。

T=252~504:两者差距收窄到 1 个百分点上下,都显著优于裸样本。

T=1008(q=0.10):三者全部收敛到 11.7%。数据充裕时噪声本来就小,怎么处理都行。

这个对比给出清晰的选型准则:q > 0.3(资产数超过样本长度三分之一)时优先 MP 裁剪;q < 0.1 时随便选;中间地带两个都试,或者直接上非线性收缩(Ledoit-Wolf 2017 的 NLS 本质上是把 MP 思想做成了每个特征值一个收缩量的连续版本)。

工程细节与陷阱#

第一,裁剪要在相关矩阵口径做,不是协方差口径。MP 定律假设单位方差,直接对协方差矩阵套 λ±\lambda^\pm 公式是错的——高波动资产的方差会被当成”大特征值信号”。先标准化成相关矩阵,裁剪完再把波动率乘回去。

第二,λ⁺ 的口径其实可以更讲究。教科书公式假设噪声方差 σ²=1,但市场数据里尖峰吃掉了一部分迹,噪声体的有效方差 σ² < 1,严格做法是用 σ2=1spikesλi/N\sigma^2 = 1 - \sum_{\text{spikes}} \lambda_i / N 修正边界(λ⁺ 会变小,尖峰判定更宽松),或者直接对噪声体拟合 MP 分布求 σ²。本文用 σ²=1 的保守口径,代价是可能把弱信号误杀进噪声体——对最小方差组合影响不大,对追逐弱因子的策略要小心。

第三,压平不是唯一选择。把噪声特征值换成平均值(保迹)是最常用的,也有换成 0(激进降维)或线性插值的变体。保迹版本最稳,因为总方差是谱里最可靠的信息。

第四,q ≥ 1 时样本协方差奇异(T < N),有 N - T 个特征值精确为零。MP 裁剪依然可用(把零特征值也并进噪声体压平),这正是它比”求逆前先祈祷”的裸样本法体面的地方。

第五,边界不是铁幕。有限样本下最大的噪声特征值围绕 λ⁺ 有涨落(Tracy-Widom 分布刻画),紧贴边界的特征值属于灰色地带。实务上常把判定线抬高到 λ⁺ 的 1.05~1.1 倍,宁可错杀弱信号也不放进噪声。

诚实边界#

第一,模拟里因子结构是干净的,真实市场的尖峰没这么清晰。板块因子的特征值可能刚好骑在 λ⁺ 上,宏观 regime 切换会让”信号个数”随时间漂移。滚动窗口里今天判 3 个尖峰、明天判 5 个,组合权重会跳——生产系统需要对尖峰个数做平滑或滞后处理。

第二,MP 定律假设收益 iid。真实收益有波动聚集,GARCH 效应会让噪声体比理论 MP 分布更宽(有效样本量 < T),λ⁺ 被低估、部分噪声被误判为信号。补救是先对收益做波动率标准化(除以 EWMA 波动率)再进 RMT 流水线。

第三,裁剪只救协方差,不救期望收益。最小方差组合绕开了均值估计所以效果显著;均值-方差优化里期望收益的估计误差比协方差恶劣一个量级,那是另一味药——下一篇 Bayes-Stein 收缩的主场。

本文与 Ledoit-Wolf 收缩早前的 RMT 去噪实践 构成协方差估计三部曲:LW 管”拉多少”,MP 管”剪哪里”,两者在非线性收缩里合流。

随机矩阵理论去噪:用 Marchenko-Pastur 边界剪掉协方差里的噪声特征值
https://blog.halo26812.eu.org/blog/random-matrix-marchenko-pastur
Author halo
Published at 2026年7月28日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨