【数据挖掘比赛】之 Adversarial validation

Adversarial validation

数据挖掘比赛,一般都分为train(线下)和test(线上),test一般分为A榜和B榜。所以,做模型的时候首先要考虑的是train和test的分布是不是一致,保证分布的一致,是做模型的前提咯。不然,线下好的很,线上也是各种蹦,线上线下不一致。其次,要trust local cv, 线上显示的A榜只是具有一点点的参考性,千万不要一味地被A榜的分数牵着鼻子走。在抖动比较大的数据中,可能种子不同分数都差别很大,这个时候更应该考虑泛化能力,可能这个种子只是刚好拟合A榜,B榜蹦成翔。

一般,在线下造特征时,都会去检查特征分布一致性,虽然特征分布一致,但是进行验证时,我们一般都是进行Kfold交叉验证,每折作为valid验证集的样本中可能存在和test集中样本分布不一致的,这种不一致性,可能是样本本身(如客群之类)的差异,即训练集与测试集分布相差非常大。此时,使用交叉验证的结果来作为验证结果,线上结果可能就很糟糕了。

Adversarial validation(对抗性验证)在kaggle上看大神用,Adversarial validation原文章在这http://fastml.com/adversarial-validation-part-two/,思想很纯粹。

1)给train训练集和test测试集,打上一个新标签,例如isTest,train的话isTest为0,test的话isTest为1。

2)然后构建个分类器(lgb,xgb,lr之类的),对新打的标签isTest进行预测,得到训练集的概率(这里的概率为oof的概率)。

3)得到训练集样本的isTest的概率,概率越大,该样本与测试集的分布越一致。

4)将得到的概率降序排列,选取前n%的样本作为线下验证集,此时线下验证集的分布就比较接近线上的测试集的分布咯,前百分之多少自己尝试咯。

5)理想情况下,交叉验证的auc越接近0.5咯,此时分布越一致。

此时,选取的线下验证集,大概率上与线上测试集是同增同减了,work不work还要看数据集,还是要先去尝试。反正,构建一个稳定的线下验证集确实很难,一般将交叉验证结果作为线下验证集结果都是不稳定的。Adversarial validation也是提供了一种思路。

kaggle大佬做的demo:https://www.kaggle.com/kevinbonnes/adversarial-validation

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值