数据与特征
数据泄露(data leakage)
/ DAY-tuh LEE-kij /
数据泄露,是指有信息悄悄溜进了你的模型,而在真实预测的那一刻,模型本不该合法地拥有这些信息——就像一个考前背了标准答案的学生。这名学生在模拟考上光芒四射,到了真考却一败涂地。泄露所造就的模型,开发时看起来惊艳无比,部署后却惨痛失灵。
它主要藏在两种形态里。标签泄露(target leakage)是指某个特征里偷偷包含了答案,或包含了只有在答案揭晓之后才会有的东西——比如,用一个记录「所开处方」的字段去预测病人是否患病,而这个字段只有在诊断做出之后才会存在。训练—测试污染(train-test contamination)则是测试集的知识渗进了训练——在划分之前就在整份数据上拟合缩放器或插补、在全部数据上做特征选择,或让同一个人的记录同时跨在训练侧和测试侧。在所有这些情形里,模型实际上都在偷看它在野外不会拥有的答案。
为何重要:泄露是「实验室里考了99%的模型一上生产线就垮掉」最常见的单一原因,而它之所以阴险,正在于数字会一直好看下去,直到现实迎面撞来。防御之道是一套严格的纪律:先划分数据,再仅从训练那一份里去学习每一个变换(缩放、插补、编码、特征选择),并对每一个特征反复追问:「在我需要做预测的那一刻,我真的会知道这个吗?」
一个用来预测哪些病人会住院的模型达到了98%的准确率——靠的是一个叫「出院日期」的特征。可是,只有当一个人已经住院之后,你才会有出院日期。这个特征其实是答案的伪装;把它去掉,诚实的准确率就跌到了远更可信的72%。
一个只有事后才会知道的特征,其实是答案的伪装。
如果一个结果好得不像真的,那么先怀疑泄露,再去庆祝。补救之道永远是同一套仪式:先划分,预处理只在训练集上拟合,并逐一审查每个特征在预测时刻是否真的拿得到。
又称
另见