LLM 能识破造假回测吗?一个让四个模型露出马脚的基准测试
你是一个量化基金的风险审计员。一个研究员提交了一个策略,回测年化收益 25%,夏普比率 2.1,最大回撤 8%。看起来很美。
LLM 能识破造假回测吗?一个让四个模型露出马脚的基准测试
一个金融工程师的噩梦
你是一个量化基金的风险审计员。一个研究员提交了一个策略,回测年化收益 25%,夏普比率 2.1,最大回撤 8%。看起来很美。
但你怀疑这个回测有问题。也许研究员在训练集上做了测试(look-ahead bias),也许只选了没退市的股票(survivorship bias),也许调参调到刚好(overfitting)。
你决定用 LLM 来审计。你把策略代码喂给 GPT-4o,问"这个回测有什么问题?"
LLM 说:"检测到 look-ahead bias,训练集和测试集有重叠。"
你很满意。但你有没有想过:LLM 说有问题,就真的有问题吗?
Makar Ulesov 等人(MBZUAI + 匹兹堡大学)这篇论文的核心发现就是:大多数 LLM 审计器是偏执狂——它们能找到真问题,但也会把干净的策略打成有问题的。
实验设计的精妙之处
这篇论文的实验设计非常聪明。大多数 LLM-finance benchmark 测的是"LLM 能不能找到回测中的缺陷"。这篇论文测的是"LLM 能不能区分真的有缺陷和真的没问题"。
区别在哪?校准(calibration),不只是召回(recall)。
论文构建了 96 个测试项,组成 48 对。每一对里:
- 一个有缺陷的版本:植入了一个已知的方法论错误(look-ahead、survivorship bias、data snooping 等 8 类)
- 一个干净的对照版本:策略、日期、代码风格、标签、报告格式全部一样,只改了一个方法论细节
数字让人冷汗直冒
论文测了四个模型:DeepSeek V4 Flash、gpt-4o-mini、gemini-2.5-flash-lite、gpt-4.1-mini。在"open code"(不给任何提示,直接问"这段代码有什么问题")条件下:
| 模型 | 缺陷召回率 | 干净策略误报率 | 每百条干净提交产生的多余审计线索 |
|---|---|---|---|
| DeepSeek | 72.9% | 93.8% | 93.8 |
| gpt-4o-mini | — | 38/48 | 79.2 |
| 其他模型 | 类似 | 类似 | 类似 |
你可能会想:那给 LLM 一些提示就好了。论文测了三种 prompt 条件:
- Open:不给任何提示
- Closed:给出 8 类缺陷的定义
- Clean-aware:在 closed 基础上,告诉模型"干净策略很常见"
| 条件 | 缺陷召回 | 误报率 |
|---|---|---|
| open code | 72.9% | 93.8% |
| closed code | 100.0% | 20.8% |
| clean-aware code | 100.0% | 0.0% |
"召回率容易,校准难"
论文最精辟的一句话是:"Perfect recall is not complete audit quality."
翻译过来就是:找到所有问题不等于审计质量高。 如果你的审计器把所有东西都标记为"有问题",召回率是 100%,但它毫无用处——因为你还是得人工检查每一个。
这和医学诊断里的"敏感度 vs 特异度"是同一个问题。一个把所有人都诊断为"有病"的测试,敏感度 100%,但特异度 0%,毫无临床价值。
论文还测了一个更细的维度:all-three specificity——同时满足"正确分类 + 正确定位证据 + 给出正确修复建议"。在 clean-aware code 条件下,DeepSeek 的 all-three specificity 只有 87.5%。也就是说,即使它正确识别了缺陷,在 6 个案例中给出了错误的修复建议。
模型能指出问题在哪一行,但给出的修复方案是错的。 这比单纯的误报更危险——因为你会以为问题已经解决了。
为什么这很重要
这篇论文不只是关于金融回测审计。它揭示了一个更普遍的问题:
LLM 作为审计/评审工具时,召回率和校准是两个独立的维度,只看召回率会误导。
这个结论适用于所有用 LLM 做"找问题"的场景:
- 代码审查:LLM 能找到 bug,但也会把好代码标记为有 bug
- 安全审计:LLM 能发现漏洞,但也会把正常代码标记为恶意
- 论文评审:LLM 能找到方法论问题,但也会把合理的方法标记为有问题
- 合规检查:LLM 能发现违规,但也会把合规操作标记为违规
Clean-Aware Prompting 的启示
论文中最实用的发现是 clean-aware prompting 的效果。只是在 prompt 里加一句"干净策略很常见",就把 DeepSeek 的误报率从 20.8% 降到了 0.0%,同时召回率不变。
这个发现的意义不限于金融审计。它暗示了一个更深的原理:LLM 的判断受先验概率影响。 如果你只告诉它"找问题",它会假设所有输入都有问题。如果你告诉它"大部分输入是干净的",它会调整判断阈值。
这和人类审计员的行为一样。如果你告诉一个审计员"这个团队以前出过很多问题",他会变得偏执,把什么都标记为异常。如果你告诉他"这个团队一向很规范",他会更理性地分配注意力。
LLM 的"偏执"不是 bug,是 prompt 设计的先验偏差。
诚实的评价
论文有几个局限:
1. 只测了 8 类缺陷。 真实回测的问题远不止 8 类,还有数据泄漏、过拟合、选择性报告等更微妙的问题。
2. 只测了 4 个模型。 而且都是轻量级模型。更强大的模型(GPT-4、Claude Opus)可能表现不同。
3. 模拟环境。 实验用的是构造的回测代码,真实策略代码可能更复杂、更难判断。
4. Clean-aware 效果的泛化性。 这个效果在 DeepSeek 上很好,但在其他模型上不明显。为什么?论文没有深入分析。
但即使如此,这篇论文的贡献在于:它把"LLM 审计质量"从一个一维问题(召回率)变成了二维问题(召回率 + 校准),并给出了一个干净的实验范式来测量这两个维度。 以后任何用 LLM 做"找问题"的系统,都应该用类似的 paired benchmark 来评估。
论文链接: Can LLMs Catch a Rigged Backtest? A Clean-Control Calibration Benchmark
作者: Makar Ulesov, Vladislav Smirnov, Omar Ibrahim, Arsenii Bobovnikov(MBZUAI + 匹兹堡大学)
核心结论: LLM 审计器的召回率容易做到 100%,但校准很难。在 paired clean-control benchmark 上,open prompt 的误报率高达 93.8%。Clean-aware prompting 能同时达到 100% 召回和 0% 误报,但效果因模型而异。只报告召回率会严重高估审计质量。