找到并修复这个以微妙的方式破坏你的模型的问题。
数据泄露这个概念在kaggle算法竞赛中经常被提到,这个不同于我们通常说的生活中隐私数据暴露,而是在竞赛中经常出现某支队伍靠着对极个别feature的充分利用,立即将对手超越,成功霸占冠军位置,而且与第二名的差距远超第二名与第十名的差距,那么很有可能是出现了数据泄露(Data Leakage)。这些feature却不是在因果关系上顺利解释预测值的‘因’,反而是预测值的‘果’。
在本教程中,您将了解什么是数据泄漏以及如何防止数据泄漏。如果你不知道如何防止它,泄漏将经常出现,它将破坏您的模型在微妙和危险的方式。因此,对于实践数据科学家来说,这是最重要的概念之一。
本课程所需数据集夸克网盘下载链接:https://pan.quark.cn/s/9b4e9a1246b2 提取码:uDzP
文章目录
- 1、简介
- 2、两种主要泄漏类型
-
- 2.1目标泄漏
- 2.2Train-Test 污染
- 3、举例
- 4、总结
- 5、接下来呢
1、简介
当训练数据包含目标信息时,会发生数据泄漏(或泄漏) Data leakage (or leakage) ,但是当模型用于预测时,类似的数据将不可用。这将导致在训练集(甚至可能是验证数据)上获得高性能,但是该模型在生产中的性能将很差。
换句话说,泄漏会导致模型看起来很精确,直到您开始使用该模型做出决策,然后该模型变得非常不精确。
2、两种主要泄漏类型
有两种主要类型的泄漏: target leakage** 和train-test contamination.
2.1目标泄漏
当预测器包含在进行预测时不可用的数据时,就会发生目标泄漏。重要的是要考虑目标泄漏的时间或数据变得可用的时间顺序,而不仅仅是一个特征是否有助于做出良好的预测。
举个例子会有帮助的。假设你想预测谁会得肺炎。原始数据的前几行如下:
got_pneumonia | age | weight | male | took_antibiotic_medicine | … |
---|---|---|---|---|---|
False | 65 | 100 | False | False | … |
False | 72 | 130 | True | False | … |
True | 58 | 100 | False | True | … |
人们在患肺炎后服用抗生素药物是为了恢复健康。
原始数据显示这些列之间有很强的关系,但是在确定got_pneumonia
的值之后,took_antibiotic_medicine
经常被更改。
这是目标泄漏。该模型将看到,任何对took_tic_medicine
值为False的人都没有患肺炎。
由于验证数据与培训数据来自同一个源,因此模式将在验证中重复,并且模型将具有良好的验证(或交叉验证)得分。
但这个模型在随后的实际应用中会非常不准确,因为即使是肺炎患者,在我们需要对他们未来的健康状况做出预测时,他们也不会使用抗生素。
为了防止这种类型的数据泄漏,应该排除在实现目标值之后更新(或创建)的任何变量。
2.2Train-Test 污染
当我们不小心将训练数据与验证数据区分开来时,就会发生另一种类