3. 因子失效的根源:过拟合与多重比较谬误

做量化这几年,我见过太多漂亮的回测曲线了。说实话,看到那种近乎45度角向上、回撤几乎为零的净值图,我的第一反应不是兴奋,而是警惕。为什么?因为这种完美曲线背后,十有八九藏着两个魔鬼——过拟合和多重比较谬误。

今天我们就来扒一扒,这两个家伙到底是怎么把因子搞死的。

3.1 过拟合:你拟合的是噪声,不是信号

先说过拟合。这个概念其实不新鲜,但在因子挖掘这个场景下,它特别容易发生。

你想想看,我们手上有几千只股票,每天的交易数据、财务数据、另类数据,加起来几百个字段。然后我们用这些数据去训练一个模型,希望找到能预测未来收益的规律。问题是,数据里除了真正的信号,还有大量的随机噪声。

过拟合的本质,就是模型把噪声当成了信号来学习。

核心观点:过拟合的因子在样本内表现惊艳,但在样本外(实盘)往往一塌糊涂。这不是因子失效了,而是它从来就没真正有效过。

我在项目中遇到过这样一个案例:有个同事花了三个月,从100多个候选变量里筛选出10个,构建了一个多因子模型。样本内回测的年化收益超过40%,夏普比率3.2。结果实盘跑了两个月,净值直接跌了15%。

问题出在哪?他用了太多的变量,而且做了大量的数据挖掘——说白了,就是在数据里硬找相关性。这种相关性在样本内成立,但换一个时间段就完全失效了。

3.1.1 过拟合的典型症状

怎么判断一个因子是不是过拟合了?我个人习惯看这几个信号:

  • 参数过于复杂:一个因子公式里用了超过5个参数,或者有复杂的条件嵌套
  • 样本内表现异常好:夏普比率超过3,最大回撤小于5%,这种基本可以怀疑
  • 换手率极高:频繁调仓,说明因子对短期波动特别敏感
  • 逻辑难以解释:你没法用金融直觉说清楚这个因子为什么赚钱

避坑指南:我曾经犯过一个错误——用过去5年的数据做回测,然后手动调整参数让回测曲线更好看。结果呢?实盘直接打脸。后来我学乖了:永远不要用样本内的表现来评估因子质量

3.2 多重比较谬误:你挖得越多,假信号越多

再来说多重比较谬误。这个问题在量化圈里其实更隐蔽,也更致命。

简单解释一下:假设你只测试1个因子,显著性水平设为5%,那么你犯第一类错误(把无效因子当成有效)的概率就是5%。但如果你测试了100个因子,即使所有因子都是无效的,你也有大约99.4%的概率至少发现一个"显著"的因子。

公式是这样的:

P(至少一个假阳性) = 1 - (1 - α)^n

其中:
α = 显著性水平(通常取0.05)
n = 测试的因子数量

当n=100时,这个概率是:1 - 0.95^100 ≈ 0.994

说白了,你测试的因子越多,找到假因子的概率就越大。这就是为什么很多量化团队搞"因子挖掘工厂",每天生成几千个因子,最后发现能用的没几个——大部分都是多重比较带来的假信号。

3.2.1 一个真实的教训

我记得有一次,团队里一个研究员兴奋地跑过来说发现了一个"神奇因子"——某只股票在特定节气前后的收益率显著高于平均水平。回测了10年数据,t统计量高达4.5,p值小于0.0001。

我当时就问了他一个问题:"你测试了多少个类似的模式?"

他愣了一下,说大概试了200多个节气、节日、特殊日期组合。

嗯,问题就在这里。200次测试,即使所有模式都是无效的,按照5%的显著性水平,预期也会有10个假阳性。而他找到的那个"神奇因子",很可能就是这10个之一。

后来我们做了样本外测试,结果不出所料——完全不显著。

3.3 如何应对:从诊断到重构

知道了问题根源,接下来就是怎么解决。我总结了一套自己的方法,分享给你:

3.3.1 过拟合的应对策略

  1. 简化模型:能用3个参数解决的问题,别用10个。奥卡姆剃刀在量化里同样适用。
  2. 交叉验证:把数据分成训练集、验证集、测试集。训练集用来拟合,验证集用来调参,测试集只用来做最终评估。
  3. 正则化:在损失函数中加入惩罚项,限制参数的大小。L1正则化还能帮你做特征选择。
  4. 滚动回测:不要只用固定时间段做回测。用滚动窗口的方式,看看因子在不同市场环境下的表现。

个人经验:我习惯在因子开发阶段就设置一个"过拟合检测清单"。每次提交因子前,必须通过至少3项检测。这听起来麻烦,但能省掉后面实盘踩坑的代价。

3.3.2 多重比较谬误的修正方法

对于多重比较问题,有几种经典的修正方法:

方法 原理 适用场景
Bonferroni校正 将显著性水平除以测试次数 测试次数较少(<100)
FDR控制(Benjamini-Hochberg) 控制假发现率,而非假阳性率 测试次数较多(>100)
随机化检验 通过打乱标签生成零分布 非参数场景

我个人更推荐FDR控制。为什么?因为Bonferroni校正太保守了,尤其是当你测试几百个因子时,它会把很多真正有效的因子也过滤掉。FDR控制则更平衡一些,它在控制假阳性的同时,还能保留一定的统计检验力。

3.4 知识体系总览

下面这张图,是我对本章内容的一个梳理。你可以把它当作一个快速参考:

因子失效的根源:知识体系 因子失效的根源 过拟合 多重比较谬误 症状识别 应对策略 交叉验证 Bonferroni校正 FDR控制 随机化检验 核心原则 样本内表现 ≠ 样本外表现 测试次数越多,假信号越多

3.5 写在最后

过拟合和多重比较谬误,说白了就是量化研究中的"认知偏差"。它们不会因为你经验丰富就自动消失,反而可能随着你挖的因子越来越多而愈发严重。

我个人的建议是:把因子失效的诊断当成一个常规流程,而不是出了问题才去查。每次开发新因子,都跑一遍过拟合检测和多重比较校正。虽然这会多花点时间,但比起实盘亏钱,这点成本真的不算什么。

记住一句话:在量化这个领域,活得久比赚得快更重要


专注资料整理