752 字
4 分钟
第三部分:交叉验证与泄漏 —— 标准操作全是雷
机器学习的”标准评估流程”搬到金融数据上几乎全错。这一页讲泄漏的机制和修复方案——低频研究同样中招。
为什么标准交叉验证在金融必错
K-Fold 交叉验证的标准做法:随机打乱样本,切成 K 份轮流做测试集。在 i.i.d. 数据上完美,在金融时间序列上是灾难:
- 随机打乱 = 让未来混进过去:测试集里 3 月 5 日的样本,训练集里有 3 月 4 日和 3 月 6 日的样本——三者的标签窗口大量重叠(上一页的问题),测试集的答案早已通过重叠样本泄漏进训练集;
- 结果:交叉验证分数系统性虚高,你以为找到了信号,其实模型只是”记住了邻居的答案”;
- 凡是打乱时间顺序的评估方法,金融数据上先默认它错。
处方:Purged K-Fold + Embargo
作者的修复方案,两个动作:
- Purge(清除):按时间切分训练/测试集后,把训练集中与测试集标签窗口重叠的样本删掉——物理切断泄漏通道;
- Embargo(禁运):在测试集时间段之后再额外删除一小段训练样本——防止序列相关(波动聚集等慢衰减效应)绕过 purge 继续泄漏。
原则一句话:测试集必须在信息上(而不仅是行号上)与训练集隔离。
泄漏的其他高发通道
- 全样本统计量:用整段历史的均值/分位数做标准化或去极值 → 未来信息进入过去(量化学堂第六课军规的 ML 版:一切统计量只能用”当时可知”的数据算);
- 特征选择在切分之前做:先用全部数据选出”最有效的 20 个特征”再交叉验证——选择这一步已经偷看了测试集;
- 超参数用测试集调:测试集只能用一次;反复用它调参,它就变成了训练集(你的”样本外”名存实亡)。
对低频研究者的直接迁移
- 因子研究的”样本外”必须是时间上的样本外(留出最近 1~2 年不碰),不是随机抽的 20% 股票;
- 去极值、标准化、行业中性化用的统计量,都只能用截面当期或历史滚动窗口计算;
- “回测 → 改参数 → 再回测同一段历史”的循环,就是在把整段历史变成训练集——每循环一次,样本外性质就死掉一分。
本页带走的三句话
- 随机打乱时间顺序 = 让未来混进过去——金融数据上标准交叉验证必错;
- Purged K-Fold + embargo:测试集要在信息上(不只是行号上)与训练集隔离;
- 测试集只能用一次——反复用它调参,它就变成了训练集。