4. 数据划分方法

在量化建模中,模型在样本内表现优异、样本外却迅速失效,是极常见的失败模式。其根源往往不在模型本身,而在于数据划分方式与真实交易场景不匹配。本节聚焦数据划分这一基础但决定性的环节,讲清训练集、验证集、测试集的职责边界,以及时间序列场景下滚动窗口与扩展窗口的工程实现。

一、核心原理:三类数据集的职责边界

机器学习的标准范式是把数据切成三块:训练集用于拟合模型参数,验证集用于选择超参数与模型结构,测试集用于最终评估泛化能力。三者的核心原则是互不重叠、信息隔离。验证集的作用常被低估——它承担的是“模型选择”的决策,如果反复用测试集调参,测试集就退化成了验证集,最终评估结果会严重乐观。

在量化场景中,这一原则还要叠加时间维度约束:任何用于训练的数据,其时间戳都必须早于用于验证和测试的数据。否则模型会“看到未来”,产生前视偏差(look-ahead bias)。这是量化数据划分与普通机器学习最本质的区别。

核心结论:数据划分的本质是模拟“用历史预测未来”的信息结构。划分方式一旦与实盘信息流不一致,样本外评估就失去意义。

二、方法流程:从随机划分到时间序列分割

普通机器学习常用随机划分(如 70%/15%/15%),但在时间序列中直接随机打乱会破坏时序依赖,导致相邻样本同时出现在训练集和测试集,造成数据泄漏。正确做法是按时间顺序切分。

常见的时间序列分割策略包括:

  • 固定切分(Hold-out):按时间点一刀切,前段训练、中段验证、后段测试。简单直观,但只得到一个测试结果,方差较大。
  • 滚动窗口(Rolling Window):训练窗口长度固定,随时间向前滑动,每次纳入新数据、丢弃最旧数据。适合市场结构变化快、旧数据参考价值低的场景。
  • 扩展窗口(Expanding Window):训练起点固定,窗口随时间不断增长,保留全部历史信息。适合数据稀缺或长期规律稳定的场景。

两种窗口的差异可用下图直观理解:滚动窗口的“记忆”有限,扩展窗口的“记忆”持续累积。

滚动窗口(固定长度) 训练 验证 测试 训练 验证 测试 训练 验证 测试 扩展窗口(起点固定,长度递增) 训练 验证 测试 训练(累积) 验证 测试

工程实现上,可用如下伪代码描述滚动窗口的切分逻辑:

def rolling_split(data, train_len, val_len, test_len, step):
    n = len(data)
    start = 0
    while start + train_len + val_len + test_len <= n:
        train = data[start : start + train_len]
        val   = data[start + train_len : start + train_len + val_len]
        test  = data[start + train_len + val_len : start + train_len + val_len + test_len]
        yield train, val, test
        start += step

扩展窗口只需把 train = data[start : start + train_len] 改为 train = data[0 : start + train_len],即训练起点始终为 0。

三、案例场景:不同资产与策略的窗口选择

窗口选择没有万能答案,取决于数据量与市场稳定性。下表给出常见场景的参考建议:

场景 推荐窗口 理由
高频因子、日内策略 滚动窗口,短训练期 市场微观结构变化快,旧数据噪声大
日频多因子选股 扩展窗口或长滚动窗口 因子有效性相对稳定,需充足样本
数据稀缺的新品种 扩展窗口 最大化利用有限历史数据
结构性突变后 滚动窗口,重置起点 避免突变前数据污染模型

例如某日频选股策略,若采用 3 年训练、6 个月验证、6 个月测试、每 3 个月滚动一次,则可在 5 年数据上得到多个样本外测试段,评估结果比单次切分稳健得多。

四、误区与复盘

常见误区一:随机打乱时间序列。这会让模型在训练时“偷看”未来,样本外指标虚高,实盘必然回撤。
常见误区二:用测试集反复调参。测试集一旦参与决策,就不再是独立评估集,最终报告的性能不可信。
常见误区三:忽视验证集与测试集之间的时间间隔。若特征存在滞后(如财务数据、标签未来收益),需在切分处留出缓冲期(gap),否则仍会泄漏。
复盘建议:每次建模后记录三件事——划分方式、窗口长度、是否留 gap。把样本外表现与划分方案绑定分析,才能判断模型失效是策略问题还是评估方法问题。

数据划分不是建模前的例行公事,而是决定样本外验证是否可信的第一道防线。掌握时间序列分割、滚动窗口与扩展窗口的适用条件,并在工程中严格隔离信息,才能让后续的稳健性评估建立在真实可信的基础之上。