2. 基础概念

在交易风控的模型研发中,最危险的不是策略亏钱,而是你以为它赚钱。这种错觉通常来自评估方法本身出了问题。本章先把五个核心术语讲清楚:时间外验证、回放评估、样本外测试、过拟合、数据泄漏。它们是后续所有实战工作的共同语言。

一、核心原理:为什么时间维度是风控评估的生命线

金融数据与图像、文本数据最大的区别在于时间不可逆且分布持续漂移。今天的市场结构、流动性、监管规则与三年前不同,未来也不会简单重复过去。因此,任何随机切分训练集与测试集的做法,都会让模型“偷看未来”,产生虚高的评估结果。

时间外验证(Out-of-Time Validation)的核心思想是:用过去训练,用未来验证。训练集的时间必须严格早于验证集,二者之间通常还要留出一段间隔,称为净化期(Purge)或禁运期(Embargo),用于切断标签窗口与特征窗口的重叠。

一句话区分:样本外测试强调“模型没见过的样本”,时间外验证强调“模型没见过的未来时间段”。前者是集合概念,后者是时间概念。在交易风控中,时间外验证是样本外测试的唯一正确实现方式。

二、五个术语的定义与业务场景

术语 定义 典型业务场景 常见误用
时间外验证 按时间顺序切分训练/验证/测试集,训练期严格早于验证期 信用评分卡按季度滚动验证;反欺诈模型按月度回溯 随机切分后声称“样本外”
回放评估 用历史行情或历史事件流,按当时可见信息逐笔重演策略决策 撮合回放、订单簿重建、风控规则命中回放 用收盘后数据回放盘中决策,造成前视偏差
样本外测试 模型在训练阶段完全未接触的数据上评估性能 上线前最终验收;监管报送的模型验证报告 反复调参直到样本外指标好看,样本外被“用旧”
过拟合 模型学到训练集噪声而非真实规律,样本外表现显著下降 高频因子挖掘中因子数量远超样本量;复杂树模型 只看训练集AUC,忽略样本外衰减
数据泄漏 训练时使用了预测时点不可获得的信息 用未来财报、未来价格、全局统计量构造特征 标准化、缺失值填充在切分前对全量数据执行

三、方法流程:一次合规的时间外验证怎么做

  1. 确定预测时点与标签窗口:明确每个样本在什么时刻做出决策,标签覆盖未来多长时间。
  2. 按时间排序并切分:训练集 → 净化期 → 验证集 → 净化期 → 测试集。
  3. 在训练集内部做特征工程:标准化、编码、填充的统计量只能来自训练集。
  4. 训练与调参:调参只用验证集,测试集在最终评估前保持封存。
  5. 回放评估:按时间逐笔重演,记录每笔决策的输入快照与输出。
  6. 对比样本内外指标:关注衰减幅度,而非单点数值。
# 时间外切分示例(伪代码)
train_end   = "2023-06-30"
purge_days  = 5
valid_start = "2023-07-06"
valid_end   = "2023-09-30"
test_start  = "2023-10-06"

train = df[df.date <= train_end]
valid = df[(df.date >= valid_start) & (df.date <= valid_end)]
test  = df[df.date >= test_start]

# 标准化统计量仅来自训练集
mu, sigma = train.feature.mean(), train.feature.std()
valid.feature = (valid.feature - mu) / sigma
test.feature  = (test.feature  - mu) / sigma

四、案例与复盘:一次“漂亮”的失败

某团队开发反欺诈模型,随机切分后样本外AUC达到0.94,上线后首月拦截率骤降至0.61。复盘发现三个问题:

  • 数据泄漏:特征中包含“近30天平均交易金额”,而该统计量在预测时点尚未完整生成,实际使用了未来数据。
  • 随机切分:同一用户的多条记录被分到训练和测试两侧,模型记住了用户而非规律。
  • 回放缺失:上线前未做逐笔回放,未发现特征生成延迟导致的空值率飙升。
复盘结论:样本外指标好看不等于模型可用。必须同时满足三个条件——时间外切分、无泄漏特征、回放验证通过。缺一不可。

五、常见误区清单

  • 把随机切分的结果称为“样本外”,忽略时间依赖。
  • 在切分前对全量数据做标准化或填充,造成统计量泄漏。
  • 反复使用测试集调参,测试集事实上变成验证集。
  • 回放时使用收盘价或事后修正数据,产生前视偏差。
  • 只看AUC、KS等排序指标,忽略时间维度上的稳定性衰减。
  • 净化期设置过短,标签窗口与特征窗口重叠。
实践建议:建立“评估三件套”——时间外切分脚本、特征可用性检查、逐笔回放日志。任何模型上线前,三件套必须全部通过,并保留可审计的记录。