高级假设检验与无偏验证
第 2 章给了你 t 检验,第 6 章给了你样本外封条。这一章把两件事都推到极限:当正态假设靠不住、样本外只有一个、而你又忍不住试了很多次的时候,检验还能怎么救你。
四个工具按火力递增:置换检验(不依赖任何分布假设)、消融实验(策略里到底谁在干活)、Walk-Forward(检验研究流程本身)、夏普折减(给「试了一百次」定价)。它们是当代实证量化研究的标配四件套。
置换检验:手工制造平行世界
Section titled “置换检验:手工制造平行世界”t 检验要查正态分布表,本质是借「如果世界是正态的,随机波动长这样」来定位你的实测值。金融收益厚尾(第 2 章的 QQ 图见过),正态这座图书馆的地图是错的。置换检验的思路粗暴而彻底:不借地图,直接造世界。
零假设是「信号与收益的配对关系不存在」。若它为真,那么把配对关系打乱——每天该有的收益一天不少,只是「哪天算信号日」重新随机撒一遍——重新算出的统计量应该和实测值差不多。打乱几百次,就得到这个统计量在零假设下的完整分布(零分布),看实测值排在第几个百分点。全程没有任何分布假设。
手算一遍(完全枚举版):8 个交易日,其中 4 天有信号、4 天没有。收益如下:
| 信号日收益 | 非信号日收益 |
|---|---|
| +1.8, +2.2, −0.6, +1.5 | +0.2, −0.4, +0.3, −0.1 |
统计量取「信号日均值 − 非信号日均值」:。直觉上很神——4 个信号日里 3 个大涨。
零假设下,8 天里哪 4 天被标成「信号日」是完全随机的,共 种等可能分法,每一种都能算一个 。全部数一遍(这正是「置换」的完全枚举):全体 8 天的均值是 ;若选中的 4 天收益和为 ,则 ,要 必须 。收益最大的三天 2.2、1.8、1.5 合计 5.5,配上其余任何一天都 ≥ 4.9(配最小的 −0.6 恰好等于 4.9)——共 5 种;不含这三天的任何组合最多 。所以:
3/4 的信号日大涨,p 值却连 0.05 都过不了。 这就是完全枚举的震撼教育:小样本里的「神迹」,绝大多数经不起最老实的数数。对比一下:如果 4 个信号日恰好是收益前 4 名(全胜),那样的组合只有 1 种,,才算勉强显著——差之毫厘,谬以千里。
样本一大,枚举不动(250 天选 60 天是个天文数字),就用随机抽样代替完全枚举,这就是正式的置换检验。本章演示数据:250 个交易日、随机 60 天为信号日(置换检验演示:250 个交易日(合成),随机 60 日为信号日。信号日超额收益 N(0.6%, 1.1%)、非信号日 N(0.01%, 1.1%)(rets 已含全部噪声与效应,信号日均值约 +0.6%)。统计量 D = 信号日平均超额收益 − 非信号日平均超额收益(%);nullValues 为 500 次重新随机抽 60 个信号日重算的 D(销毁信号与日期的配对关系);pValue = (零分布中 D ≥ 实测 D 的次数 + 1) / 501),统计量 = 信号日平均超额收益 − 非信号日平均超额收益,随机重抽信号日 500 次:
实测 ,远在零分布右侧,——60 个信号日、每天 1.1% 的噪声里藏 0.6% 的真实效应,这个样本量足以看清它。
置换检验真正的要点在「保持什么不变」:上例保持每天收益不变、只打乱信号标签,检验的是「信号与日期的配对」。第 14 章保持脉冲日个数、只打乱时间位置,检验的是记忆。还有一种更讲究的——匹配对照:给每个信号日配一个行业、市值、波动都相近的非信号日再比较,检验的是「剔除这些共同因素之后还剩什么」。平行世界必须和真实世界同样公平,只销毁你想检验的那一件事——销毁得太多,检验就失去意义。
消融实验:谁在干活
Section titled “消融实验:谁在干活”策略上线了,回测赚钱,团队庆功。但它是靠哪个零件赚的?如果说不清,你其实不知道自己拥有什么——下次市场变了,你不知道该修哪里。
消融(ablation)的规则简单到不像一个方法:一次只关掉一个零件,其他原封不动,同屏对照。设一个三特征打分的策略,样本外年化如下:
| 配置 | 样本外年化 | 相对完整版的增量 |
|---|---|---|
| A + B + C(完整) | +8.0% | — |
| B + C(去掉 A) | +7.5% | A 贡献 +0.5% |
| A + C(去掉 B) | +2.0% | B 贡献 +6.0% |
| A + B(去掉 C) | +8.2% | C 贡献 −0.2% |
结论一眼可见:B 是主力(去掉它策略塌掉四分之三),A 可有可无,C 是负贡献(去掉反而更好——它不是特征,是噪声,还占着模型复杂度)。三行对照表,比任何归因玄学都可靠。
两条纪律:一次只动一样(同时去掉 A 和 C,你分不清是谁的功劳);对照组必须同时段重跑(拿今年的「去 A 版」和去年的「完整版」比,行情都不同,比了白比)。
Walk-Forward:检验流程,而不是参数
Section titled “Walk-Forward:检验流程,而不是参数”第 6 章的样本外封条有个先天局限:只能撕一次。而研究是迭代的过程——封条用掉之后,你改进策略、再来一次,第二次的「样本外」其实已经参与过决策了。Walk-Forward(滚动前推验证)是这个死结的工程解法:
把全样本按时间切成 段互不重叠的测试段。第 折:用测试段之前的全部数据走完你的研究流程(选参数、选规则、犯错、返工),然后用选出的参数在测试段上跑回测——只记录,不回头改。滚动推进,最后把 段测试结果按时间拼接:
| 折 | 训练段 | 测试段(OOS) |
|---|---|---|
| 1 | 第 1–3 年 | 第 4 年 |
| 2 | 第 1–4 年 | 第 5 年 |
| 3 | 第 1–5 年 | 第 6 年 |
| … | …(每次向前滚一年) | … |
关键理解:Walk-Forward 检验的不是某一组参数,而是你的研究流程。每一折的参数都可以不同(事实上应该不同——市场变了,流程选出的最优参数自然漂移);如果流程真有预测力,那么不管每折选出的参数是什么,拼接起来的 OOS 表现应该稳定为正。它回答的问题是:「把你的选参能力封装成机器,每个月重新跑一遍,能赚钱吗?」——这才是流程上线后真实的工作方式。
判读标准:拼接 OOS 的夏普、回撤与「全样本固定参数」的表现接近,且逐折方向一致 → 流程稳健;拼接 OOS 明显塌掉 → 你的「参数选择」其实是在背答案,样本内的最优参数在未来换不来钱。
夏普折减:给「试了一百次」定价
Section titled “夏普折减:给「试了一百次」定价”第 6 章讲过 :试 次,总有几个「显著」是蒙的。夏普折减(Deflated Sharpe Ratio, DSR,Bailey & López de Prado)把这个直觉做成可计算的账。它依赖一个漂亮的概率事实: 次纯随机的尝试里,最高分的期望约为 个标准差(正态假设下最大值的经典结论)。
手算一遍:你有一个 3 年样本、夏普 1.5 的策略。单次检验下,,——很硬的证据。
但如果它是你试了 100 组参数后挑出的冠军呢?纯随机试 100 次,最高分的期望:
也就是说,什么都不懂、纯靠抽签试 100 次,平均也能抽到一个 z ≈ 3.0 的「显著」结果(折算夏普约 1.75)。你的 z = 2.6 连抽签的平均冠军水平都不到——同样的夏普 1.5,试 1 次是证据,试 100 次后挑出来的是平凡事件。这就是折减:同一个数字,放在不同的「尝试次数」语境里,置信度完全不同。
DSR 的完整公式还计入收益的偏度与峰度(厚尾的收益序列更容易在短样本里冒出高夏普),方向一致:尝试次数越多、样本越短、分布越怪,同样的夏普越不值钱。实务上先记住结论性的纪律:报告冠军夏普时,必须同时报告「一共试了多少次」——不报尝试次数的夏普,默认按试过很多次处理。
伪代码:Walk-Forward 主流程
Section titled “伪代码:Walk-Forward 主流程”输入:全样本历史、研究流程 F(含参数选择规则)、折数 K输出:拼接 OOS 指标、逐折明细、尝试次数台账
第一步:切折 把全样本按时间切成 K 段互不重叠的测试段 第 i 折的训练段 = 测试段 i 之前的全部数据
第二步:逐折执行(每折独立,规则全程不变) 对每折 i: 参数_i ← 在训练段上跑流程 F (训练段内允许自由调参、返工——这正是被检验的能力) OOS_i ← 用参数_i 在测试段 i 上跑回测 (只记录结果,绝不回头修改任何东西) 拼接 OOS = OOS_1 ‖ OOS_2 ‖ … ‖ OOS_K
第三步:判读与记账 拼接 OOS 的夏普/回撤 vs 全样本固定参数版,同表对照 稳健:两者接近,逐折方向一致 危险:拼接 OOS 明显变差 → 流程在背答案 台账:整个研究累计试过的策略/参数组数 → 供夏普折减用- 置换打错对象。打乱日期、打乱股票标签、匹配对照——三种零假设各不相同。打乱方式必须对应「你想排除的那种巧合」,否则 p 值在回答一个你没问的问题。
- 消融不同步。去掉特征 B 之后,仓位规则、风控参数也「顺手优化」了一下——对照组被污染,增量算出来是几个变化的总和。一次只动一样,动之前先承诺不动别的。
- WF 之后又调参。看了 45 折的拼接结果,回头改了门禁阈值(上一章)或特征列表,再跑一遍 WF「确认」——第二次 WF 的数据已经参与过决策,封条又撕了一次。WF 保护的是流程,改流程就要换新的、更靠后的检验数据。
- 拿 DSR 折减「所有」结果。折减针对的是「挑最大值」的行为:报冠军才需要扣尝试次数。如果你如实报告全部 100 组的分布,没有挑选,就不存在折减问题——诚实本身就是免折减的。
至此,回测世界内部的防线全部建完:数据、统计、假设、引擎、指标、封条,加上本章的重武器。但还有最后一类坑,它不在回测内部,而在回测与真实 A 股之间——你的钱在一个有涨跌停、有除权、有排队失败规则的市场里交易。下一章,讲三道裂缝。