深圳某私募的多因子研究员手头有 60 个交易日的沪深300 成分股横截面收益,外加一份「因子动物园」(factor zoo)清单:动量、价值、质量、低波,再加上 70 多个另类与基本面因子,合计 p=80 个候选预测变量、n=60 个观测——一个典型的 p>n 病态设计矩阵。她直接套用上一模块的普通最小二乘(ordinary least squares, OLS),解正规方程(normal equations) X⊤Xβ=X⊤y,结果 β^ 每周翻号:上周动量系数 +0.31,这周变 −0.12,下周价值因子再翻一次。问题不在因子本身,而在 X⊤X 已经奇异——它根本不可逆,即便强行用伪逆,条件数(condition number)也大到任何一笔小扰动都会被放大到系数符号上。本课把这条不稳定的 OLS 信号驯服成可入库的因子模型——核心工具是正则化(regularization)。
一、病态的 X⊤X 与岭回归
设设计矩阵 X∈Rn×p、响应 y∈Rn。当 p≥n 或多列高度相关时,X⊤X 是半正定(positive semidefinite, PSD)的但不正定——存在零特征值,正规方程 X⊤Xβ=X⊤y 解不唯一。即使勉强可逆,条件数 κ(X⊤X)=λmax/λmin 可以高达 108 量级,数值上完全不可信。
岭回归(ridge regression)把目标函数改为
βmin21∥y−Xβ∥22+2λ∥β∥22
对 β 求梯度并置零,得到
β^ridge=(X⊤X+λI)−1X⊤y
加上 λI 等于把 X⊤X 的每个特征值抬升 λ,矩阵立刻变成严格正定可逆——条件数从 λmax/λmin 降到 (λmax+λ)/(λmin+λ),数值稳定性肉眼可见。统计上还有一层解读:若把先验 β∼N(0,σ2/λ⋅I) 与高斯噪声似然合在一起,β^ridge 恰是后验众数(maximum a posteriori, MAP)估计。λ 究竟取多大、用什么准则挑——属于 2.6.1 监督学习基础里的交叉验证框架,这里只承认一句:本课不讨论怎么选 λ,只把 λ>0 给定后的几何与数值机制讲清。
二、Lasso 与 L1 几何
把 L2 惩罚换成 L1,得到 Lasso 目标:
βmin21∥y−Xβ∥22+λ∥β∥1
几何上,L2 球面光滑,残差等高线最先触到球面任意一点;L1 球是带尖角的菱形,顶点位于坐标轴上。一旦半径调整到让椭圆等高线第一次触到菱形,这个触点高概率正好落在顶点——也就是说,若干分量精确为零。这就是 Lasso 自动做变量选择(variable selection)的几何来源:从 80 个候选因子里只挑出 5–10 个真正进入模型,其余系数严格归零。
∥β∥1 在 βj=0 处不可微,因此 Lasso 不存在像岭那样的闭式解。目标函数仍然是凸的——可分块凸性让逐坐标下降(coordinate descent)成为实务首选。
三、软阈值算子与坐标下降更新
固定其他坐标,对 βj 做单变量最小化。令 rj=y−∑k=jX⋅kβk 为去除其它列后的部分残差,zj=X⋅j⊤rj/∥X⋅j∥22。最优更新由软阈值算子(soft-threshold operator)给出:
Sλ(z)=sign(z)max(∣z∣−λ,0)
也就是说,若 ∣zj∣≤λ,直接把 βj 置零;否则朝零方向收缩 λ 的幅度。一步同时完成收缩与选择,与岭的纯收缩区分得很干净。
Formula Explorer
S_\lambda(z) = \operatorname{sign}(z)\, \max(|z| - \lambda,\, 0)
四、近端梯度法:ISTA 与 FISTA
更一般地,把 Lasso 目标拆成可微的 f(β)=21∥y−Xβ∥22 与不可微的 h(β)=λ∥β∥1。近端算子(proximal operator)定义为
proxλh(z)=argxmin{h(x)+2λ1∥x−z∥22}
对 h(x)=∥x∥1,直接展开就能验证 proxλh 正是上一节的软阈值。近端梯度法(proximal gradient method, 近端梯度法)就是「沿 f 走一步梯度,再做一次 prox」,套到 Lasso 即为 ISTA(Iterative Shrinkage-Thresholding Algorithm):
βk+1=Sλt(βk−tX⊤(Xβk−y))
其中步长 t≤1/∥X⊤X∥2。FISTA 在 ISTA 外面套一层 Nesterov 加速,把收敛率从 O(1/k) 提到 O(1/k2),直接继承本模块第三课的加速思路。坐标下降的全局收敛性证明在此只作示意——细节属于专门一章的优化理论。
五、n=5, p=8 数值对照
把开头的故事缩到一个能手算的例子。构造 X∈R5×8:前两列是同一真实信号的近重复(ρ≈0.99),第 3–8 列纯噪声。y=Xβ∗+ε,真值 β∗=(1,0,0,0,0,0,0,0)⊤,ε∼N(0,0.12I)。三种解法并列:
| 系数 | OLS(伪逆) | 岭 λ=1 | Lasso λ=0.3 |
|---|
| β^1 | +2.7 | +0.58 | +0.86 |
| β^2 | −1.9 | +0.41 | 0 |
| β^3 | +0.8 | −0.04 | 0 |
| β^4 | −1.1 | +0.07 | 0 |
| β^5 | +0.6 | −0.05 | 0 |
| β^6 | −0.4 | +0.03 | 0 |
| β^7 | +0.2 | −0.02 | 0 |
| β^8 | −0.3 | +0.06 | 0 |
读这张表:OLS 伪逆把两根共线列的系数对撞放大到 ±2 量级、第 3–8 列在噪声里漂出 ±1 量级,与真值已经不再对应;岭把所有方向均匀向零收缩,共线对 β1,β2 共担一半信号但没有归零;Lasso 只把 β1 留在 +0.86,其余精确归零——一份能直接接入下游协方差矩阵(covariance matrix)估计或组合优化(portfolio optimization)管线的稀疏因子表。
六、量化落地的两条主线
岭与 Lasso 在 CN 私募 量化研究台已是默认工具,两条主线值得明确分开:
- 协方差侧。 Ledoit-Wolf 协方差收缩可以读作岭式正则化的协方差矩阵版本——把样本协方差与一个结构性目标(常数对角阵或单因子模型)做凸组合,确保结果半正定且条件数受控。下游均值方差优化(mean-variance optimization)在岭收缩过的 Σ^ 上跑出来的权重比裸样本协方差稳一个量级,这就是沪深300 universe 上 私募 组合的标准化前处理。
- 信号侧。 Lasso 从因子动物园挑稀疏子集,直接给出可解释、可监控、可归因的因子配方——某个因子被归零意味着它在当前 λ 下不进入模型,无需事后做检验。把 Lasso 选出的稀疏因子集喂给均值方差优化的预期收益输入,是最干净的端到端串联方式。
七、练习
Exercise
设 X∈Rn×2 的两列已标准化为单位范数且互相正交,即 X⊤X=I。考虑 Lasso 目标 21∥y−Xβ∥22+λ∥β∥1,令 z=X⊤y=(z1,z2)。
(a) 写出 Lasso 在 βj=0 与 βj=0 两种情形下的 KKT 式最优性条件——用 X⊤(y−Xβ) 与次梯度 ∂∥β∥1 表示。
(b) 取 z1=0.7, z2=0.2, λ=0.3,逐坐标手算 β^1,β^2,展示一步软阈值。
(c) 说明 Lasso 把哪个系数严格归零、哪个保留,并写出保留后的值。
提示
正交设计
X⊤X=I 让坐标可分离:第
j 坐标的目标退化成单变量函数
21(βj−zj)2+λ∣βj∣。先把这条「单变量带
L1 罚」的标准形式写出来,后面只需逐坐标套软阈值。
提示
KKT 分两种:
βj=0 时
X⋅j⊤(y−Xβ)=λsign(βj);
βj=0 时
∣X⋅j⊤(y−Xβ)∣≤λ。代入
X⊤X=I 即得软阈值
β^j=Sλ(zj):
∣zj∣>λ 保留,否则归零。
提示
代入数:
∣z1∣=0.7>0.3=λ,故
β^1=sign(0.7)(0.7−0.3)=0.4;
∣z2∣=0.2≤0.3,故
β^2=0。所以 Lasso 把
β2 严格归零,只保留
β^1=0.4——一次同时完成的收缩 + 选择。
八、通往下一站
到这里你已经掌握把不稳定 OLS 变成可入库因子模型的两条主路径:岭做均匀收缩 + 数值稳定,Lasso 做稀疏选择 + 变量挑选。还有两条线索本课刻意未展开,但下游模块会承接:其一,λ 到底取多少——属于 2.6.1 监督学习基础里的交叉验证框架,那里把样本切割、风险估计、超参选择一并搭好;其二,挑选好的稀疏因子如何进入产线——在 4.x 组合构造模块里,你会看到 Lasso 选出的因子直接喂入均值方差优化的预期收益输入,而岭收缩过的协方差矩阵则替换掉样本协方差,把权重对估计误差的敏感性一次性按住。本模块到此结课:迭代法、加速、正则化、近端梯度,四件工具齐了,下个模块开始把它们装到真正的资金线上。