交叉验证与数据泄漏
交叉验证把可用样本反复分为训练部分与验证部分,估计模型遇到新对象时的误差。它的关键并非折数,而是训练数据与验证数据之间必须保持所声称的“新”的含义。数据泄漏指训练或模型选择过程获得了部署时本不可能得到的信息,因此验证分数偏乐观。
一张分数表怎样失真
设每位病人做两次检查,表中还保留病人编号。若按检查记录随机分训练集和验证集,同一病人的第一次记录可能在训练集、第二次在验证集。模型记住编号与病情,就能在验证集上表现很好;但面对新病人时这个编号从未出现。要评价新病人预测,应以病人为分组单位,让一个人的全部记录只落在一个集合中。若任务改成“已知病人的下次检查”,分割方式又须尊重先后时间。这说明切分方法由部署问题决定,而不是由哪个方法的得分最高来决定。
另一个泄漏发生在预处理。假定训练样本某特征只有 ,留出的验证值是 。训练均值是 ;若先用全体三个数算均值,变成 。虽然验证标签尚未交给模型,验证特征的分布已经影响训练变换。标准化、缺失值填补、特征筛选、主成分分析和目标编码都应在每个训练折内部拟合,再把所得变换应用到该折验证集。
验证分数的含义
设第 折的验证索引为 ,训练索引为 ,算法仅用 拟合得 。对单个样本损失 ,折外平均损失可写为 这个写法按样本数加权;如果每个病人同等重要而各人的记录数不同,应先按病人汇总损失,再对病人平均。交叉验证估计的是指定训练规模、抽样机制和损失下的泛化表现,不是新环境里的保证。时间分布漂移、采样偏差或标签定义改变,都会使它失准。
普通 折适用于可合理近似独立同分布的样本。重复测量应使用分组折;空间邻近样本高度相似时要考虑空间块;时间序列则令每折训练时间严格早于验证时间,必要时加入间隔以避免临近窗口的重叠。图中的横条把相同病人的两次记录放在同一颜色区,而把整个病人留出。
调参与最终评估
如果试了二十套特征、参数和模型,却拿同一验证集选表现最佳者,最高分会含有选择偶然性。可用内层交叉验证选参数、外层不参与选择的折估计整个选择流程的表现;或者预先留出最终测试集,调参期间完全不查看它,直到模型定稿后只用一次。评估指标也要预先由任务确定:罕见阳性任务只报准确率可能掩盖漏检;概率输出还要检查预测概率校准,即把预测概率相近的案例分组,与实际事件频率比较。
特别警惕目标编码直接使用同一行标签、用全时期总体均值补早期缺失、用事后发生的“结案日期”预测结案、先在全数据上挑选相关特征、同一图像的裁剪片段横跨训练与测试。排查时逐列记下特征在预测时刻是否已经可见,再按对象和时间追溯原始记录。一个只有几行的诚实基线模型,通常比一份泄漏导致的漂亮验证曲线更可用。