阶段8机器学习基础●●●●●

为什么禁止随机K折:给金融CV立的三条法

我的掌握程度:
q-708精讲

先掌握这个答案

三宗罪:①泄漏罪:验证折里的样本与训练折共享未来(重叠标签)+混入了更晚的市场状态——模型考试带着答案;②选择罪:按折平均分选超参,选出的往往是「最会利用泄漏的那组」——随机折把泄漏放大成系统性偏好;③乐观罪:折间高度相关(同一市场环境被反复采样)——「5折平均」的表面稳健是假方差缩减。替代:①时序K折(TimeSeriesSplit):折按时间排——修②③,仍不修①;②Purged K-Fold(q-710):时序+清重叠+隔离带——三罪全治(研究期标配);③单验证段+走查终审(q-771):最严格——上线前用。虚高量级:经验上随机K折比Purged的验证IC高20-50%(越短周期标签越严重)。

先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。

从理解到使用

本阶段实战方法 · 把验证流程当作模型的一部分

训练选股模型或使用另类数据时,先保证训练过程没有接触预测时不可得的信息。

  1. 定义每个样本的特征可得时间和标签覆盖区间,再按预测场景设计时间切分。
  2. 归一化、缺失填充、特征选择和调参只在训练集拟合;重叠标签要按实际区间purge。
  3. 用朴素基线和多段滚动样本外比较,报告成本、稳定性、漂移与全部实验次数。

使用边界

  • 排行榜或验证集反复用于挑模型后也会过拟合;留一份最终测试集。
  • 随机切分不是所有问题都禁止,但金融未来预测必须尊重时点和标签重叠,说明验证目标。
背景 · 从一个困惑说起
sklearn的KFold(shuffle=True)在Kaggle表格赛是默认起手式——搬到金融数据上它就成了「作弊执照」。三条法律说清为什么,以及正确姿势。
由此产生的问题
随机K折在金融数据上的三宗罪?替代方案(时序K折/Purged K折/单验证段)怎么选?「分数虚高多少」有没有典型量级?
核心概念
三宗罪:①泄漏罪:验证折里的样本与训练折共享未来(重叠标签)+混入了更晚的市场状态——模型考试带着答案;②选择罪:按折平均分选超参,选出的往往是「最会利用泄漏的那组」——随机折把泄漏放大成系统性偏好;③乐观罪:折间高度相关(同一市场环境被反复采样)——「5折平均」的表面稳健是假方差缩减。替代:①时序K折(TimeSeriesSplit):折按时间排——修②③,仍不修①;②Purged K-Fold(q-710):时序+清重叠+隔离带——三罪全治(研究期标配);③单验证段+走查终审(q-771):最严格——上线前用。虚高量级:经验上随机K折比Purged的验证IC高20-50%(越短周期标签越严重)。
为什么需要它
①默认值陷阱:工具的默认参数为通用数据设计——金融的第一个「本地化」就是换掉所有shuffle;②分数的货币体系:不同CV下的分数不可通约——比较模型/汇报结果必须声明CV协议(这是金融ML报告的义务条款);③教学价值:亲手跑一次随机vs时序的分数差(本题practice)比读十遍原理记得牢。
实际应用场景
检查清单:grep所有CV相关代码——shuffle=True? TimeSeriesSplit有没有gap? 重叠标签purge了吗?三问全过才允许汇报分数。
与之前知识的联系
q-707(时间墙)的CV版展开;q-710(Purged)是完整解;q-592(走查)是终审形态;q-838(Kaggle的Public/Private)是同一思想在竞赛的制度化。
⚠ 常见误解
  • TimeSeriesSplit就够了:它修了时间方向但没清标签重叠——短周期标签下它与随机折的差距只剩一半
  • 分数高一点没关系就当乐观偏差:虚高不是均匀偏差——它选择性奖励「会利用泄漏的复杂模型」,扭曲模型选择的方向
  • CV协议不影响结论方向:模型A随机折下胜B、Purged下反转的案例真实存在——协议就是结论的一部分

🤖 AI导师

导师会先检查你的前置知识(时序切分、交叉验证概念),再用案例、公式和代码帮助理解。此功能需要先启用服务。