因子结构协方差 POET:用主成分加稀疏残差拼出高维协方差
Fan-Liao-Mincheva(2013)的 POET 把高维协方差拆成『低秩因子部分 + 稀疏残差部分』:PCA 提前 K 个主成分吃掉公共风险,残差协方差做自适应软阈值恢复块结构。N=100/T=252(c=0.4)实测最反直觉的结论:协方差本身的 Frobenius 误差各方法几乎分不出胜负(样本 0.45 vs POET 0.47),POET 的主战场在逆矩阵——精度矩阵谱范数误差样本协方差 197 vs POET 22,差 9 倍,T=126 时更是 2144 vs 24 的灾难现场;GMV 组合真实波动率 25.2% vs 13.8%。残差软阈值把非零占比从 91% 压回 13%(真实 9%),行业块结构肉眼可见地恢复。两个工程陷阱:特征值比值法选 K 会被市场因子霸屏(K̂=1),需排除首峰看次峰;纯因子模型(残差取对角)短窗口和 POET 打平但长窗口被反超——它到 T=1008 还带着 0.39 的结构偏差不收敛。诚实边界:残差稀疏性是假设不是事实;阈值常数需交叉验证;K 选错在 Frobenius 口径几乎无感但精度矩阵口径放大。
协方差专题写到现在,所有方法都在同一个矩阵上死磕:收缩往目标拉(Ledoit-Wolf)、去噪剪特征值(Marchenko-Pastur)、稳健化换度量(Gerber 统计量)。这一篇换一个哲学:别把协方差当一个整体估计——把它拆成两块,分而治之。
POET(Principal Orthogonal complEment Thresholding,Fan, Liao & Mincheva 2013, JRSS-B)的拆法:
低秩部分用 PCA 硬提——市场、规模、价值这些公共因子制造了收益里绝大部分的共动;剩下的残差协方差假设稀疏——控制住公共因子后,两只随机股票之间应该没什么直接联系,有联系的只是少数同行业、同供应链的对子。稀疏的部分用阈值法处理,这套手艺我们在 Graphical Lasso 那篇见过近亲。
一句话:对角有结构的地方用低秩吃掉,剩下的当稀疏矩阵治。
一、为什么高维必须拆:N=100 时样本协方差的死法#
实验市场:N=100 只股票、10 个行业、3 个真实因子(市场 + 规模 + 价值),残差协方差是块对角的——行业内残差相关 0.25,跨行业为零。T=252,浓度比 ——这是货真价实的高维场景,不是 N=20 的玩具。
样本协方差在这里有 5050 个自由参数要从 25200 个观测里估,每个参数摊不到 5 个有效观测。看特征值谱:

左图:3 个因子特征值(尖峰)远离本体,与随机矩阵噪声带清晰分离——这是”尖峰协方差模型”(spiked covariance)的标准形状,也是 POET 能工作的结构前提。右图是特征值比值法选 K 的现场,注意一个实操陷阱:全局最大比值出现在 k=1(市场因子的特征值比第二名大太多, 霸屏),直接取 argmax 会选 K̂=1 漏掉两个弱因子。正确姿势是排除首峰后看次峰(k=3 处),或用 Bai-Ng 信息准则交叉验证。市场因子霸屏是股票数据的普遍现象,任何”取最大比值”的教科书伪代码在实盘数据上都要打这个补丁。
二、POET 两步走:PCA 提取 + 残差软阈值#
def poet(X, K, tau_mult=1.0):
T = X.shape[0]
Xc = X - X.mean(axis=0)
S = Xc.T @ Xc / T
w, V = np.linalg.eigh(S)
w, V = w[::-1], V[:, ::-1]
# 第一步:前 K 个主成分构成低秩部分
Lam = V[:, :K] * np.sqrt(np.maximum(w[:K], 0))
S_lowrank = Lam @ Lam.T
R = S - S_lowrank # 主正交补:残差协方差
# 第二步:自适应软阈值 tau_ij ∝ sqrt(log N / T)
dR = np.diag(R)
tau = tau_mult * np.sqrt(np.outer(dR, dR) * np.log(N) / T)
R_th = np.sign(R) * np.maximum(np.abs(R) - tau, 0)
np.fill_diagonal(R_th, dR) # 对角线不动
return S_lowrank + R_thpython第二步是 POET 名字的来源(主正交补阈值)。阈值率 来自高维统计的标准结论:稀疏矩阵中噪声元素的最大幅度以这个速率集中,超过它的才可信。“自适应”指阈值随元素自身的方差缩放(),高波动股票对的残差协方差天然抖得凶,用统一阈值会误杀低波动对、放过高波动对。
阈值前后的残差相关矩阵长这样:

左:真实残差相关,干净的块对角(非零占比 9.1%)。中:PCA 残差的原始估计——块结构还在,但整个矩阵弥漫着采样噪声,非零占比 91.1%,噪声元素和信号元素的幅度犬牙交错。右:软阈值之后,非零占比压回 12.8%,行业块肉眼可见地浮出来。这一步和 Graphical Lasso 做的事同源——都是用稀疏性先验换取高维下的估计精度,区别是 GLasso 在精度矩阵上做 L1 优化(迭代、慢、有似然解释),POET 在协方差上做逐元素阈值(一步、快、纯非参数)。
三、最反直觉的实测:Frobenius 口径下各方法打平#
跑 30 次蒙特卡洛,四个 T 档位,比较五种估计器与真实协方差的距离。先看所有人都会先看的 Frobenius 误差:
| T | 样本协方差 | 纯因子(K=3,残差取对角) | POET (K=3) | POET (K=1) | POET (K=8) |
|---|---|---|---|---|---|
| 126 | 0.68 | 0.68 | 0.66 | 0.63 | 0.68 |
| 252 | 0.45 | 0.50 | 0.47 | 0.44 | 0.47 |
| 504 | 0.34 | 0.44 | 0.38 | 0.36 | 0.37 |
| 1008 | 0.25 | 0.39 | 0.30 | 0.29 | 0.29 |
看到这张表的第一反应应该是:这也叫改进? 样本协方差在 T≥252 后反而是最好的,POET 的 K 选 1、3、8 几乎没差别,唯一明确掉队的是纯因子模型——它到 T=1008 还扛着 0.39 的误差不动,因为”残差无相关”的假设错了,行业内 0.25 的残差相关是它永远学不会的结构性偏差(和 CCM 那篇的偏差下限一个道理)。
但 Frobenius 距离由最大的那些元素主导,而协方差最大的元素是市场因子贡献的——所有方法都能估个大概。组合优化根本不消费 ,它消费 。 换精度矩阵口径(谱范数)再看同一批估计:

| T | 样本协方差 | 纯因子 | POET (K=3) |
|---|---|---|---|
| 126 | 2143.8 | 26.1 | 24.2 |
| 252 | 197.0 | 25.1 | 22.1 |
| 504 | 73.0 | 23.3 | 19.1 |
| 1008 | 38.3 | 22.2 | 17.3 |
灾难现场。T=126 时(c=0.79)样本协方差接近奇异,最小特征值趴在零附近,求逆把它放大成 2144 的误差——比 POET 差 89 倍。T=252 也还差 9 倍。而 POET 的逆矩阵天生良性:低秩 + 稀疏结构可以用 Sherman-Morrison-Woodbury 公式解析求逆,条件数被因子结构托住。
这是本文最想传递的一课:评估协方差估计器,Frobenius 距离是个误导性极强的指标。你的优化器消费的是逆矩阵,就用逆矩阵口径评估。 同一批估计,两个口径给出完全相反的排名。
四、GMV 判决#
老规矩,全局最小方差组合、真实协方差算实现波动率、30 次蒙特卡洛:

| T | 样本协方差 | 纯因子(残差对角) | POET (K=3) | 真实协方差 |
|---|---|---|---|---|
| 126 | 25.21% | 14.13% | 13.75% | 11.32% |
| 252 | 14.44% | 13.20% | 12.77% | 11.32% |
| 504 | 12.65% | 12.47% | 12.07% | 11.32% |
| 1008 | 11.91% | 12.15% | 11.75% | 11.32% |
三个读点:
其一,短窗口是屠杀。 T=126 时样本协方差 25.2% vs POET 13.8%——优化器在近奇异方向上加杠杆的老病(CCM 那篇的 456% 名场面的温和版),POET 靠结构约束直接免疫。
其二,纯因子模型的宿命是被反超。 T=126 时它和 POET 几乎打平(14.13% vs 13.75%)——短窗口下残差相关反正也估不准,扔掉无妨;但 T=1008 时它(12.15%)被样本协方差(11.91%)反超——数据多到样本协方差都能干活了,它还抱着错误的对角假设。POET 全程最优的原因恰恰是它的中庸:短窗口它像纯因子模型(阈值把大部分残差元素杀成零),长窗口它像样本协方差(阈值 随 T 自动放松,越来越多的真实残差相关被放行)。 这个自适应免调参,是 这个速率送的。
其三,K 的容错性在组合口径尚可、在精度口径较差。 K=1 欠拟合把两个弱因子留在残差里,好在阈值步骤能部分接住(弱因子制造的残差相关是大面积的、能存活阈值);K=8 过拟合多提了 5 个噪声”因子”,每个都带进虚假结构。两者的 GMV 波动率比 K=3 差 0.2-0.5pp——不致命,但精度矩阵误差在短窗口差 10-25%。选 K 宁可稍微多也不要极端少,且永远别信”取特征值比值 argmax”的默认输出。
五、POET 与工具箱其他成员的关系#
| 方法 | 结构先验 | 干的活 |
|---|---|---|
| LW 收缩 | 无(往均匀目标拉) | 全矩阵压方差 |
| MP 去噪 | 谱结构(噪声带) | 剪噪声特征值、保留尖峰 |
| GLasso | 精度矩阵稀疏 | L1 优化出条件依赖图 |
| POET | 低秩 + 残差稀疏 | 因子吃公共风险,阈值治残差 |
和 MP 去噪的关系最微妙:两者都保留尖峰特征值。区别在对”本体”的处理——MP 去噪把噪声带特征值压成常数(保迹),POET 对残差做的是逐元素阈值而不是谱操作,所以它能恢复残差里的块结构(行业相关),MP 去噪做不到(谱方法看不见元素位置)。如果残差真有稀疏结构,POET 严格更强;如果没有,MP 更稳。
和 GLasso 的正确配合方式在那篇文末已经预告过:真实市场的原始收益共享公共因子,条件依赖图根本不稀疏,必须先剥因子再对残差跑 GLasso——那个”先剥因子”的动作就是 POET 的第一步。POET 用软阈值处理残差,你完全可以把这一步换成 GLasso(拿到残差的精度矩阵和网络图),两个方法在这里合流。
六、诚实边界#
残差稀疏是假设,不是事实。 本文模拟里残差真的块对角,POET 赢是理所应当。真实市场里控制了 3-5 个统计因子后残差是否足够稀疏,没有保证——供应链、共同持股人、指数成员身份都制造着”因子外”的相关。好消息是阈值法对”近似稀疏”(大量小元素而非精确零)也有理论保证,坏消息是这个”近似”的程度没法事前验证。
阈值常数要调。 理论只给速率 ,常数 (本文取 1.0)需要交叉验证。太小=噪声漏网,太大=误杀真实相关退化成纯因子模型。它和 GLasso 的 α 一样,是稀疏方法的公共税。
因子是统计的,不是经济的。 PCA 因子是方差最大化的数学产物,和 Barra 式基本面因子(行业、风格暴露已知)不同。如果你已经有可靠的基本面因子模型,用它的残差做阈值(POET 的思想、显式因子的实现)通常更稳——PCA 版 POET 的优势是不需要任何外部信息。
波动率非平稳没治。 POET 假设 在窗口内恒定。真实波动率聚集的问题要靠 DCC-GARCH 或 EWMA 那条时变路线,与 POET 的高维路线正交——Fan 后续工作里有两者结合的版本(时变因子载荷),工程上最简单的近似是对残差用 EWMA 加权后再阈值。
参考文献#
- Fan, J., Liao, Y., & Mincheva, M. (2013). Large Covariance Estimation by Thresholding Principal Orthogonal Complements. Journal of the Royal Statistical Society: Series B, 75(4).
- Bai, J., & Ng, S. (2002). Determining the Number of Factors in Approximate Factor Models. Econometrica, 70(1).
- Fan, J., Fan, Y., & Lv, J. (2008). High Dimensional Covariance Matrix Estimation Using a Factor Model. Journal of Econometrics, 147(1).