均值与协方差的估计误差
两类参数,两种命运
Section titled “两类参数,两种命运”给定 个观测,两个核心参数的估计精度天差地别:
均值估计的误差取决于绝对波动水平 ——而年化波动 20% 的资产,10 年日频数据的均值标准误仍有每年约 6%。方差估计的相对误差则只按 收缩,与波动水平无关。结论:风险模型远比收益预测可靠。
Merton (1980) 指出更狠的一点:延长样本几乎无助于均值估计——因为收益过程本身非平稳,历史均值不是未来均值的可靠估计;真正有用的是更高的信噪比,而这在金融里不存在。
协方差的病态问题
Section titled “协方差的病态问题”当资产数 接近样本长度 时,样本协方差矩阵 病态甚至不可逆:特征值分布极度散开,求逆后误差被放大。Ledoit–Wolf 收缩用结构化目标(如单位方差对角阵、常数相关矩阵)与样本估计做凸组合:
由数据自动确定。这一步是任何 较大的组合优化(见均值—方差与其失败)的前置工序。
估计误差最大化
Section titled “估计误差最大化”均值—方差优化器会系统性地偏爱被高估的资产、惩罚被低估的资产:权重与估计误差正相关。这就是"优化器是误差放大器"的数学根源——它把输入里最不可靠的部分(均值)放进了输出里权重最大的地方。
import numpy as np
def ledoit_wolf_delta(X: np.ndarray) -> float: """X: T×N 收益矩阵,返回收缩强度 δ(常数相关目标)""" T, N = X.shape Xc = X - X.mean(axis=0) S = Xc.T @ Xc / T # 样本相关系数的渐近方差 → δ r_bar = (S / np.sqrt(np.outer(np.diag(S), np.diag(S)))).sum() / (N * N - N) * N var_r = ((S / np.sqrt(np.outer(np.diag(S), np.diag(S)))) - r_bar) ** 2 var_r = var_r.sum() / (N * N - N) * N return min(1.0, var_r / (T * var_r + (r_bar * r_bar)))实践中不必手写:sklearn.covariance.LedoitWolf、PyPortfolioOpt 都有现成实现。
量化中的用法
Section titled “量化中的用法”- 能不估均值就不估:最小方差、风险平价(见风险平价与等风险贡献)只依赖协方差;
- 必须估均值时,用贝叶斯收缩或 Black–Litterman 把先验拉向均衡;
- 报告任何优化结果时,同时报告输入扰动 ±10% 后的权重变化——权重剧变本身就是估计误差的暴露。
- Merton (1980):延长样本无助于均值估计,只有更高的信噪比才有用
- 协方差矩阵在 接近 时病态,需收缩(Ledoit–Wolf)
- 估计误差最大化:优化器会偏爱被高估的资产