样本外测试的高级考虑因素
什么是样本外测试
样本外测试(常缩写为 OOS)是一种使用未参与模型构建或调优的数据来评估模型或决策规则的方法。其核心思想很简单:如果模型的表现依赖于仅存在于训练数据中的模式,那么当模型遇到新的、之前未见过的数据时,可能会失败。
“高级”考虑因素大多源于实践中对“未见”数据和“相同”条件的判断容易出错。OOS 并不能保证未来成功;它只是在特定假设下对过拟合风险的一种压力测试。
机制如何运作(以及首先需要定义的内容)
在讨论影响之前,需先明确定义后续将进行比较的组成部分。一个清晰的设置通常包括:
- 模型或规则:被拟合的内容(参数、阈值、特征变换或任何预处理决策)。
- 训练窗口:用于拟合或调优的数据部分。
- 样本外窗口:未用于拟合的数据部分。
- 选择过程:是否根据表现从多个变体中进行选择。
一个常见的高级陷阱是:当你反复查看 OOS 结果后调整模型时,OOS 结果可能“非正式地”变成样本内数据。这实际上使 OOS 成为了另一个调优阶段。
为了保持机制的有效性,你需要明确划分规则(例如按时间顺序),并决定除最终模型外的任何步骤是否也禁止接触 OOS 数据。“数据”应包括标签、预处理产物以及用于构建特征的任何查找信息。
高级考虑因素:依赖关系与边缘情况
1) 划分过程中的数据泄露
泄露意味着来自所谓 OOS 期间的信息间接影响了训练。这可能发生在以下情况:
- 特征是使用在整个数据集上计算的统计量创建的(而非仅使用训练部分),
- 时间戳、标识符或“前瞻性”变换被错误地引入输入中,
- 重叠窗口在训练和 OOS 中重复使用相同的观测值。
即使轻微的泄露也可能导致性能估计看起来比在真正新环境中更强。由于泄露机制因工作流程而异,你必须审查整个流程,而不仅仅是建模步骤。
2) 分布偏移:“未见”不等于“在相关方面不同”
如果 OOS 数据与训练阶段过于相似,OOS 仍可能产生误导。相反,剧烈的分布偏移(波动性、相关性结构、季节性或微观结构的变化)可能使 OOS 表现显著变差,即使该方法本身并非“错误”。
因此,高级实践将 OOS 视为条件性证据:它测试在相同假设的数据生成过程下,从历史到下一阶段的特定路径。
3) 划分策略的选择
时间顺序划分、随机划分和基于状态的划分回答不同问题:
- 时间顺序 OOS 测试模型随时间推移的表现。
- 随机 OOS 测试模式在打乱样本中的普遍性,但这可能掩盖时间泄露并高估稳定性。
- 基于状态的 OOS 试图在结构性变化中进行压力测试,但需要明确定义状态,可能引入主观性。
划分策略不仅仅是细节;它是关于“泛化”在你的上下文中应意味着什么的假设。
4) 多阶段选择与重复测试
如果你尝试多种模型变体并保留 OOS 表现最佳的,实际上是在进行多重比较。由于最佳表现者是在看到其 OOS 结果后才被选出的,最终的估计可能过于乐观。
稳健的工作流程应区分角色:
- 一组用于训练,
- 一组用于选择(调优和模型选择),
- 一组用于最终评估。
即便如此,评估迭代次数越多,越可能偏离一个真正反映使用时规则的估计。
5) 实施约束:成本、执行与测量
OOS 评估的现实性取决于你的评估假设。常见的不匹配来源包括:
- 成本:佣金、费用以及任何类似点差的摩擦可能降低收益,并改变哪些事件有利可图。
- 执行:订单是否被假定以有利价格成交,或是否建模了滑点。
- 测量:你如何定义结果(例如,扣除成本后、使用一致单位、处理缺失或不规则时间戳)。
这些因素在评估数据集中可能稳定,但随时间变化。高级考虑是将 OOS 评估与实际使用时适用的规则保持一致。
局限性与失败模式
最主要的局限性包括:
- 历史关系不能确立未来结果:OOS 仅在所选划分和假设下衡量过去的泛化能力。
- 条件变化时 OOS 可能失效:如果未来与训练和 OOS 分布显著不同,测试可能无法预测表现。
- 方差与小样本:如果 OOS 窗口较短或结果罕见,结果可能由随机性主导。
- 流程过拟合:在 OOS 审查后反复检查、调整阈值或特征微调可能破坏“未见”原则。
一个好的思维模型是:OOS 减少了一种风险(对训练集过拟合),但并未消除其他风险(状态变化、评估现实性、选择偏差和随机性)。
验证与后续问题
OOS 声称的独立验证来自检查测试是否公平且可复现。有用的验证问题包括:
- 在所有训练和特征构建步骤中,OOS 数据是否真正未被触碰?
- 划分是否在任何模型调优开始前就已定义?
- 成本和执行假设是否在训练、调优和 OOS 评估中一致应用?
- OOS 表现是否以实践中相同的方式衡量(单位、成本扣除、事件时序)?
- 结果对替代划分选择的敏感度如何(在看到 OOS 后不更改模型)?
如果你能清晰回答这些问题,你就能解释 OOS 测试做了什么、其强项和可能失败之处。如果不能,OOS 结果可能反映的是工作流程的产物,而非真正的泛化能力。