LLM 挖因子:别被漂亮回测骗了


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 上拼表达式”的那类挖掘,边际收益确实在下降。原因很简单:

  1. 数据越来越透明:大家用的是类似的数据源。
  2. 工具越来越普及:回测框架、AutoML、遗传编程、LLM 都降低了研究门槛。
  3. Alpha 生命周期越来越短:一个简单规律被更多人发现后,很快会拥挤、衰减甚至反转。
  4. 表达式因子容易同质化:换一堆 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=37threshold=1.73 有效,旁边参数全死,那大概率不是 Alpha,是噪声。

第五层:组合贡献

单因子表现好,不代表组合里有价值。最终要看:

  • 和已有因子的相关性
  • 加入组合后是否提升收益/回撤比
  • 是否降低尾部风险
  • 是否改善不同 market regime 的表现
  • 是否只是增加了同一类风险暴露

6. 真正应该警惕的“AI 因子幻觉”

LLM 做因子研究,最危险的不是输出错误代码,而是输出一种研究确定性的幻觉

典型路径是:

  1. LLM 生成一个复杂因子。
  2. 回测结果很好。
  3. LLM 给出一套很顺的经济解释。
  4. 研究员看到收益曲线和解释都不错,于是降低怀疑。
  5. 实盘后失效。

这个过程很符合人性。因为人天然喜欢“结果 + 故事”的闭环。

但量化研究必须反人性:

  • 结果越好,越要先怀疑数据泄漏。
  • 参数越精巧,越要怀疑过拟合。
  • 解释越顺,越要检查是否事后归因。
  • 因子越复杂,越要看交易成本和容量。

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 可以让研究员更快提出假设、更快写实验、更快发现验证漏洞”,我认为这是非常现实的方向。

量化研究的核心,从来不是让机器替你相信一个因子,而是让机器帮你更快地否定错误的因子。


文章作者: Onefly
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Onefly !
评论
  目录