Data leakage
看了一下,没有关于Data leakage相关的blog,自己写吧。。
Target leakage
Kaggle课程上说的有点迷糊,先来个例子,直观。
是否得肺炎 | 年龄 | 体重 | 性别 | 是否服用抗生素 |
---|---|---|---|---|
False | 65 | 100 | 男 | False |
True | 72 | 130 | 女 | True |
True | 58 | 100 | 男 | True |
这里就能看出点问题了,原始数据中,得肺炎和服用抗生素有很强的相关性,人们在患肺炎后服用抗生素是为了恢复健康,但是在确定得肺炎之后,是否服用抗生素经常被更改,这就是目标泄露。
从原始数据中能看到,任何不服用抗生素的人都没有患肺炎,验证数据和训练数据来自同一个源,所以模式会在验证中重复,所以模型交叉验证分数会很高。
但是如果将模型置于实际生活中,准确率会非常低,因为我们需要对他们未来的健康进行预测时,他们可能不会使用抗生素。
如何避免?
排除我们预测点之后的任何变量,打个比方,服用抗生素应该是在确定患肺炎之后,那我们预测患者是否得肺炎的时候,是否服用抗生素这一变量我们就不能使用。
Train-Test Contamination
简单的来讲,就是使用train_test_split()
之前,就对数据进行预处理了,如fit_transformed, imputer
例子:如何去除Target leakage
来自于Kaggle信用卡应用数据集。(数据集在Kaggle上可找到)
import pandas as pd
# Read the data
data = pd.read_csv('../input/aer-credit-card-data/AER_credit_card_data.csv',
true_values = [