【数据挖掘比赛】之 Adversarial validation
Adversarial validation
数据挖掘比赛,一般都分为train(线下)和test(线上),test一般分为A榜和B榜。所以,做模型的时候首先要考虑的是train和test的分布是不是一致,保证分布的一致,是做模型的前提咯。不然,线下好的很,线上也是各种蹦,线上线下不一致。其次,要trust local cv, 线上显示的A榜只是具有一点点的参考性,千万不要一味地被A榜的分数牵着鼻子走。在抖动比较大的数据中,可能种子不同分数都差别很大,这个时候更应该考虑泛化能力,可能这个种子只是刚好拟合A榜,B榜蹦成翔。
通常情况下,在线下阶段构造特征时
Adversarial validation(对抗性验证)是一种在Kaggle上非常流行的技巧,在这里有很多大牛都在使用这种方法来提升模型性能。其核心理念非常清晰,在原始论文中也有详细的阐述与论证
给 train 和 test 集标注新的标记 isTest:将 train 标记为 0;将 test 标记为 1。
然后构建一个分类器(如lgb、xgb、lr等),用于对新生成的标签isTest进行预测,并从训练集中获取相应的几率估计值(此处指通过oof方法计算得到的概率)。
计算得到测试样本isTest的几率值越高,则该样本与测试集的分布越趋近于一致。
按照概率值从高到低排序后选择概率值最高的n%数据用于线下验证,并观察该线下的验证数据分布与线上测试分布之间的相似程度如何;通过实验观察具体的有效比例是多少
5)理想情况下,交叉验证的auc越接近0.5咯,此时分布越一致。
此时,所选的线下验证集大体上与线上测试集呈现出同步增减的趋势。
这位Kaggle高级玩家搭建了一个演示版本,并分享了其GitHub仓库链接:https://www.kaggle.com/kevinbonnes/adversarial-validation
