LLM 挖因子:别被漂亮回测骗了
最近关于“用 LLM 挖量化因子”的讨论挺热。表面上看,这是一个很性感的话题:让大模型阅读数据、理解市场、自动提出因子,再通过回测筛选 Alpha。
但评论区的反馈很真实。大家并没有被“AI 自动挖因子”这个叙事完全说服,反而把几个核心风险都点出来了:过拟合、数据泄漏、因子挖掘边际收益下降,以及 LLM 在效率上未必打得过传统搜索。
我的判断也比较接近这个方向:
LLM 不是因子研究的终点,更不是免费 Alpha 印钞机。它更像一个研究助理,可以帮你生成假设、整理逻辑、扩展表达式,但真正决定结果的,仍然是数据、验证框架、风控、执行和失效监控。
这篇文章就从评论区争议出发,把“LLM 挖因子”这件事拆开看。
评论区的核心质疑
评论区观点大致可以归成 6 类。
flowchart TD
A[LLM 挖量化因子争议] --> B[因子挖掘边际收益下降]
A --> C[过拟合风险]
A --> D[数据泄漏风险]
A --> E[效率不如传统搜索]
A --> F[可解释性与经济逻辑不足]
A --> G[真正价值可能在研究流程]
B --> B1[Alpha 拥挤]
B --> B2[全民挖因子]
C --> C1[表达式空间过大]
C --> C2[样本内漂亮]
D --> D1[未来函数]
D --> D2[时间戳错位]
E --> E1[LLM 生成慢]
E --> E2[传统遗传算法/网格搜索更直接]
G --> G1[风控]
G --> G2[组合构建]
G --> G3[失效监控]
这些质疑不是泼冷水,而是非常必要。因为量化研究最危险的地方,从来不是“找不到好看的回测”,而是太容易找到好看的回测。
1. 因子挖掘本身的意义在下降吗?
评论区里最尖锐的一类观点是:
- “挖因子未来就是死路一条,时效性越来越差。”
- “我觉得因子挖掘意义不大,不如做风控模型。”
- “大家都挖等于大家都没挖。”
这个判断有点刺耳,但很现实。
传统意义上的因子挖掘,尤其是“在 OHLCV 上拼表达式”的那类挖掘,边际收益确实在下降。原因很简单:
- 数据越来越透明:大家用的是类似的数据源。
- 工具越来越普及:回测框架、AutoML、遗传编程、LLM 都降低了研究门槛。
- Alpha 生命周期越来越短:一个简单规律被更多人发现后,很快会拥挤、衰减甚至反转。
- 表达式因子容易同质化:换一堆 rolling window、rank、zscore,本质上可能还是同一个动量、反转或波动率暴露。
所以,问题不是“因子挖掘有没有用”,而是单纯挖表达式因子的投入产出比越来越差。
真正长期有价值的部分,可能会从“找一个新公式”迁移到:
- 数据独占性
- 执行效率
- 风控约束
- 组合层优化
- regime detection / 市场状态识别
- 因子失效监控
- 事件驱动和非结构化数据处理
也就是说,未来的竞争不是“谁能生成更多因子”,而是“谁能更快判断哪些因子不该信”。
2. 过拟合是最大的坑
第二类争议集中在过拟合。
这是我认为最重要的问题。LLM 挖因子的最大风险,不是它不够聪明,而是它太会编故事。
一个大模型可以很快生成很多看起来有经济含义的因子解释:
- “资金流入导致短期趋势延续”
- “波动率压缩后的突破具有更高胜率”
- “成交量异常代表信息提前反应”
- “价格偏离均值后存在修复动能”
这些解释都听起来对。但在量化里,听起来对没有意义,重要的是:
- 是否跨市场有效?
- 是否跨年份有效?
- 是否在交易成本后有效?
- 是否对参数不敏感?
- 是否在样本外仍然有效?
- 是否只是某一段行情的偶然产物?
LLM 的问题在于,它可以在一个巨大表达式空间里不断试错。只要你给它足够多自由度,它总能找到某些样本内表现很漂亮的组合。
这不是智能,这是多重检验。
flowchart LR
A[大量候选因子] --> B[样本内回测]
B --> C{筛选 Top 表现}
C --> D[漂亮收益曲线]
D --> E[补一个合理解释]
E --> F[误以为发现 Alpha]
F --> G[实盘/样本外失效]
很多“AI 挖出来的神因子”,本质上可能只是:
在足够大的搜索空间里,随机撞到了一段历史噪声。
所以,LLM 因子研究必须把验证流程放在第一位,而不是把生成能力放在第一位。
3. 数据泄漏比过拟合更隐蔽
过拟合至少还能通过样本外测试暴露,数据泄漏更麻烦,因为它会让你误以为模型真的强。
量化里的数据泄漏不一定是明目张胆地用了未来价格。更常见的是一些细节:
- 用了当前 K 线收盘后才知道的数据,却在当前 K 线开仓。
- 使用了未来才修订完成的基本面数据。
- 因子归一化时不小心用了全样本均值和方差。
- 标签构造和特征构造时间戳错位。
- 横截面排序时包含了当时不可交易或未来才上市的资产。
- 新闻、财报、公告数据没有使用真实发布时间。
LLM 参与后,这个风险会更高。因为它生成代码时可能不会严格理解交易时点、数据可得性和回测引擎规则。
一个看起来很小的 shift 错误,就足以把普通因子变成“神因子”。
sequenceDiagram
participant Data as 数据源
participant Factor as 因子计算
participant Signal as 信号生成
participant Trade as 交易执行
Data->>Factor: t 时刻可见数据
Factor->>Signal: 生成 t+1 可执行信号
Signal->>Trade: 下一根 K 线执行
Note over Data,Trade: 正确流程:任何一步都不能偷看未来
Data-->>Factor: t+1 收盘后才知道的数据
Factor-->>Signal: 却用于 t 时刻信号
Note over Factor,Signal: 这就是隐蔽的数据泄漏
因此,LLM 挖因子如果没有严格的时序测试和泄漏检查,结果越漂亮越应该怀疑。
4. LLM 的效率未必比传统搜索高
评论区还有一个很关键的点:LLM 不一定比传统搜索效率高。
这点我同意一半。
如果任务是:
- 在固定表达式空间里搜索参数
- 对 rolling window、阈值、rank 方式做组合
- 从一组算子里构造公式
- 大规模跑回测并筛选指标
那传统方法通常更直接:
- 网格搜索
- 贝叶斯优化
- 遗传算法
- AutoML
- symbolic regression
- 因子库批量评估
这些方法便宜、稳定、可复现,也更适合并行计算。
LLM 真正擅长的不是“暴力搜索”,而是:
- 把自然语言假设转成可测试因子
- 从论文、研报、新闻里提炼交易假设
- 帮研究员设计对照实验
- 发现验证流程里的漏洞
- 解释因子暴露和失效原因
- 生成分析脚本和报告
换句话说:
LLM 不应该替代搜索器,而应该站在搜索器前后:前面生成更好的假设,后面帮你审判结果。
5. 一个更合理的 LLM 因子研究流程
如果要把 LLM 放进因子挖掘流程,我更认可下面这种位置。
flowchart TD
A[研究假设] --> B[LLM 生成候选因子逻辑]
B --> C[人工/规则约束可交易性]
C --> D[传统搜索器批量验证]
D --> E[严格样本外测试]
E --> F[稳健性检验]
F --> G[组合与风控层评估]
G --> H[小资金 dry-run / paper trading]
H --> I[失效监控]
E --> E1[时间切分]
E --> E2[Walk-forward]
E --> E3[跨市场]
F --> F1[参数扰动]
F --> F2[交易成本敏感性]
F --> F3[换数据源复核]
这里的关键是:LLM 不直接决定“这个因子可用”,它只负责提出候选和辅助分析。最终裁判必须是验证框架。
我会把一个候选因子的验收拆成几层。
第一层:经济逻辑
至少要回答:
- 这个因子捕捉的是趋势、反转、流动性、风险补偿,还是行为偏差?
- 为什么市场会长期给这个收益?
- 谁是收益的支付方?
- 这个收益为什么不会被完全套利掉?
如果解释只能停留在“回测表现不错”,那不够。
第二层:时序正确性
重点检查:
- 特征是否只使用当时可见数据?
- 信号是否滞后一根或多根 K 线执行?
- rolling / expanding 统计是否只用历史窗口?
- 标准化是否偷用了全样本?
- 新闻和公告是否使用真实发布时间?
第三层:样本外表现
不要只看一个 train/test split。至少要看:
- 按年份拆分
- 按行情 regime 拆分
- walk-forward
- 不同交易对 / 不同市场
- 不同费率和滑点假设
第四层:参数稳定性
一个真正稳健的因子,不应该只在某个神奇参数点有效。
如果只有 window=37、threshold=1.73 有效,旁边参数全死,那大概率不是 Alpha,是噪声。
第五层:组合贡献
单因子表现好,不代表组合里有价值。最终要看:
- 和已有因子的相关性
- 加入组合后是否提升收益/回撤比
- 是否降低尾部风险
- 是否改善不同 market regime 的表现
- 是否只是增加了同一类风险暴露
6. 真正应该警惕的“AI 因子幻觉”
LLM 做因子研究,最危险的不是输出错误代码,而是输出一种研究确定性的幻觉。
典型路径是:
- LLM 生成一个复杂因子。
- 回测结果很好。
- LLM 给出一套很顺的经济解释。
- 研究员看到收益曲线和解释都不错,于是降低怀疑。
- 实盘后失效。
这个过程很符合人性。因为人天然喜欢“结果 + 故事”的闭环。
但量化研究必须反人性:
- 结果越好,越要先怀疑数据泄漏。
- 参数越精巧,越要怀疑过拟合。
- 解释越顺,越要检查是否事后归因。
- 因子越复杂,越要看交易成本和容量。
LLM 可以帮你讲故事,但你不能让故事替代证据。
7. 我对 LLM 挖因子的最终判断
我的结论很简单:
LLM 挖因子有用,但它的价值不在“一键发现 Alpha”,而在“提高研究假设生产和验证流程的效率”。
它适合做:
- 研究助理
- 假设生成器
- 文献和研报解析器
- 代码生成器
- 回测报告分析器
- 风险审计助手
它不适合直接做:
- Alpha 最终裁判
- 无约束公式搜索器
- 绕过样本外验证的捷径
- 用漂亮解释包装过拟合的工具
未来真正有竞争力的量化系统,可能不是“LLM 自动生成 10000 个因子”,而是:
flowchart LR
A[非结构化信息] --> B[LLM 提炼假设]
C[结构化行情数据] --> D[传统搜索与回测]
B --> D
D --> E[严格风控与组合优化]
E --> F[Dry-run / 实盘监控]
F --> G[失效检测]
G --> B
这套闭环里,LLM 是一环,不是全部。
结语:因子挖掘不是死了,是变难了
我不认为因子挖掘已经没意义。更准确地说,是低门槛因子挖掘的红利在消失。
当 LLM 降低了表达式生成门槛,“会生成因子”这件事本身就不再稀缺。真正稀缺的是:
- 高质量数据
- 严格验证框架
- 对市场结构的理解
- 成本和容量意识
- 风控与组合能力
- 因子失效后的快速反应
所以,如果有人说“LLM 可以自动挖 Alpha”,我会保持怀疑。
但如果有人说“LLM 可以让研究员更快提出假设、更快写实验、更快发现验证漏洞”,我认为这是非常现实的方向。
量化研究的核心,从来不是让机器替你相信一个因子,而是让机器帮你更快地否定错误的因子。
币安美股交易来了:用 USDT 买股票的新入口
链上行为学:如何判断一个币是不是“假流动性”