3、线性回归基础:最小二乘法、OLS假设、多重共线性、异方差性
说到线性回归,很多人的第一反应就是「画一条线,拟合数据点」。嗯,这话没错,但做量化的人都知道——这条线背后藏着不少坑。我当年刚入行时,觉得线性回归就是个最小二乘法,跑个OLS就完事了。结果呢?回测曲线漂亮得不行,实盘一跑就崩。后来才发现,模型假设全被违反了。
今天咱们就把这块硬骨头啃下来。我会结合自己在量化策略开发中踩过的坑,把最小二乘法、OLS假设、多重共线性和异方差性这几个核心概念讲透。
3.1 最小二乘法:直觉与数学
最小二乘法,说白了就是找一条直线,让所有数据点到这条直线的「垂直距离的平方和」最小。为什么是平方?不是绝对值?
我个人习惯这样理解:平方放大了大误差的惩罚。你想想看,一个误差是2,平方后是4;另一个误差是10,平方后是100。这样模型会更「在意」那些偏离大的点。这在量化里很重要——我们最怕的就是极端情况下的预测失误。
数学上,我们想找到参数 β,使得:
min Σ(yᵢ - ŷᵢ)² = min Σ(yᵢ - (β₀ + β₁xᵢ))²
这个优化问题有闭式解:
β = (XᵀX)⁻¹Xᵀy
嗯,这里要注意。这个公式看着简单,但里面藏着一个大问题——XᵀX 必须可逆。我在做因子分析时就遇到过,当两个因子高度相关时,XᵀX 几乎是奇异的,求逆结果极不稳定。这就是后面要讲的多重共线性。
核心要点:最小二乘法不是「随便画条线」,它是在高斯-马尔可夫定理框架下,对线性模型的最优无偏估计。但前提是——你得满足它的假设条件。
3.2 OLS的五大假设:量化人的「交通规则」
OLS(普通最小二乘法)有五个基本假设。违反任何一个,你的模型就可能出问题。我习惯把它们记成「LINE」加一个C:
| 缩写 | 假设 | 通俗理解 | 违反后果 |
|---|---|---|---|
| L | 线性关系 | X和Y的关系是直的 | 模型偏差,预测不准 |
| I | 独立性 | 样本之间互不影响 | 标准误被低估 |
| N | 正态性 | 残差服从正态分布 | 假设检验失效 |
| E | 同方差性 | 残差的波动是稳定的 | 标准误偏误 |
| C | 无多重共线性 | 自变量之间不高度相关 | 系数估计不稳定 |
我曾经犯过一个低级错误:用日频收益率做回归,没检查残差的自相关性。结果t统计量全被放大了,看起来显著的因子其实全是噪音。这就是违反了独立性假设——时间序列数据天然就有自相关。
实战技巧:在量化中,我建议每次跑完回归后,先画残差图。如果残差有明显的「喇叭形」或「趋势形」,那大概率是假设被违反了。
3.3 多重共线性:因子之间的「内耗」
多重共线性,说白了就是你的自变量之间「太像了」。比如在选股因子中,市盈率和市净率往往高度相关。如果你同时把它们放进模型,就会出现问题。
具体表现是什么?
- 系数估计值变得极不稳定——稍微换几个样本,系数符号都可能反转
- 标准误变得很大——你无法判断哪个因子真正有效
- 模型整体显著,但单个系数都不显著
怎么检测?看VIF(方差膨胀因子)。我一般这样判断:
VIF = 1 / (1 - R²)
经验规则:
- VIF < 5:没问题
- 5 ≤ VIF < 10:需要关注
- VIF ≥ 10:严重共线性,必须处理
我记得有一次做多因子模型,把动量因子和反转因子同时放进去,VIF直接飙到15。我当时还纳闷为什么两个因子都不显著,但模型整体R²却很高。后来一查,原来是它们互相「抵消」了。
处理方法有几种:
- 删除其中一个高度相关的变量
- 用PCA降维,提取主成分
- 用岭回归(Ridge Regression)代替OLS
注意:千万不要以为「变量越多越好」。在量化中,每多一个冗余因子,模型的过拟合风险就增加一分。我见过有人用50个因子做回归,结果VIF全红,回测曲线漂亮得像假的一样——嗯,它确实是假的。
3.4 异方差性:残差的「脾气」不稳定
异方差性,就是残差的方差不是常数。在量化里,这太常见了。比如:
- 市场波动大的时候,预测误差也大
- 小市值股票的残差波动,通常比大市值股票大
- 不同行业板块的残差方差不一样
怎么发现它?最简单的方法——画残差图。把残差对拟合值画散点图,如果出现「喇叭形」(左边窄右边宽,或者反过来),那就是异方差。
我曾经在做一个行业轮动策略时,发现残差图有明显的「漏斗形」。当时没在意,直接用OLS跑完了。结果呢?回测时夏普比率看起来有1.8,实盘只有0.6。后来用White检验确认了异方差,改用加权最小二乘法(WLS)才把问题解决。
处理异方差的常用方法:
- 稳健标准误(Huber-White标准误):这是最常用的方法。它不改变系数估计,只修正标准误。在Python里用
statsmodels的HC3选项就行。 - 加权最小二乘法:给不同方差的观测值赋予不同权重。方差大的权重小,方差小的权重大。
- 变量变换:比如取对数,或者用收益率代替价格。
# Python示例:使用稳健标准误
import statsmodels.api as sm
model = sm.OLS(y, X)
results = model.fit(cov_type='HC3')
print(results.summary())
我的习惯:在量化回测中,我默认就用稳健标准误。虽然系数不变,但标准误更可靠。这就像开车系安全带——平时可能用不上,但真遇到事故能救命。
3.5 本章知识体系
下面这张图是我自己梳理的线性回归知识框架,帮你把今天的内容串起来:
这张图把今天的内容串成了闭环。你从「线性回归」出发,先理解最小二乘法的数学本质,再掌握OLS的五大假设,然后学会诊断多重共线性和异方差性这两个最常见的问题。每一步都有对应的检测方法和修正手段。
说实话,这些内容看起来有点枯燥,但它们是量化策略的「地基」。地基不稳,上面盖的楼再漂亮也没用。我见过太多人花大量时间调参数、优化策略,却忽略了回归模型的基本假设。结果呢?回测和实盘永远是「两张皮」。
嗯,今天就到这儿。记住一句话:先诊断,再治疗。跑回归之前,先问问自己——我的数据满足OLS假设吗?