第二章:机器学习在因子挖掘中的定位
大家好,我是老张。今天咱们聊聊一个核心问题——机器学习在因子挖掘里到底扮演什么角色?
说实话,我见过不少朋友一上来就堆模型。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。我当时还纳闷,怎么测试集比随机猜还差?后来才明白,模型把训练集的噪声全学进去了,到了测试集上,这些噪声模式完全相反。
怎么判断过拟合?我给大家三个实用方法:
- 训练集 vs 测试集差距:如果训练集R² 0.8,测试集R² 0.3,差距超过0.5,基本就是过拟合。
- 因子数量 vs 样本数量:因子数量超过样本数量的1/10,就要警惕了。
- 时间序列交叉验证:用前3年数据训练,后1年数据测试。如果每年结果波动很大,说明模型不稳定。
嗯,这里要注意。金融数据有很强的时序相关性。你不能像做图像识别那样随机打乱数据。我习惯用「滚动窗口验证」——比如用2018-2020年数据训练,2021年验证;再用2019-2021年训练,2022年验证。这样能模拟真实交易场景。
因子挖掘的核心挑战
说完了模型,咱们聊聊因子挖掘本身到底难在哪。
我总结了三座大山:
| 挑战 | 具体表现 | 我的应对方法 |
|---|---|---|
| 信噪比极低 | 股票收益中,因子能解释的部分通常不到5%。剩下95%都是噪声。 | 用多周期、多市场的数据做验证。如果一个因子只在A股有效,在美股无效,那大概率是过拟合。 |
| 因子衰减 | 一个因子被发现后,很快就会被市场套利掉。有效性持续期越来越短。 | 关注因子逻辑,而不是因子本身。比如「低波动异象」背后是投资者行为偏差,这个逻辑不会消失。 |
| 多重比较偏差 | 你测试了1000个因子,总有几个看起来显著。但这可能是随机性造成的。 | 做Bonferroni校正,或者用FDR控制。简单说,p值要除以测试次数。 |
你想想看,这三座大山叠加在一起,因子挖掘就成了「在噪声中找信号,在信号中找逻辑,在逻辑中找稳健性」的过程。
我的个人习惯:
每次挖掘新因子,我都会先问自己三个问题:
- 这个因子的经济学逻辑是什么?
- 它能在不同市场、不同时间段都有效吗?
- 如果失效了,我能不能提前识别?
这三个问题答不上来,模型再漂亮我也不用。
知识体系总览
下面这张图是我自己整理的因子挖掘知识体系。你可以把它当成一张地图,随时回来看看自己走到哪了。
这张图里,我特意把「核心挑战」放在中间位置。为什么?因为不管你用线性模型还是机器学习模型,这三座大山都绕不过去。
我记得刚入行时,总想着用更复杂的模型来解决问题。后来发现,模型只是工具,真正决定成败的是你对数据的理解、对过拟合的控制、对因子逻辑的把握。
好了,这一章就聊到这。记住一句话:机器学习在因子挖掘中的定位,是帮你发现模式,而不是替你思考逻辑。
公众号:蓝海资料掘金营,微信deep3321