Kaggle学习笔记--data leakage
原文:https://www.kaggle.com/alexisbcook/data-leakage
简介
在本教程中,您将学习什么是数据泄漏以及如何防止数据泄漏
如果您不知道如何预防,则会经常出现泄漏,并且会以微妙而危险的方式破坏模型。
数据泄露会导致模型在训练时高性能,使得结果准确;而在预测时变得效果很差。
泄漏有两种主要类型:【target leakage 】目标泄漏和【train-test contamination】训练-测试污染。
目标泄漏——预测变量包含不可用数据
1.要根据数据可用的时间顺序或时间顺序来考虑目标泄漏,而不仅仅是功能是否有助于做出良好的预测。
2.为防止目标泄漏,应排除在实现目标值后更新(或创建)的任何变量。
训练-测试污染
当您不小心将训练数据与验证数据区分开时,会发生另一种类型的泄漏——【train-test contamination】。验证【validation】是用来衡量模型如何处理之前未考虑过的数据。如果验证数据影响预处理行为,则可以用微妙的方式破坏此过程。如在调用train_test_split()之前进行了预处理(填补了缺失值)。最终结果是模型可能会获得良好的验证评分,但是在调用模型进行决策时却表现不佳。
如果您的验证是基于简单的train-test split,则将验证数据排除在任何类型的拟合中,包括预处理步骤的拟合。如果使用scikit-learn管道,这会更容易。使用交叉验证时,在管道内进行预处理就显得尤为重要!当您不小心区分训练数据和验证数据时,会发生不同类型的泄漏。
数据准备
在此示例中,将介绍一种检测和消除目标泄漏的方法。
1.使用有关信用卡申请的数据集来预测y系列接受了哪些应用程序。
2.由于这是一个很小的数据集,因此我们将使用交叉验证来确保模型质量的准确度量。
import pandas as pd
# Read the data
data = pd.read_csv('C:/Users/Administrator/Desktop/home-data-for-ml-course/AER_credit_card_data.csv',
true_values = ['yes'], false_values = ['no'])
# Select target
y = data.card
# Select predictors
X = data.drop