因子投资-04-线性回归矩阵与OLS

QUANT RESEARCH NOTE LESSON 04

“市场涨 1%,这只股票通常涨多少?”“控制规模以后,价值信号还能预测收益吗?”这两类问题都可以从线性回归开始。回归把一个变量的变化分解为可由解释变量线性描述的部分和残差,但它本身不自动提供因果解释。

类型核心课程
模块基础语言
阅读约 7 分钟
材料10 节 · 1 段代码

本节解决什么问题

“市场涨 1%,这只股票通常涨多少?”“控制规模以后,价值信号还能预测收益吗?”这两类问题都可以从线性回归开始。回归把一个变量的变化分解为可由解释变量线性描述的部分和残差,但它本身不自动提供因果解释。

前置知识与学习目标

前置知识是收益率、均值、方差、协方差,以及第 03 讲的标准误和假设检验。学完后你应该能:

  • 从一元直线理解截距、斜率、拟合值和残差;
  • 手算三个点的 OLS 系数与 R²;
  • 读懂矩阵形式中 T、K、N 的维度;
  • 解释共线性为何使系数不稳定;
  • 区分回归拟合、预测和因果三种目标。

直觉与手算

观察三个点:

直觉与手算 3 行 × 2 列
x y
-1 0
0 1
1 3

模型是:

x 均值为 0,y 均值为 4/3。含截距的一元 OLS 斜率等于样本协方差分子除以 x 的离差平方和:

截距为 4/3-1.5×0=4/3。三个拟合值约为 -0.167、1.333、2.833,残差约为 0.167、-0.333、0.167。残差和为零,且与 x 的内积为零,这是含截距 OLS 的正交条件。

残差平方和 SSE=1/6,y 相对均值的总平方和 SST=14/3,所以:

高 R² 只是这三个样本点接近直线。它没有证明 x 导致 y,也没有保证第四个点仍接近直线。

定义与公式

从损失函数得到 OLS

OLS 选择 α、β,使残差平方和最小:

对 α、β 求一阶条件得到残差分别与常数列和 x 正交。一元含截距解为:

斜率单位是“y 单位/x 单位”;截距和残差与 y 同单位。若 x 是市场收益、y 是股票收益,两者都以百分比计,Beta 无量纲,Alpha 是每期收益率。

矩阵形式

T 个观测、K 个回归系数:

  • y:T×1 因变量向量;
  • X:T×K 设计矩阵;含截距时第一列全为 1;
  • β:K×1 系数向量;
  • ε:T×1 误差向量。

若 X 满列秩:

维度检查:X’X 是 K×K,X’y 是 K×1,所以结果是 K×1。实际计算不应显式求逆,数值库通常用 QR、SVD 或最小二乘求解。

拟合值、残差与 R²

含截距的样本内 R² 通常在 0 与 1 之间;无截距或样本外定义可能为负。加入解释变量不会降低样本内 R²,所以比较不同复杂度模型应同时看调整 R²、样本外误差和经济合理性。

系数标准误

在经典同方差、无相关误差假设下:

现实金融收益常有异方差、序列相关和横截面相关,需要 White、Newey–West、聚类或其他与研究设计匹配的协方差估计。改变标准误不会改变 OLS 点估计,但会改变 t 值和置信区间。

共线性

当 X 的两列几乎是彼此线性组合时,X’X 接近奇异。模型仍可能整体拟合很好,但单个系数对小数据扰动非常敏感、标准误很大。共线性不是“相关超过某个固定阈值”才突然发生;应检查变量定义、条件数、系数稳定性和是否真的需要分别解释。

Python 最小实验

PYTHON 可复现实验
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np

x = np.array([-1.0, 0.0, 1.0])
y = np.array([0.0, 1.0, 3.0])
X = np.column_stack([np.ones_like(x), x])

coef, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
fitted = X @ coef
residual = y - fitted
sse = residual @ residual
sst = ((y - y.mean()) ** 2).sum()
r_squared = 1 - sse / sst

assert np.allclose(coef, [4 / 3, 1.5])
assert np.isclose(residual.sum(), 0)
assert np.isclose(x @ residual, 0)
assert np.isclose(r_squared, 27 / 28)
print(coef, residual, r_squared)

代码返回的系数顺序与 X 列顺序一致。研究中必须保存列名,不能只保留一个没有标签的系数数组。

A 股实现注意事项

  1. 时间对齐。 用 t 期收盘后已知特征解释 t+1 收益;财务特征按实际公告日进入 X,而不是按报告期末。
  2. 同日共同冲击。 横截面残差受市场和行业共同影响,普通独立误差标准误往往过于乐观。
  3. 停牌与涨跌停。 未来收益缺失或无法成交不是普通随机缺失。删除这些观测可能选择性留下流动性好的股票。
  4. 行业与规模控制。 加入行业哑变量和规模并非自动“更正确”;它改变了问题为“在行业、规模相同条件下的边际关系”。报告必须说明控制前后各回答什么。
  5. 极端值。 微盘股收益和财务比率可能极端。先核验单位、分母与数据错误,再采用点时横截面去极值;不要利用全样本分位数。
  6. 标准化。 截面 z-score 使系数可比较,但系数单位变成“信号提高一个当期横截面标准差对应的未来收益变化”。每期标准化也改变了跨期含义。

常见错误与边界

  • 忘记常数列,却把第一个斜率解释为 Alpha。
  • 先标准化整个数据集再做时间切分,导致测试期均值和标准差泄露。
  • 看到 R² 高就声称模型有预测力;同一时期的市场共同波动很容易产生高拟合。
  • 看到系数显著就声称因果;遗漏变量、反向因果和选择偏差仍可能存在。
  • 用价格水平回归价格水平,得到趋势驱动的伪回归。
  • 在强共线性下逐个解释符号,忽略系数可能因样本微调而翻转。
  • 显式计算矩阵逆,遇到数值不稳定仍相信输出的巨大系数。

线性模型也有表达边界:真实关系可能非线性、有交互或随状态变化。先用线性模型不是因为世界线性,而是因为它透明、可诊断,是复杂模型是否真正增加信息的基准。

原书与论文

原书第 2 章(PDF 文件页 27–96)系统讨论因子模型与实证方法,附录 A(381–388)可用于复习矩阵和统计基础。

Fama 与 MacBeth(1973)把回归用于资产定价的时间与横截面两步检验,是后续第 10 讲和实验 04 的核心来源:DOI 10.1086/260061。阅读时先识别每一步的 y、X、T 与 N,不急于记结论。

Newey 与 West(1987)说明为什么金融时间序列中需要对异方差和自相关稳健的协方差估计:DOI 10.2307/1913610。

练习

  1. 对三个点 (0,1)、(1,3)、(2,5) 手算 Alpha、Beta、残差和 R²。
  2. 若 x 用小数收益、y 用百分点收益,Beta 的数值和单位如何变化?这说明为什么数据字典必须记录单位?
  3. 构造两列几乎相同的 X,逐步加入微小噪声,观察最小二乘系数和两列系数之和。
  4. 写出“个股月超额收益对市场月超额收益回归”的矩阵维度,假设 120 个月且含截距。
  5. 找一个“高 R² 但没有样本外预测价值”的例子,并说明拟合与预测的差别。

校验:第 1 题直线为 y=1+2x,残差全为零,R²=1。第 4 题 y 为 120×1,X 为 120×2,β 为 2×1。

小结与下一步

OLS 用最小残差平方把 y 投影到 X 的列空间。截距、斜率、拟合值、残差和 R² 都是这个几何过程的产物;系数的可信度还依赖正确标准误、数据时点和模型设定。回归能描述条件线性关系,不自动提供因果。

下一讲把收益与协方差放进投资组合,建立基准、Sharpe、信息比率、最大回撤等绩效评价语言。


因子投资-04-线性回归矩阵与OLS
https://www.polarishaw.top/2026/07/17/因子投资-04-线性回归矩阵与OLS/
作者
Polaris
发布于
2026年7月17日
许可协议