第二章:机器学习在因子挖掘中的定位

大家好,我是老张。今天咱们聊聊一个核心问题——机器学习在因子挖掘里到底扮演什么角色?

说实话,我见过不少朋友一上来就堆模型。LSTM、Transformer、XGBoost全上,结果呢?回测曲线漂亮得不行,实盘一跑就崩。为什么会这样?说白了,就是没搞清楚机器学习的定位。

传统线性模型 vs 机器学习模型

先看个最简单的对比。传统线性模型,比如线性回归,它假设因子和收益之间是直线关系。你想想看,市场有这么简单吗?

我举个例子。假设你发现市盈率(PE)和未来收益有关系。线性模型会说:PE越低,收益越高。但真实市场里,PE极低的股票往往是价值陷阱,PE极高的股票可能是成长股。这中间有个拐点,线性模型抓不住。

机器学习模型就不一样了。树模型可以自动切分数据,找到非线性关系。神经网络更是能拟合任意复杂函数。但问题来了——拟合能力强不代表预测能力强

核心区别:

  • 线性模型:解释性强,参数少,不容易过拟合。但表达能力有限。
  • 机器学习模型:表达能力强,能捕捉复杂模式。但容易过拟合,需要大量数据。

我在项目中遇到过一件事。有个团队用LightGBM做因子挖掘,回测夏普比做到3.0。结果实盘一个月,夏普比直接掉到0.5。查了半天,发现模型学到了一个「鬼特征」——某只股票在回测期间每天开盘前5分钟有异常成交量,模型就靠这个赚钱。实盘里这个模式消失了,模型自然就废了。

过拟合与泛化——避坑指南

过拟合是因子挖掘的头号杀手。我见过最夸张的案例,有人用100个因子拟合50只股票,R²做到0.99。这哪是挖掘因子?这是背答案。

我曾经踩过的坑:

刚开始做因子挖掘时,我用神经网络直接预测股票收益。输入层是100个技术指标,隐藏层3层,输出层1个。训练集R² 0.85,测试集R² -0.2。我当时还纳闷,怎么测试集比随机猜还差?后来才明白,模型把训练集的噪声全学进去了,到了测试集上,这些噪声模式完全相反。

怎么判断过拟合?我给大家三个实用方法:

  1. 训练集 vs 测试集差距:如果训练集R² 0.8,测试集R² 0.3,差距超过0.5,基本就是过拟合。
  2. 因子数量 vs 样本数量:因子数量超过样本数量的1/10,就要警惕了。
  3. 时间序列交叉验证:用前3年数据训练,后1年数据测试。如果每年结果波动很大,说明模型不稳定。

嗯,这里要注意。金融数据有很强的时序相关性。你不能像做图像识别那样随机打乱数据。我习惯用「滚动窗口验证」——比如用2018-2020年数据训练,2021年验证;再用2019-2021年训练,2022年验证。这样能模拟真实交易场景。

因子挖掘的核心挑战

说完了模型,咱们聊聊因子挖掘本身到底难在哪。

我总结了三座大山:

挑战 具体表现 我的应对方法
信噪比极低 股票收益中,因子能解释的部分通常不到5%。剩下95%都是噪声。 用多周期、多市场的数据做验证。如果一个因子只在A股有效,在美股无效,那大概率是过拟合。
因子衰减 一个因子被发现后,很快就会被市场套利掉。有效性持续期越来越短。 关注因子逻辑,而不是因子本身。比如「低波动异象」背后是投资者行为偏差,这个逻辑不会消失。
多重比较偏差 你测试了1000个因子,总有几个看起来显著。但这可能是随机性造成的。 做Bonferroni校正,或者用FDR控制。简单说,p值要除以测试次数。

你想想看,这三座大山叠加在一起,因子挖掘就成了「在噪声中找信号,在信号中找逻辑,在逻辑中找稳健性」的过程。

我的个人习惯:

每次挖掘新因子,我都会先问自己三个问题:

  • 这个因子的经济学逻辑是什么?
  • 它能在不同市场、不同时间段都有效吗?
  • 如果失效了,我能不能提前识别?

这三个问题答不上来,模型再漂亮我也不用。

知识体系总览

下面这张图是我自己整理的因子挖掘知识体系。你可以把它当成一张地图,随时回来看看自己走到哪了。

机器学习因子挖掘知识体系 数据层 价格/财务/另类数据 因子层 传统因子/机器学习因子 模型层 线性/树/神经网络 核心挑战:信噪比低 + 因子衰减 + 多重比较偏差 过拟合控制 正则化/交叉验证 样本外测试 泛化能力 多市场验证 时间序列稳定性 逻辑可解释 经济学逻辑 行为金融学解释 核心原则 简单模型 + 强逻辑 > 复杂模型 + 弱逻辑 宁可错过,不要做错

这张图里,我特意把「核心挑战」放在中间位置。为什么?因为不管你用线性模型还是机器学习模型,这三座大山都绕不过去。

我记得刚入行时,总想着用更复杂的模型来解决问题。后来发现,模型只是工具,真正决定成败的是你对数据的理解、对过拟合的控制、对因子逻辑的把握

好了,这一章就聊到这。记住一句话:机器学习在因子挖掘中的定位,是帮你发现模式,而不是替你思考逻辑。


公众号:蓝海资料掘金营,微信deep3321