Target Leakage 数据泄露

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:

是否得肺炎ageweightmale是否服用抗生素...
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上的练习,有空可以做一下。

-------------------------------------------------------------------------

posted @ 2020-06-23 11:32  团子好软  阅读(598)  评论(0编辑  收藏  举报