多重检验问题:为什么试的因子越多,"发现"越不可信
我的掌握程度:
先掌握这个答案
多重检验问题(Multiple Testing):同一数据上检验m个假设时,至少一个假阳性的概率=1−(1−α)^m。m=100、α=5%时≈99.4%——几乎必然「发现」点什么。量化版本:「挖了50个因子,3个显著」的显著性要按50次尝试折价。对策阶梯:①Bonferroni校正:阈值α/m(严格,假阴性多);②FDR控制(Benjamini-Hochberg,较温和);③样本外验证(最有效:新数据不复现=假);④研究纪律:先写假设再检验、登记全部尝试次数(q-085实验日志)。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
本阶段实战方法 · 每个统计量都要带单位和假设
计算收益、波动、回归、显著性或相关性时,先明确样本和推断条件。
- 写清收益频率、样本数、缺失处理、是否含费用;百分数与小数不可混用。
- 手算一组小样本,再用代码复算;区分算术均值年化、复合年化和年化波动。
- 解释假设不成立会发生什么:自相关、肥尾、非平稳与多次试验都会影响结论。
使用边界
- p值不是原假设为真的概率,也不是策略未来盈利概率。
- 日波动×√252依赖时间聚合假设;252是教学常用交易日数,实际市场与口径可能不同。
背景 · 从一个困惑说起
你随机生成了100个「假因子」(纯噪声,与收益毫无关系),逐一做5%显著性检验。按定义,其中约5个会「碰巧显著」——p值<0.05,IC看着像模像样。如果不汇报试了100个、只展示那5个漂亮的,一份完全虚假的「因子发现报告」就诞生了。
由此产生的问题
多重检验为什么必然制造假发现?量化研究里它的危害有多隐蔽?有哪些系统性对策?
核心概念
多重检验问题(Multiple Testing):同一数据上检验m个假设时,至少一个假阳性的概率=1−(1−α)^m。m=100、α=5%时≈99.4%——几乎必然「发现」点什么。量化版本:「挖了50个因子,3个显著」的显著性要按50次尝试折价。对策阶梯:①Bonferroni校正:阈值α/m(严格,假阴性多);②FDR控制(Benjamini-Hochberg,较温和);③样本外验证(最有效:新数据不复现=假);④研究纪律:先写假设再检验、登记全部尝试次数(q-085实验日志)。
为什么需要它
①量化界的头号统计敌人:BRAIN上试1000个表达式、回测500组参数——不校正的「显著」全是海市蜃楼;②学术镜像:因子动物园(factor zoo)——300+「显著」因子中,复现研究(Hou, Xue, Zhang 2020)发现大部分经多重检验校正后失效;③与过拟合同源:过拟合是模型层面的多重尝试,多重检验是统计层面的——两把刀砍向同一受害者(你的样本外收益)。
实际应用场景
实务守则:报告因子时必须声明「这是第N次尝试」;机构因子库的入线标准随尝试次数水涨船高(试得越多,t值门槛越高);「真发现」的金标准=新鲜样本外数据复现(HARSH但诚实)。
与之前知识的联系
q-249的p值是单次检验的语言,本题把它放进「重复尝试」的真实语境;q-085的无限调参、q-510的Deflated Sharpe(阶段6)都是多重检验的具体形态——这一题是它们的共同祖先。
⚠ 常见误解
- 每个检验单独5%就没问题:假阳性随检验次数指数累积——这是数学不是运气
- Bonferroni太保守所以不用:保守恰恰是设计目的(宁缺毋滥);更精细的FDR是折中,两者都优于不校正
- 样本外验证也是多重检验的牺牲品:如果反复「看样本外→改→再看」,样本外也被污染(q-859研究污染)——终极纪律是留一块从未触碰的数据
🛠 本题实践任务
运行上述模拟,然后回答两个问题:①你试了80个因子、6个显著(5%水平),按Bonferroni新阈值是多少?还剩几个显著?②为什么「先写假设、再跑数据」能从源头减少有效尝试次数?
💡 提示(先自己想5分钟再看)
①新阈值=0.05/80≈0.0006,t值门槛约3.9+;②预注册让「尝试」变成「验证」——你只检验真正有逻辑的假设。
✅ 验收标准
两个问题的书面回答。从今天起,你的每份因子报告开头都应有一行:「本结果为第N次尝试」。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(p值、显著性水平、假设检验),再用案例、公式和代码帮助理解。此功能需要先启用服务。