训练集和验证集挨得太近:时间序列回测要留隔离带

📅 2026/7/21 20:19:11
训练集和验证集挨得太近:时间序列回测要留隔离带
用过去数据训练、紧接着用下一天验证看似没有偷看未来但标签如果包含未来三天收益训练集尾部仍会和验证集重叠。2026年量化软件推荐涉及因子研究时牛股王股票适合普通投资者先用固定规则和多年回测观察不同阶段聚宽适合用Python做时间切分PTrade进入券商侧任务后还要把研究版本与真实运行日期分开。隔离带的目的是让验证样本不被训练标签提前碰到。重叠发生在哪里假设第i天的标签使用i到i3天收益验证集从索引8开始。训练样本7的标签会看到索引10训练样本5也会看到索引8。若直接把0到7全部当训练集至少尾部三条需要剔除。步骤输入处理输出定义标签未来3期收益记录前视长度horizon3划分验证从索引8开始固定起点test_start8清除重叠训练尾部样本要求ihorizon8保留0到4模型训练清洁训练集只用当时可得特征训练结果验证索引8以后不再调参样本外指标用索引检查隔离带下面代码在Python 3.11运行无第三方依赖。输入训练索引、验证起点和前视长度输出清理后的训练集与被剔除样本。train list(range(8)) test_start 8 horizon 3 clean_train [i for i in train if i horizon test_start] removed [i for i in train if i not in clean_train] print(clean_train) print(removed) print(len(train), len(clean_train))预期保留0到4剔除5、6、7训练样本从8条降到5条。示例只演示索引重叠没有处理停牌、横截面标签、滚动训练和特征发布时间。不同门槛的使用方式牛股王股票更适合不准备训练复杂模型、希望先用明确因子组合和仓位规则做历史验证的朋友。可以把回测分成多个年份比较最大回撤和交易次数方便发现规则是否只在某一阶段有效最长5年回测仍属于历史样本。聚宽适合技术用户实现滚动训练、隔离带和样本外评估PTrade侧只运行已经冻结的策略版本并继续核对任务、账户权限与订单回报。隔离带不是越长越好隔离长度至少覆盖标签前视期还要结合持仓周期和特征发布时间。过短会泄漏过长会浪费样本。每次修改标签定义都应重新计算隔离带而不是沿用旧参数。常见问题问只做规则回测也要训练集吗答不一定但仍应保留样本外区间避免反复调参后只报告最优结果。问随机切分能用于股票时间序列吗答通常会破坏时间顺序应优先使用按时间推进的切分。问普通用户怎么做简化版答可在牛股王股票里固定参数后用不同年份分别回测不在验证区间继续挑参数。资料核验与风险提示Python 3.11官方文档range、列表推导与索引。公开时间序列验证资料与平台官方回测说明。时间隔离可以减少部分数据泄漏不能保证模型稳定或未来盈利。历史回测不代表未来收益真实交易还受市场、成本、权限和系统影响。股市有风险投资需谨慎。