Target Leakage:在准备数据的时候,或者数据采样的时候出了问题,误将与结果直接相关的feature纳入了数据集。
一般target leakage会导致数据在训练集上表现很好,但是当运用到实际上时,表现会很差。
举个例子,
Imagine you want to predict who will get sick with pneumonia. The top few rows of your raw data look like this:
是否得肺炎 | age | weight | male | 是否服用抗生素 | ... |
---|---|---|---|---|---|
False | 65 | 100 | False | False | ... |
False | 72 | 130 | True | False | ... |
True | 58 | 100 | False | True | ... |
第一列是否得肺炎 便是y,其他列为X.
很明显可以看出,是否得肺炎 和 是否服用抗生素 两者有着很强的因果关系,基本上没病的都不会去喝抗生素。这就是所谓的target leakage.
解决方法:
1.统计分析与目标相关的列;
2.如果你建立一个模型并发现它非常精确(比如大于98%以上),可能有一个数据泄漏问题;
3.在交叉验证折叠中使用原始没进过预处理的数据;
4.使用Pipelines(一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出。这非常类似于流水线式工作,即通常会包含源数据ETL(抽取、转化、加载),数据预处理,指标提取,模型训练与交叉验证,新数据预测等步骤
)。比如: scikit-learn Pipelines;
5.使用Holdout Dataset。在使用模型之前,保留一个未使用过的的验证数据集作为对模型的最终健全性检查。
其实没有标准的解决方案可以普遍地防止target leakage,它需要的是对数据的深入了解。
-------------------------------------------------------------------------
这是一个kaggle上的练习,有空可以做一下。
-------------------------------------------------------------------------