Purged K-Fold与Embargo:按真实标签区间隔离
我的掌握程度:
先掌握这个答案
Purge删除训练集中标签观察区间与验证标签区间重叠的样本;必须比较实际区间而非简单减若干自然日。Embargo在验证区间之后再留缓冲,长度取决于信息依赖结构。Purged K-Fold可包含验证期前后的训练样本,因此不等于模拟上线顺序;walk-forward只用过去训练,应另做终审。TimeSeriesSplit的gap可处理部分固定间隔,但不能自动替代所有重叠区间检查。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
按标签区间检查泄漏
以实际预测目标设计时间切分,检查每条标签观察区间是否跨过验证边界。标准化、填充、特征选择和调参仅在训练内拟合;只按日期切开仍可能因标签重叠产生泄漏。
核对来源:scikit-learn:时间序列交叉验证 ↗本阶段实战方法 · 把验证流程当作模型的一部分
训练选股模型或使用另类数据时,先保证训练过程没有接触预测时不可得的信息。
- 定义每个样本的特征可得时间和标签覆盖区间,再按预测场景设计时间切分。
- 归一化、缺失填充、特征选择和调参只在训练集拟合;重叠标签要按实际区间purge。
- 用朴素基线和多段滚动样本外比较,报告成本、稳定性、漂移与全部实验次数。
使用边界
- 排行榜或验证集反复用于挑模型后也会过拟合;留一份最终测试集。
- 随机切分不是所有问题都禁止,但金融未来预测必须尊重时点和标签重叠,说明验证目标。
背景 · 从一个困惑说起
两个样本的预测时点不同,但标签都用到同一周的未来收益。把它们分进训练和验证后,模型就可能间接接触验证信息。
由此产生的问题
Purge究竟删除什么,Embargo与走查验证又是什么关系?
核心概念
Purge删除训练集中标签观察区间与验证标签区间重叠的样本;必须比较实际区间而非简单减若干自然日。Embargo在验证区间之后再留缓冲,长度取决于信息依赖结构。Purged K-Fold可包含验证期前后的训练样本,因此不等于模拟上线顺序;walk-forward只用过去训练,应另做终审。TimeSeriesSplit的gap可处理部分固定间隔,但不能自动替代所有重叠区间检查。
为什么需要它
日期不同不代表信息独立;固定N日也可能混淆交易日、自然日和不同标签持有期。
实际应用场景
为每个样本保存预测时点、特征截止时间和标签结束时点;按信息区间求交集,再单独验证模拟实盘的前向切分。
与之前知识的联系
q-702定义标签,q-707处理时间切分;结合q-709的嵌套选择避免调参再污染外层评估。
⚠ 常见误解
- 只用过去训练的示例属于purged walk-forward,不应直接命名完整K-Fold。
- Embargo不是一律取特征窗的1/4,应有数据依赖依据。
- CV无泄漏也不能消除分布漂移、成本与容量问题。
🛠 本题实践任务
将标签期改为3个时点,手算清除名单,再改为仅允许过去训练,比较剩余样本;写出两个验证目标的差别。
💡 提示(先自己想5分钟再看)
先画标签区间,再判断相交;生产中同一天多个证券应按同一时间分组。
✅ 验收标准
原示例得到[0,1,2,10,11];能解释未来训练样本为什么不属于walk-forward。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(走查验证、标签重叠问题、交叉验证),再用案例、公式和代码帮助理解。此功能需要先启用服务。