首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >把训练集和验证集画成时间轴:量化模型为什么需要 gap

把训练集和验证集画成时间轴:量化模型为什么需要 gap

原创
作者头像
量化行业新引擎
发布于 2026-10-16 09:57:35
发布于 2026-10-16 09:57:35
200
举报
文章被收录于专栏:AI量化视界AI量化视界

做量化模型验证时,我习惯先把每一折数据画成时间轴,而不是先看准确率。原因很简单:表格里的训练集和验证集即使没有日期重叠,也不代表信息完全隔离。只要特征使用了滚动窗口、标签看向未来,边界附近的样本就可能共享同一段行情。

例如,用过去20日数据构造波动率,并预测未来5日收益。训练集最后一天虽然早于验证集第一天,但最后几条训练标签已经用到了后面5天的价格;验证集开头的滚动特征也会回看前20天。如果直接首尾相接,模型评估会比真实上线更乐观。

我会把切分写成下面这种时间线:

训练区间 ────── | 空档区 | ────── 验证区间

gap=5

scikit-learn 的 TimeSeriesSplit 可以直接表达这个约束:

from sklearn.model_selection import TimeSeriesSplit

cv = TimeSeriesSplit(

n_splits=5,

test_size=60,

gap=5,

max_train_size=500

)

这里的 gap 不是随手填的安全垫,而应由策略的信息跨度决定。若标签是未来5日收益,至少要先检查5个交易日是否足够;如果特征还包含发布滞后、成交延迟或更长的持有期,就要按实际可用时间重新画边界。max_train_size 则能避免训练集无限扩张,让各折更接近固定长度的滚动训练。

最后不要只打印交叉验证分数。把每折训练结束日、验证开始日、gap 长度和样本数输出成一张小表,肉眼检查一次。时间序列验证最重要的不是“切了几折”,而是每一折是否真的模拟了当时能够看到的数据。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档