跳转到内容

均值与协方差的估计误差

给定 TT 个观测,两个核心参数的估计精度天差地别:

se(rˉ)=σT,se(σ^)σ≈2T.\mathrm{se}(\bar r) = \frac{\sigma}{\sqrt{T}}, \qquad \frac{\mathrm{se}(\hat\sigma)}{\sigma} \approx \sqrt{\frac{2}{T}}.

均值估计的误差取决于绝对波动水平 σ\sigma——而年化波动 20% 的资产,10 年日频数据的均值标准误仍有每年约 6%。方差估计的相对误差则只按 2/T\sqrt{2/T} 收缩,与波动水平无关。结论:风险模型远比收益预测可靠。

Merton (1980) 指出更狠的一点:延长样本几乎无助于均值估计——因为收益过程本身非平稳,历史均值不是未来均值的可靠估计;真正有用的是更高的信噪比,而这在金融里不存在。

当资产数 NN 接近样本长度 TT 时,样本协方差矩阵 Σ^\hat\Sigma 病态甚至不可逆:特征值分布极度散开,求逆后误差被放大。Ledoit–Wolf 收缩用结构化目标(如单位方差对角阵、常数相关矩阵)与样本估计做凸组合:

Σshrunk=δ F+(1−δ) Σ^,δ∈[0,1],\Sigma_{\text{shrunk}} = \delta\, F + (1-\delta)\, \hat\Sigma, \qquad \delta \in [0,1],

δ\delta 由数据自动确定。这一步是任何 NN 较大的组合优化(见均值—方差与其失败)的前置工序。

均值—方差优化器会系统性地偏爱被高估的资产、惩罚被低估的资产:权重与估计误差正相关。这就是"优化器是误差放大器"的数学根源——它把输入里最不可靠的部分(均值)放进了输出里权重最大的地方。

shrinkage.py
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 都有现成实现。

  • 能不估均值就不估:最小方差、风险平价(见风险平价与等风险贡献)只依赖协方差;
  • 必须估均值时,用贝叶斯收缩或 Black–Litterman 把先验拉向均衡;
  • 报告任何优化结果时,同时报告输入扰动 ±10% 后的权重变化——权重剧变本身就是估计误差的暴露。
  • Merton (1980):延长样本无助于均值估计,只有更高的信噪比才有用
  • 协方差矩阵在 NN 接近 TT 时病态,需收缩(Ledoit–Wolf)
  • 估计误差最大化:优化器会偏爱被高估的资产