上海某私募的多因子研究员把过去 250 个交易日的沪深300 成分股横截面回归刚跑完——12 个风格因子,R2 达到 0.41,看着挺漂亮。可是把 5 月那一周的极端行情样本剔掉再跑一次,某个动量因子的系数从 +0.18 翻成 −0.07;再换一种风险因子的口径,价值因子又从显著变成不显著。模型「拟合得很好」却一推就倒——这正是前两课没有触及的现实:普通最小二乘(ordinary least squares, OLS)给你一个数学上完美的最小化器,却不告诉你这个解到底是被某几个观测点撑着、被一对高度相关的因子绑着,还是被异方差扭曲着。本课把这套「然后呢」的诊断与修正工具一次性铺开,并把正则化作为系统性的应对手段。
一、残差结构与四张诊断图
第 2 课已经告诉你残差向量 e=y−y^ 的协方差矩阵(covariance matrix)为 Cov(e)=σ2(I−H),因此 Var(ei)=σ2(1−hii)——逐点不同。原始残差之间不可比,要校正这种异质方差才能跨点比较。把残差除以自身标准差的估计,得到学生化残差(studentized residual):
ri=σ^1−hiiei
其中 hii=[X(X⊤X)−1X⊤]ii 是帽子矩阵 H=X(X⊤X)−1X⊤ 的第 i 个对角元。
熟悉 R 的 plot.lm() 输出的人都见过那四张诊断图,顺序固定:(a) 残差-拟合图——检查线性(无系统弯曲)与同方差(无喇叭口);(b) 正态 Q-Q 图——把 ri 的样本分位数对比正态分位数,直线即正态,偏离则说明厚尾或偏态;(c) 尺度-位置图(∣ri∣ 对 y^i)——把方差趋势变成可视的;(d) 残差-杠杆图叠加库克距离等高线——挑出影响力大的个别点。四张图各自盯着一条假设,先学会「这张图坏了说明哪条假设破了」,比记任何检验都重要。
二、杠杆与库克距离
hii 之所以叫杠杆值(leverage),是因为 y^=Hy 意味着 y^i=∑jhijyj 里第 i 项是 yi 对自己拟合值的直接贡献。代数簿记上,hii∈[1/n,1] 且 ∑ihii=tr(H)=p——平均杠杆即 p/n。一条常用经验值:hii>2p/n 时该点列入「高杠杆点」(high-leverage point)候选,值得逐条审视。
库克距离(Cook's distance)把残差大小与杠杆值合成一个综合影响度量:
Di=pσ^2ei2⋅(1−hii)2hii
它近似等于把第 i 个观测删去后 β^ 的整体偏移量。经验值 Di>4/n 一般认为「可能具有影响力」。请记住:这两条阈值都是经验启发(heuristic),不是带受控弃真率的假设检验——它们是用来标点的,不是用来判点的。
三、异方差的检测与修正
若 Var(εi) 不再是常数,Gauss-Markov 给的 BLUE 结论就失效了。检测两条路:视觉上,看尺度-位置图有没有系统趋势;形式化地,做布劳殊-帕甘检验(Breusch-Pagan test)——把 ei2 对 X 跑一次辅助回归,在同方差原假设 H0 下检验统计量近似 χp−12。
两种标准修正:
- 加权最小二乘(weighted least squares, WLS):若 Cov(ε)=σ2W−1 且 W 对角,则 β^WLS=(X⊤WX)−1X⊤Wy 在异方差 Gauss-Markov 假设下仍是 BLUE。实务中 W 未知,通常用迭代 WLS(先 OLS 拟合,用残差估计 W,再加权,如此反复)。
- 怀特-胡贝尔三明治标准误(Huber-White / sandwich standard errors,中文常译「稳健标准误」):β^OLS 仍无偏一致,只把标准误估计换成异方差一致的形式:
VarHC(β^)=(X⊤X)−1X⊤diag(ei2)X(X⊤X)−1
这就是 White (1980) 的著名结果,也是 R 的 lmtest::coeftest + sandwich::vcovHC、Python statsmodels 的 HC0/HC1/HC2/HC3 选项背后的公式。代价是小样本下略损效率,收益是把异方差对推断的污染压平。
四、多重共线性:VIF 与条件数
当设计矩阵的两列(或多列)几乎线性相关时,正规方程(normal equations)X⊤Xβ=X⊤y 趋近奇异,(X⊤X)−1 的对角元爆炸,直接放大 Var(β^j)=σ2[(X⊤X)−1]jj。诊断办法是把 X 的第 j 列对其余 p−1 列做辅助回归,记其 R2 为 Rj2,定义方差膨胀因子(variance inflation factor, VIF):
VIFj=1−Rj21
VIFj=1 时第 j 个预测变量与其它正交;VIFj 较大时该变量被其它列强烈复制。一般经验值 VIFj>10 提示严重共线性(部分文献用 >5 更严)。连到线性代数侧:X⊤X 的条件数(condition number)κ(X⊤X)=λmax/λmin 是最大与最小特征值(eigenvalue)之比,刻画解正规方程的数值敏感度——κ 越大,小幅扰动越能把 β^ 推得面目全非。
一个最小数值例子。 取 X=[1,x1,x2],其中 x2=2x1+η 而 η 很小。把 x2 对 x1 做辅助回归,得 R22≈0.95,故
VIF2=1−0.951≈20.
也就是说 β^2 的方差被放大约 20 倍。这时往数据里加进一个新观测——或仅仅把某个 yi 改动一点——β^2 就可能直接翻号,β^1 反向吸收差额。这就是共线性的「不稳定签名」:不是大样本失效,而是对小扰动过度敏感,签到正负号都跳。
下面这个滑块把 VIF 当成辅助 R2 的函数:把 R2 向 1 推,VIF 急剧爆炸——这就是经验阈值 10 的几何理由。
Formula Explorer
1 / (1 - r_squared)
五、正则化:岭回归与 Lasso
岭回归(ridge regression)把残差平方和替换为带 L2 惩罚的目标:
β^ridge(λ)=(X⊤X+λI)−1X⊤y即argβmin∥y−Xβ∥2+λ∥β∥22
加上 λI 等于把 X⊤X 的每个特征值抬高 λ,矩阵恒为正定可逆,所以岭回归在 X⊤X 奇异时也有定义。代价是引入偏差(每个系数都被收缩向零),换来的是方差大幅下降——正是模块 2.2.1 第 2 课里讲过的均方误差(MSE)折中。
Lasso 把 L2 惩罚换成 L1:
β^lasso(λ)=argβmin∥y−Xβ∥2+λ∥β∥1
无闭式解;主流求解器是坐标下降(coordinate descent)与 LARS。几何上,L1 球是带尖角的菱形(对比岭的同心圆球面),最优点常常落在某个尖角上——那意味着对应分量精确为零,即同时完成变量选择。一句话的贝叶斯桥梁:岭是 β 取高斯先验的 MAP 估计,Lasso 是 Laplace 先验的 MAP——完整贝叶斯视角留到后续模块。弹性网(elastic net)、组 Lasso 等扩展则把这套思想推广到「成组相关预测变量需要一起进或一起出」的场景,推导属于模块 2.5.2 的范围;经典逐步回归与 AIC / BIC 是 Lasso 之前的备选路径,各有自身的多重检验放大与不稳定问题,这里仅作一句提示。库克距离会标外点但并不修外点,稳健回归(Huber 损失、RANSAC 等)才是配套工具,也不在本课展开。
惩罚参数 λ 用 K 折交叉验证(K-fold cross-validation,通常 K=5 或 10)挑选:在每个候选 λ 上,用 K−1 折拟合、留一折评测,求平均预测误差并取最小者;若追求简约,可用「1-SE 法则」选取「在最小误差 1 个标准误以内的最大 λ」。交叉验证本身的完整理论留待模块 2.6。
六、下一步
到这里你已经能在 OLS 框架内识别影响点、应对异方差、量化共线性,并把岭与 Lasso 当作系统性的方差控制工具。但整个故事仍然假设响应变量是连续的且服从正态。下一课把这套框架推到非高斯响应——二分类、计数——用广义线性模型(generalized linear models, GLM)统一处理:把残差换成偏差(deviance)残差、把 RSS 换成负对数似然、把链接函数嵌进去。诊断方法对应迁移、岭与 Lasso 几乎原样移植到惩罚似然上,λ 与交叉验证一并继续生效。
Exercise
设某多元回归中 n=100、p=5,平均杠杆 p/n=0.05。(a) 写出高杠杆点的经验阈值,以及由库克距离判定影响点的经验阈值。(b) 对某观测 hii=0.4、学生化残差 ri=2.5,计算库克距离 Di。(c) 若 VIF3=12,说明它对 Var(β^3) 相对于「预测变量正交」基线的含义,并列出两条补救手段。(d) 写出岭回归的闭式估计量,并用一句话解释为什么把 λI 加到 X⊤X 上,即使 X⊤X 奇异时也良定义。
提示
先回忆两条经验阈值:
hii>2p/n 表示高杠杆,
Di>4/n 表示具影响力。(b) 用学生化残差把 Cook 重写为
Di=(ri2/p)⋅hii/(1−hii)。
提示
(b) 代入
ri=2.5, hii=0.4, p=5:
Di=(6.25/5)⋅(0.4/0.6)≈0.83,远超
4/n=0.04。(c)
VIF=12 即
Var(β^3) 被放大 12 倍;补救:删冗余列、合并相关变量、或改用岭回归。