OOS预测拼接:金融ML唯一诚实的成绩单
我的掌握程度:
先掌握这个答案
OOS拼接流程:for 每年T:用≤T-1的数据(特征工程→特征筛选→训练全部在段内完成!)→预测T年每日分数→按日期append。最后把拼接的分数序列送入标准因子流水线(分层/组合/成本)。三个ML坑:①重训频率:月度重训通常优于年度(跟上风格)也优于日度(噪声+算力);②特征筛选也必须段内:全样本选出的特征偷看了未来——最常见的隐蔽泄漏;③跨段换手:重训导致预测跳变→换手尖峰→成本尖峰,需平滑处理(新旧预测加权过渡3-5日)。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
本阶段实战方法 · 把验证流程当作模型的一部分
训练选股模型或使用另类数据时,先保证训练过程没有接触预测时不可得的信息。
- 定义每个样本的特征可得时间和标签覆盖区间,再按预测场景设计时间切分。
- 归一化、缺失填充、特征选择和调参只在训练集拟合;重叠标签要按实际区间purge。
- 用朴素基线和多段滚动样本外比较,报告成本、稳定性、漂移与全部实验次数。
使用边界
- 排行榜或验证集反复用于挑模型后也会过拟合;留一份最终测试集。
- 随机切分不是所有问题都禁止,但金融未来预测必须尊重时点和标签重叠,说明验证目标。
背景 · 从一个困惑说起
全样本训练再「回测」,本质是让模型考试前背了整本答案册(q-712的旧病)。金融ML的终审只有一种形式:把时间切成段,每段的预测都只来自它之前的岁月——然后把所有「真样本外预测」拼成一条完整曲线。它就是走查验证(q-592)的ML版,但多了三个ML特有的坑。
由此产生的问题
OOS拼接的完整流程是什么?ML特有的三个坑(重训频率/特征库快照/跨段换手)怎么处理?
核心概念
OOS拼接流程:for 每年T:用≤T-1的数据(特征工程→特征筛选→训练全部在段内完成!)→预测T年每日分数→按日期append。最后把拼接的分数序列送入标准因子流水线(分层/组合/成本)。三个ML坑:①重训频率:月度重训通常优于年度(跟上风格)也优于日度(噪声+算力);②特征筛选也必须段内:全样本选出的特征偷看了未来——最常见的隐蔽泄漏;③跨段换手:重训导致预测跳变→换手尖峰→成本尖峰,需平滑处理(新旧预测加权过渡3-5日)。
为什么需要它
①「唯一」的含义:全样本训练的任何指标都不构成证据——只有拼接曲线能回答「这个系统在真实时间流里会怎样」;②三个坑的普遍性:90%的「ML选股回测」死于坑②(特征筛选泄漏)——它藏在管线最不起眼的一步;③与Purged CV的分工:PKF给研究期的稳健估计(快、多路径),OOS拼接给上线前的终审(慢、唯一路径)——先PKF筛设计,再拼接定生死。
实际应用场景
验收清单:拼接分数的逐年IC表、拼接多空净值、与「全样本训练版」的差距(差距=泄漏量的直观读数)、跨段换手成本明细。
与之前知识的联系
q-592给了协议、q-710给了段内洁净、本题给了ML工程化的最后拼图;阶段9的Kaggle「本地CV与LB一致性」正是同一思想在竞赛场景的变体。到这里,金融ML的「验证纪律」体系完整闭环。
⚠ 常见误解
- 拼接IC 0.05比全样本的0.08差,模型变差了:0.08是掺水的、0.05是干货——低而真是金融ML的美德
- 重训越频繁越跟上市场:重训噪声+换手成本随频率上升;月度是经验甜点而非教条(用实验定)
- 特征筛选用全样本没关系,反正模型是段内训的:筛选=用数据决定「学什么」——它和训练同罪,必须同锁在段内
🛠 本题实践任务
为你的ML项目实现OOS拼接(含段内特征筛选与跨段平滑),输出:逐年IC表+拼接多空净值+与全样本版的差距量化。这份「诚实成绩单」是阶段8毕业项目的核心交付物。
💡 提示(先自己想5分钟再看)
跨段平滑:new = 0.7*new_pred + 0.3*old_pred,持续3日过渡;成本按换手单列。
✅ 验收标准
三件交付物上GitHub。面试讲项目时,先讲拼接协议再讲数字——顺序本身就是专业度的宣言。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(走查验证、Purged CV、预测到组合),再用案例、公式和代码帮助理解。此功能需要先启用服务。