在我们进行数据清洗这个操作的时候,我们往往要对数据之间进行关联性验证,比如找出哪些数据是有前因后果的,哪些数据是互相冲突的等等。
我们一定要找出这些联系出来,这很重要,因为如果没有充分的对数据进行关联性验证,我们很有可能会造成数据泄露错误。
数据泄露是指,在训练数据中包含目标信息,但在预测时没有可用的类似数据。
主要有两种泄露类型:target leakage(目标泄露) 和 train-test contamination(训练测试污染)
抗生素案例:用人们是否服用抗生素来判断是否得肺炎
人们在患肺炎后通过服用抗生素来恢复健康,原始数据显示这些列之间有很强的关系,但是人们一般是确定患肺炎后,才服用抗生素,两者之间有先后顺序。这就是目标泄漏。
信用卡支出案例:用人们的支出来判断是否有信用卡
支出是有信用卡之前的支出?还是有信用卡后在信用卡上的支出?如果是有信用卡后在信用卡上的支出,那么两者之间有先后顺序,有支出就必有信用卡。这就是目标泄漏。
所以为了防止这种类型的数据泄露,应排除目标值发生后才更新(或创建)的变量。
当不认真区分训练数据和验证数据时,就会发生另一种类型的泄露——训练测试污染
电子邮件案例:假设一个模型要预测某封电子邮件是否是垃圾邮件,它使用主题行、邮件正文和发件人的电子邮件地址作为特征。我们按照 80-20 的拆分比例将数据拆分为训练集和测试集。在训练之后,该模型在训练集和测试集上均达到了 99% 的精确率。我们原本预计测试集上的精确率会低于此结果,因此再次查看数据后发现,测试集中的很多样本与训练集中的样本是重复的(由于疏忽,我们在拆分数据之前,没有将输入数据库中的相同垃圾邮件重复条目清理掉)。我们无意中对一些测试数据进行了训练,因此无法再准确衡量该模型泛化到新数据的效果。(此案例引用于https://blog.csdn.net/bxg1065283526/article/details/79967928)
原文:https://www.cnblogs.com/Y-Knightqin/p/12571342.html