第 7 章 · 01 线性回归与正则化


文档摘要

第 7 章 · 01 线性回归与正则化 本节摘要:本节讲金融建模的基线模型——线性回归及其正则化变体。线性回归假设响应变量是特征的线性组合加噪音:y = β₀ + β₁x₁ + ... + βₚxₚ + ε,用最小二乘(OLS)求解系数。本节讲三件事:OLS 的数学形式与 statsmodels 的统计推断(含 R²、t 检验、F 检验、条件数诊断多重共线性);梯度下降版 SGDRegressor 与标准化的必要性;正则化的两大流派——Ridge(L2,收缩系数但不归零)和 Lasso(L1,产生稀疏解做特征选择),以及两者的混合 ElasticNet。线性模型简单、可解释、难被过拟合,是任何复杂模型都必须先打败的基线。 内容来源:原项目 ,汉化并套用体系化模板。

第 7 章 · 01 线性回归与正则化

本节摘要:本节讲金融建模的基线模型——线性回归及其正则化变体。线性回归假设响应变量是特征的线性组合加噪音:y = β₀ + β₁x₁ + ... + βₚxₚ + ε,用最小二乘(OLS)求解系数。本节讲三件事:OLS 的数学形式与 statsmodels 的统计推断(含 R²、t 检验、F 检验、条件数诊断多重共线性);梯度下降版 SGDRegressor 与标准化的必要性;正则化的两大流派——Ridge(L2,收缩系数但不归零)和 Lasso(L1,产生稀疏解做特征选择),以及两者的混合 ElasticNet。线性模型简单、可解释、难被过拟合,是任何复杂模型都必须先打败的基线。

内容来源:原项目 ch07/01_linear_regression_intro.ipynb,汉化并套用体系化模板。

⚠️ 风险提示:线性模型简单不代表不会过拟合——当特征数 p 接近样本数 n 时,OLS 仍会过拟合。金融因子常常高度共线,Ridge/Lasso 是标配而非可选。

学习目标

阅读完本节,你应当能够:

  1. 写出线性回归模型公式与 OLS 闭式解 β = (X⊤X)⁻¹X⊤y。
  2. statsmodels 看 R²、t、F、条件数等统计推断。
  3. 说清 SGDRegressor 为何要先 StandardScaler。
  4. 区分 Ridge(L2)Lasso(L1) 的收缩与稀疏差异。
  5. 解释为什么线性模型是金融 ML 的强基线

一、线性回归的假设

线性回归假设响应变量是特征的加性线性组合:

y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p + \epsilon

关键假设:

  • 线性:每个特征与响应是直线关系(其他特征不变)。
  • 可加:特征间效应叠加(可通过构造交互项 x₁x₂ 表达协同)。
  • 误差独立同分布:ε 均值 0、方差恒定(金融里常违反,见 Fama-MacBeth 节)。

💡 核心心法:线性不是「世界是直的」,而是「在你建模的尺度上是直的」。取对数、构造交互项、分箱后,很多非线性关系都能被线性模型表达。

二、OLS 闭式解

最小化残差平方和 min Σ(y - ŷ)²,得到闭式解:

\hat{\beta} = (X^\top X)^{-1} X^\top y

用 numpy 验算:

import numpy as np import statsmodels.api as sm X = sm.add_constant(data['X']) # 加截距列 model = sm.OLS(data['Y'], X).fit() print(model.summary()) # 手动验算 beta = np.linalg.inv(X.T.dot(X)).dot(X.T.dot(y)) pd.Series(beta, index=X.columns)

(X.T @ X) 求逆是关键——当特征高度共线时,这个矩阵接近奇异,条件数飙升,β 不稳。这就是 Ridge 正则化的动机。

三、statsmodels 的统计推断

statsmodels 的 summary() 是统计推断的金矿:

区块 关键指标 含义
顶部 No. Observations / Df 样本数 / 参数自由度
顶部 Method: Least Squares OLS
中部 coef / std err / t / P>|t| 系数、标准误、t 统计量、p 值
中部 [0.025 0.975] 95% 置信区间
右上 R² / Adj. R² / F-statistic 拟合优度、调整后、联合显著性
右上 AIC / BIC 信息准则,比较模型
底部 Omnibus / Jarque-Bera 残差正态性检验
底部 Durbin-Watson 残差自相关(接近 2 = 无自相关)
底部 Cond. No. 条件数,>30 警告多重共线性

⚠️ 条件数:条件数 = 最大特征值 / 最小特征值的平方根,衡量 X⊤X 接近奇异的程度。金融因子(如多个动量)高度相关时,条件数动辄上千,系数极不稳——必须用 Ridge 收缩或剔除共线特征。

四、SGDRegressor 与标准化

sklearn 的 SGDRegressor 用随机梯度下降求解相同的 OLS 目标。梯度对特征尺度敏感,所以必须先标准化:

from sklearn.linear_model import SGDRegressor from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_ = scaler.fit_transform(X) sgd = SGDRegressor(loss='squared_loss', fit_intercept=True, learning_rate='invscaling', eta0=0.01, random_state=42) sgd.fit(X=X_, y=y) # 还原到原始尺度的系数 coeffs = sgd.coef_ * scaler.scale_ + scaler.mean_ pd.Series(coeffs, index=X.columns)

标准化让每个特征均值为 0、方差为 1,梯度各方向步长一致,收敛快且稳。还原时用 scaler.scale_scaler.mean_ 反变换。

💡 大数据场景:当 n 或 p 极大,X⊤X 求逆 O(np²) 太贵,SGD 的 O(np) per epoch 更划算。金融面板数据(几十万行 × 几百特征)SGD 是实用选择。

五、正则化:Ridge 与 Lasso

OLS 在 p 接近 n 或特征共线时过拟合。正则化在损失函数加惩罚项,把系数往零压:

Ridge(L2)

\min \sum(y - \hat{y})^2 + \alpha \sum \beta_j^2

L2 惩罚把所有系数等比例收缩,但不归零。适合「所有特征都有一点点用」的场景,如多个共线因子。

Lasso(L1)

\min \sum(y - \hat{y})^2 + \alpha \sum |\beta_j|

L1 惩罚让部分系数精确归零,产生稀疏解,自带特征选择。适合「只有少数特征真有用」的场景,是金融因子筛选的利器。

ElasticNet

\min \sum(y - \hat{y})^2 + \alpha\rho\sum|\beta_j| + \alpha(1-\rho)\sum\beta_j^2

混合 L1 + L2,参数 ρ 控制比例。当 p 远大于 n 或特征高度相关时,ElasticNet 比 Lasso 更稳(纯 L1 在强相关时只随机留一个)。

六、三种对比

模型 惩罚 系数行为 适用场景
OLS 不收缩 p << n 且不共线
Ridge L2 (β²) 等比收缩,不归零 多共线因子,都有用
Lasso L1 (|β|) 稀疏,部分归零 因子筛选,只有少数有用
ElasticNet L1 + L2 兼顾稀疏与稳定 p >> n,强相关

七、为什么线性模型是金融强基线

金融业界对线性模型的偏爱有理论支撑:

  1. 低信噪比下不易过拟合:参数少,方差小(回顾第 6 章偏差方差)。
  2. 可解释:每个系数对应因子的「单位暴露收益」,合规和风控都需要。
  3. 稳健:对小样本和非高斯分布不敏感。
  4. :训练和推理都是线性复杂度,适合每日重训。

⚠️ 基线纪律:任何「我用深度学习/梯度提升做出 IC 0.05」的结果,都要先和线性 Ridge 比。如果线性模型 IC 0.045,那 90% 的「增益」可能只是过拟合噪音。打不过线性的非线性模型不值得部署

本节要点回顾

  1. 线性回归:y = Xβ + ε,OLS 闭式解 β = (X⊤X)⁻¹X⊤y,高度共线时 X⊤X 病态。
  2. statsmodels 提供 R²/t/F/条件数等完整推断,条件数 >30 警告共线性。
  3. SGDRegressor 梯度下降求解,必须先 StandardScaler 标准化,大数据场景更划算。
  4. Ridge(L2) 等比收缩不归零,适合多共线因子;Lasso(L1) 稀疏归零做特征选择;ElasticNet 混合。
  5. 金融强基线:低信噪比下线性模型方差小、可解释、稳健,任何复杂模型都要先打败它。

下一节,我们看 Fama-MacBeth 两阶段横截面回归——专门处理金融面板数据的时变风险溢价。


发布者: 作者: 灏天文库 转发
评论区 (0)
U