数据泄漏是模型离线指标虚高的常见原因:训练时用到了预测时刻根本无法获得的信息。CTR 场景下,最典型的是把点击后的行为(如停留时长、下单)当成了点击前的特征。
特征穿越通常发生在时间窗口统计上。比如计算用户近 7 天点击率时,如果不按样本时间点截断,就会把未来的点击算进历史,模型在训练集上表现极好,上线后立刻掉点。
排查方法是构建时间严格单调的训练样本:每个样本的特征只能来自标签发生之前的数据。可以用 point-in-time join 替代简单的表关联,确保统计口径与线上一致。
另一个隐蔽来源是全局归一化或全局编码:用全量数据计算均值、方差、目标编码,等于把未来信息泄漏进训练。应改为按时间切分,只用训练段数据拟合。
上线前做一次离线-在线一致性校验很有必要:抽样对比线上实时特征与离线回放特征,差异过大就说明存在穿越或口径不一致。