2. 样本外验证基础

在量化建模中,最容易让策略“看起来很美、实盘却失效”的,并不是模型不够复杂,而是验证流程不严谨。样本外验证(Out-of-Sample Validation)是连接研究与实盘的桥梁,它回答一个核心问题:模型在未见过的数据上,是否仍然有效? 本章围绕样本内/样本外、过拟合、数据窥探、前瞻偏差等基础概念展开,为后续章节的稳健性评估打下共同语言。

一、核心原理:样本内与样本外的分工

样本内(In-Sample, IS)数据用于训练、调参和选择模型;样本外(Out-of-Sample, OOS)数据用于评估模型在“未来或未知”数据上的表现。二者的本质区别不是时间先后,而是信息隔离:任何影响模型选择的信息,都不应来自样本外数据。

常见的数据切分方式包括:

  • 留出法(Hold-out):按时间顺序切分为训练段与测试段,简单直观,但结果对切分点敏感。
  • 滚动窗口(Rolling / Walk-forward):训练窗口向前滚动,每次用后续一段做测试,更贴近实盘。
  • 扩展窗口(Expanding):训练集从起点不断累积,适合样本量有限、结构较稳定的场景。
  • 交叉验证(Cross-Validation):在时间序列中需使用 Purged K-Fold 或 Combinatorial Purged CV,避免信息泄漏。

需要强调的是:样本外表现好,不等于策略一定有效;但样本外表现差,通常足以否定一个策略。样本外验证是“证伪”工具,而非“证明”工具。

二、方法流程:从切分到评估的最小闭环

一个可复用的样本外验证流程通常包含以下步骤:

  1. 明确研究假设与策略逻辑,避免先看数据再编故事。
  2. 按时间顺序切分数据,确保训练集严格早于测试集。
  3. 在训练集内完成特征工程、参数搜索与模型选择。
  4. 冻结模型与参数,仅在测试集上运行一次评估。
  5. 记录关键指标:年化收益、夏普、最大回撤、换手率、胜率等。
  6. 进行多次滚动或分块验证,观察指标稳定性。

下面是一个简化的滚动窗口验证伪代码,便于理解流程:

for t in range(train_start, len(data) - test_len):
    train = data[t : t + train_len]
    test  = data[t + train_len : t + train_len + test_len]

    model.fit(train.features, train.label)
    pred = model.predict(test.features)

    record(metrics(test.label, pred))
提示:样本外评估应尽量“一次性”。如果反复根据样本外结果调整模型,样本外数据实际上已被污染,退化为样本内。

三、常见陷阱:过拟合、数据窥探与前瞻偏差

过拟合(Overfitting)指模型过度拟合训练数据中的噪声,导致泛化能力下降。典型信号包括:样本内指标远优于样本外、参数对数据微小变化极度敏感、策略逻辑难以用经济学解释。

数据窥探(Data Snooping)指在模型选择过程中反复使用同一份数据,导致“偶然有效”的策略被误认为真实有效。它不一定来自恶意,更多来自研究者的无意识行为,例如反复更换回测区间、频繁调整因子权重。

前瞻偏差(Look-ahead Bias)指在决策时使用了当时尚不可得的信息。常见来源包括:使用未来财报数据、用当日收盘价决定当日开盘交易、在特征中混入未来窗口统计量。

幸存者偏差(Survivorship Bias)指只使用当前仍存在的标的进行回测,忽略已退市或破产的样本,导致收益被高估。

回测过拟合(Backtest Overfitting)是上述问题的综合结果:在大量策略或参数组合中,总有一些在历史上表现优异,但这并不代表未来有效。

术语 核心含义 典型信号 缓解手段
过拟合 拟合噪声,泛化差 IS远优于OOS 正则化、简化模型、滚动验证
数据窥探 反复使用同一数据选择模型 指标对区间极敏感 预留独立样本、记录试验次数
前瞻偏差 使用未来信息 回测异常优异 严格时间对齐、滞后处理
幸存者偏差 样本选择不完整 收益系统性偏高 使用全历史成分股

四、案例与复盘:一个“看起来很好”的策略为何失效

假设某研究员在 2015—2020 年数据上测试一个动量策略,通过反复调整回看窗口与持仓数量,最终找到一组参数:年化收益 28%,夏普 2.1,最大回撤 8%。随后在 2021—2022 年样本外测试,年化收益降至 3%,夏普 0.4,最大回撤 22%。

复盘发现三个问题:其一,参数搜索次数超过 200 组,存在明显的数据窥探;其二,特征计算使用了当日收盘后的数据,但交易假设在当日收盘前执行,构成前瞻偏差;其三,回测标的仅包含当前仍在交易的股票,存在幸存者偏差。

警示:样本外表现差并不总是模型问题,也可能是验证流程本身存在泄漏。复盘时应优先检查数据对齐、样本选择与试验次数。

正确的做法是:在训练集内完成所有选择,保留一段从未参与任何决策的“纯净”样本外数据;同时记录每一次试验,使用 Deflated Sharpe Ratio 或 Probability of Backtest Overfitting 等工具评估多重检验带来的偏差。

五、术语速查清单

  • IS / OOS:样本内 / 样本外。
  • Walk-forward:滚动向前验证,贴近实盘节奏。
  • Purged K-Fold:带净化与 embargo 的时间序列交叉验证。
  • Look-ahead Bias:前瞻偏差,使用未来信息。
  • Data Snooping:数据窥探,反复使用同一数据。
  • Survivorship Bias:幸存者偏差,样本不完整。
  • Deflated Sharpe Ratio:对多重检验调整后的夏普比率。
  • PBO:回测过拟合概率,衡量策略在样本外失效的可能性。