【AI+量化实战 #11】AI+量化里最危险的幻觉:数据泄漏、伪造数据、事后解释

风险提示:本文仅用于技术演示,不构成投资建议。AI 生成的任何结论都只是研究辅助,不能替代独立判断。

很多人以为 AI 量化的风险是「AI 不够聪明」,其实恰恰相反——AI 太「自信」了。它会一本正经地用错数据、编造数字、给任何结果都配上看似合理的解释。这三种「幻觉」才是 AI 量化里最危险的坑。

本文你将得到什么

  • 三个 AI 幻觉反例的可运行代码:未来函数、伪造财务数据、事后解释;
  • 用真实行情和财报数据交叉验证 AI 输出的方法;
  • 一套可复用的「AI 输出体检清单」;
  • 一个 LLM 审计 Prompt 模板,可直接接入你自己的大模型。

一、AI 量化的三种幻觉

  1. 数据泄漏:模型在训练或回测时偷看了「未来」的数据,表现好得离谱,实盘一跑就崩;
  2. 伪造数据:AI 把不存在的财务数字、行情、公告说得头头是道,你若不交叉验证就会信以为真;
  3. 事后解释:结果出来之后,AI(或你自己)总能编出一套听上去合理的因果,但它没有任何预测力。

下面分别用代码演示这三个坑,以及怎么拦。

二、反例一:数据泄漏(未来函数)

数据泄漏最常见的形态就是「未来函数」——用明天的涨跌决定今天买不买。我们拉取贵州茅台(600519)近 89 个交易日的日线,对比两版策略:

import os
import pandas as pd
import mairui

licence = "LICENCE-66D8-9F96-0C7F0FBCD073" # 演示证书,演示证书(读者复制即用,无需替换)
client = mairui.Client(licence)

拉日线,字段 t=日期 o=开 c=收 h=高 l=低 v=量 pc=前收

rows = client.stock_history(code="600519", period="d",
st="20260401", et="20260814", dividend="n")
df = pd.DataFrame(rows)

泄漏版:用明天的收盘价(close.shift(-1))作信号

df["signal_leak"] = df["c"].shift(-1) > df["c"]
df["ret"] = df["c"].shift(-1) / df["c"] - 1

干净版:用昨天的涨跌(close.shift(1))作信号

df["signal_clean"] = df["c"].shift(1) < df["c"]

leak_ret = df[df["signal_leak"]]["ret"].mean() * 100
clean_ret = df[df["signal_clean"]]["ret"].mean() * 100
print(f"泄漏版平均次日收益 {leak_ret:+.2f}%")
print(f"干净版平均次日收益 {clean_ret:+.2f}%")

真实运行结果:

泄漏版平均次日收益 +1.26%
干净版平均次日收益 -0.30%

同样是「次日收益」,只是信号时点不同,一个 +1.26%、一个 -0.30%。差值来自未来函数——实盘里你不可能在收盘前知道明天涨不涨。看到回测收益高得反常,第一反应就该查有没有 shift(-1)。

三、反例二:伪造财务数据

AI 最大的毛病是「不懂装懂」:你问它营收,它可能凭空给你一个漂亮数字。拦截办法只有一个——和真实数据交叉验证。我们用财报接口拉出真实数据,再对「AI 声称的数字」做体检:

拉真实财报:stock_income 返回按 jzrq 排序的列表,yysr=营业收入 jlr=净利润

items = client.stock_income(code="600519")
annuals = [it for it in items if str(it.get("jzrq", "")).endswith("-12-31")]
latest = annuals[-1]
real_yysr = latest["yysr"] # 单位:元
print(f"真实营业收入 {real_yysr/1e8:.2f} 亿元")

真实 2025 年报:营业收入 1688.38 亿元,净利润 853.10 亿元。

现在假设 AI 给了三条声明,逐一体检:

def check_fabricated(claimed, real, prev):
issues = []
if claimed <= 0:
issues.append("数值非正,直接不可信")
if real > 0:
ratio = claimed / real
if ratio > 5:
issues.append(f"是真实值的 {ratio:.1f} 倍,量级明显异常")
elif ratio > 1.5:
issues.append(f"较真实值高 {ratio-1:.0%},需复核口径")
return issues or ["与真实数据一致"]

运行结果:

AI 声称:营业收入 5000 亿元 → [拒绝] 较真实值高 196%,需复核口径
AI 声称:净利润 2000 亿元 → [拒绝] 较真实值高 134%,需复核口径
AI 声称:营业收入 -80 亿元 → [拒绝] 数值非正,直接不可信

三条声明全部被拦下。「量级对比 + 同比对比 + 非正数」三层规则,就能挡住绝大多数 AI 编造的数字。

四、反例三:事后解释(叙事谬误)

最隐蔽的是事后解释:一只股票涨了,AI 能说「基本面支撑 + 题材催化 + 技术突破」;跌了,AI 也能说「估值偏高 + 缺乏催化 + 技术走弱」。两套话对涨跌都成立、都不可证伪。

def posthoc_explain(direction):
if direction == "up":
return "受消息面利好与资金流入推动,情绪回暖,放量上行。"
return "受获利盘回吐与消息面扰动影响,情绪谨慎,缩量调整。"

print("涨了 →", posthoc_explain("up"))
print("跌了 →", posthoc_explain("down"))

输出:

涨了 → 受消息面利好与资金流入推动,情绪回暖,放量上行。
跌了 → 受获利盘回吐与消息面扰动影响,情绪谨慎,缩量调整。

既然涨跌都能「解释」,这套解释就没有预测价值。判断一个研究靠不靠谱,要看它能不能事前给出可证伪的判断,而不是事后讲故事。

五、AI 输出体检清单

把上面的经验沉淀成六条,每条都可以写成代码:

  1. 字段正确性:确认接口返回字段名(如 mairui 日线是小写 close/open/high/low/volume),AI 常写成大写;
  2. 未来函数:全局搜索 shift(-、iloc[::-1],命中即前视偏差;
  3. 单日涨跌边界:主板股票单日涨跌超过 ±10%(ST 为 ±5%)即为脏数据/伪造数据;
  4. 量级对比:AI 给的数字与真实值偏差 >50%,先默认可疑;
  5. 非正数/空值:营收、净利润、价格为非正或空,直接拒绝;
  6. 拒绝事后解释:任何结论必须事前给定、事后只看是否兑现。

六、LLM 审计 Prompt

把体检结果喂给 LLM,让它做二次审计:

你是一名量化数据审计员。请审查以下 AI 量化流程是否存在幻觉风险。
- 反例1:泄漏版 37 笔、平均次日收益 +1.26%;干净版 37 笔、-0.30%。
- 反例2:AI 声称营收 5000 亿元,真实值 1688.38 亿元。
请输出:1) 是否存在数据泄漏?2) 最可疑的伪造声明?3) 为避免事后解释应坚持什么?4) 是否建议直接决策?

没有配置 LLM_API_KEY / LLM_BASE_URL 时,脚本自动退回规则体检,保证可复现。

七、完整脚本与常见坑

依赖安装:

pip install mairui pandas numpy requests

完整脚本(含三个反例 + 体检清单 + LLM 审计入口)已整理归档,核心函数:

  • load_history():拉日线并统一字段;
  • leaked_strategy() / clean_strategy():未来函数版 vs 干净版;
  • check_fabricated_claim():伪造财务数据体检;
  • posthoc_explain():演示叙事谬误;
  • sanity_check_daily_returns():单日涨跌边界检查。

常见坑:

  1. 接口字段名先 probe 再写代码:不要凭记忆猜,AI 更会猜错大小写;
  2. 财报单位是元不是亿元:yysr 返回值是元,换算亿元要 /1e8;
  3. 数据泄漏不止 shift(-1) 一种:还有 iloc[::-1]、训练集测试集混用、用未来时点的截面数据;
  4. 交叉验证比「信 AI」更省事:一条量级对比规则就能挡住大部分伪造数字。

小结

AI 量化的三大幻觉——数据泄漏、伪造数据、事后解释——本质上都指向同一件事:AI 需要稳定、可复现的数据底座,也需要一道「体检闸门」。把真实数据交叉验证、静态体检、拒绝事后解释这三件事固化进流程,AI 才能当助手而不是当「股神」。

下篇(也是本系列收官):【AI+量化实战 #12】从自然语言到可执行策略:LLM 生成代码的边界与校验。


代码与接口文档参考:https://github.com/MaiRuiApi

posted @ 2026-09-14 08:42  量化分析码农  阅读(9)  评论(0)    收藏  举报