4. 线性模型回顾与局限:线性回归在因子测试中的应用、多因子模型(Fama-French)、线性模型无法捕捉非线性关系的痛点

各位同学,今天我们聊一个看似基础、但实际坑特别多的话题——线性模型。

你可能会想:「线性模型?不就是 y = wx + b 嘛,有啥好讲的?」

嗯,我当年也是这么想的。直到我在实盘里被线性模型狠狠教育了一顿,才明白:线性模型不是不能用,而是你得知道它什么时候该用、什么时候该扔。

4.1 线性回归在因子测试中的应用

先说说线性回归在因子测试里的角色。说白了,我们做因子测试,就是想回答一个问题:这个因子到底有没有预测能力?

线性回归是最直接的验证工具。我个人习惯的做法是:

  1. 把因子值作为自变量 X
  2. 把下一期收益率作为因变量 y
  3. 跑一个简单的 OLS 回归

代码大概长这样:

import statsmodels.api as sm

# X: 因子值矩阵,y: 下期收益率
X = sm.add_constant(factor_values)
model = sm.OLS(y, X).fit()

print(model.summary())
# 重点关注 t 统计量和 p 值

这里有个关键点:t 统计量的绝对值大于 2,通常意味着因子有统计显著性。 我在项目中遇到过很多次,因子看起来挺漂亮,一跑回归 p 值 0.3,直接废掉。

我的小技巧: 别只看 p 值。我还会看系数的符号是否跟逻辑一致。比如你预期高换手率带来高收益,结果系数是负的——那要么你的逻辑错了,要么数据有问题。

4.2 多因子模型(Fama-French)

聊完单因子测试,咱们看看多因子模型。Fama-French 三因子模型,你肯定听过:

R = α + β₁·MKT + β₂·SMB + β₃·HML + ε

这个模型的核心思想是:股票的收益可以被几个系统性因子解释。 市场风险、市值大小、估值高低——就这三板斧。

后来还加了动量因子(UMD),变成了四因子。再后来 Fama 和 French 自己又加了盈利因子和投资因子,搞出了五因子模型。

说实话,这些模型在学术界很流行,但在实战中,我个人觉得有点「过拟合」的味道。我曾经用 A 股数据跑过五因子模型,结果发现:有些因子的显著性在不同时间段完全不一样。

因子 2010-2015 2016-2020 2021-2024
MKT(市场) 显著 显著 显著
SMB(市值) 显著 不显著 显著
HML(估值) 显著 显著 不显著
UMD(动量) 不显著 显著 显著

你看,同一个因子在不同时间段的表现天差地别。这就是线性模型的第一个局限:它假设因子和收益之间的关系是稳定的。 但市场哪有什么稳定可言?

避坑指南: 我曾经犯过一个错误——用全样本跑完回归,觉得因子很牛,结果实盘直接翻车。后来我才意识到:因子显著性会随时间漂移。 建议做滚动窗口测试,看看因子的稳定性。

4.3 线性模型无法捕捉非线性关系的痛点

好了,终于到了今天的重头戏——线性模型的致命伤:它只能捕捉线性关系。

你想想看,市场里有多少关系是线性的?

  • 换手率和收益: 低换手率可能意味着没人关注,高换手率可能意味着过度交易。中间某个区间才是最优的。这不是线性,这是倒 U 型。
  • 市值和收益: 小市值股票收益高,但也不是越小越好。微盘股流动性差,一买就涨停,一卖就跌停。这也不是线性。
  • 波动率和收益: 低波动率股票往往有溢价,但高波动率股票也不一定差。这关系复杂得很。

线性模型面对这些情况,只有一个办法:假装它们不存在。 它会强行画一条直线,结果就是:

  • 在中间区域拟合得还行
  • 在两端完全跑偏
  • 整体 R² 低得可怜

我给大家画个图,直观感受一下:

线性 vs 非线性:因子与收益的真实关系 因子值 收益率 真实关系(非线性) 线性拟合 倒U型:中间最优 直线:两端误差大

看到没?红色虚线是真实的非线性关系,蓝色直线是线性模型硬拟合出来的。在因子值处于中间区域时,两者差别不大。但一旦因子值跑到两端,线性模型的预测就完全失准了。

核心痛点总结:

  • 线性模型假设关系是单调的——因子越大收益越大,或者因子越小收益越大。但现实中很多关系是 U 型、倒 U 型、S 型。
  • 线性模型无法捕捉交互效应——比如市值因子和动量因子组合在一起,效果可能 1+1 > 2。线性模型只能把它们各自的效果加起来。
  • 线性模型对异常值极度敏感——一个极端值就能把回归系数拉偏。我见过有人因为没做 winsorize,跑出来的因子系数符号都是反的。

那怎么办?

嗯,这就是我们后面要讲的内容了。深度学习就是来解决这些问题的——它能自动学习非线性关系、交互效应,而且对异常值的鲁棒性也更强。

但别急着跳过去。我想说的是:线性模型不是没用,它是个很好的基线。 我个人的工作流程是:

  1. 先用线性模型跑一遍,看看因子有没有基本预测能力
  2. 如果线性模型效果不错,再考虑用深度学习进一步挖掘非线性信号
  3. 如果线性模型效果就很差,那大概率是因子本身有问题,不是模型的问题

记住一句话:深度学习不是万能药,它只是比线性模型多了一点点「想象力」。

我的经验: 在实盘里,纯线性模型和纯深度学习模型我都跑过。结果发现:两者结合效果最好。 用线性模型捕捉稳定的线性关系,用深度学习捕捉残差中的非线性信号。这个思路,后面我们会详细展开。

好了,线性模型的回顾就到这里。下一节我们正式进入深度学习的世界——看看神经网络是怎么一步步从线性走向非线性的。


公众号:蓝海数据掘金营,微信deep3321