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

时序切分的铁律:训练-验证-测试的时间墙

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

先掌握这个答案

标准布局:①单墙式:2018-2022训练|2023验证(调参用)|2024-2025测试(终审,只碰一次);②滚动多墙:walk-forward(q-592)——多次样本外、防单段运气;③嵌套式:参数选择在训练内再切验证——绝不让测试信息参与任何选择。随机切分的三个泄漏通道:①标签重叠(相邻样本共享未来,q-711专讲);②分布泄漏(用未来的市场状态「平均」了训练集——模型见过2024牛市再回头猜2023);③选择泄漏(按全样本表现选特征/超参)。测试集纪律:触碰即污染——看过测试成绩后回头改模型=测试变验证;终极方案:物理隔离(测试数据单独文件、只在最终评审加载)。

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

从理解到使用

按标签区间检查泄漏

以实际预测目标设计时间切分,检查每条标签观察区间是否跨过验证边界。标准化、填充、特征选择和调参仅在训练内拟合;只按日期切开仍可能因标签重叠产生泄漏。

核对来源:scikit-learn:时间序列交叉验证 ↗
本阶段实战方法 · 把验证流程当作模型的一部分

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

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

使用边界

  • 排行榜或验证集反复用于挑模型后也会过拟合;留一份最终测试集。
  • 随机切分不是所有问题都禁止,但金融未来预测必须尊重时点和标签重叠,说明验证目标。
背景 · 从一个困惑说起
普通ML随意切数据(随机train_test_split);金融ML的第一条军规:时间只能单向流动——训练期必须整体早于验证期,验证早于测试。这道「时间墙」是金融ML与普通ML的分界线。
由此产生的问题
时序切分的标准布局(比例/多墙/嵌套)?为什么随机切分是灾难(三个泄漏通道)?测试集的「一次性」纪律怎么执行?
核心概念
标准布局:①单墙式:2018-2022训练|2023验证(调参用)|2024-2025测试(终审,只碰一次);②滚动多墙:walk-forward(q-592)——多次样本外、防单段运气;③嵌套式:参数选择在训练内再切验证——绝不让测试信息参与任何选择。随机切分的三个泄漏通道:①标签重叠(相邻样本共享未来,q-711专讲);②分布泄漏(用未来的市场状态「平均」了训练集——模型见过2024牛市再回头猜2023);③选择泄漏(按全样本表现选特征/超参)。测试集纪律:触碰即污染——看过测试成绩后回头改模型=测试变验证;终极方案:物理隔离(测试数据单独文件、只在最终评审加载)。
为什么需要它
①分数的会计学:随机切分的高分是「借未来」的假资产——金融ML的信用体系建立在时间墙上;②流程即诚信:机构的ML代码review第一眼看切分逻辑——墙的位置与「谁见过什么」比模型选择重要十倍;③可复现性:固定墙的位置写进配置(PROTOCOL.md的ML版条款),他人可用同样墙复现你的分数。
实际应用场景
配置化切分:TRAIN_END='2022-12-31', VAL='2023', TEST='2024+'——硬编码日期在配置文件;每次实验输出「墙信息」(各期样本数+日期范围)进日志。
与之前知识的联系
q-592(走查)的ML基础版;q-708/710(随机K折禁令与Purged)是本题的两条延伸法规;q-771(OOS拼接)是多墙式的工程化。
⚠ 常见误解
  • sklearn默认的random split应该也能用:它为i.i.d.数据设计——金融数据的重叠与漂移让它成为泄漏机器
  • 测试集看几次没关系:每看一次后的任何修改都在把测试变成验证——纪律的价值在于「没得商量」
  • 墙的位置可以按效果挑:挑「测试表现好的墙」=在墙维度上过拟合(多重检验的切分版)——墙在看到任何结果前定死

🤖 AI导师

导师会先检查你的前置知识(样本内外概念、走查验证),再用案例、公式和代码帮助理解。此功能需要先启用服务。