【数据竞赛】5行代码检测分布不一致,代码少效果好!

5行代码系列,是包大人班车日更精选的原理简单明确,效果立竿见影的机器学习武器库。

往期:

5行代码提升GBDT,提升巨大!

5行代码提升时间序列预测,都有用!

5行代码实现的对比学习,效果超好!

我们还是用一道题目开场吧!

问题引入

大家都招过外包标注,怎么选出合适的数据是一个技术活。

如果你标的是图片分类数据集,合适的含义就有两层

第一,不一样的类别。有太多猫猫了,那么再加数据也意义不大了。

第二,有代表性的类别,狗狗照片里面有太多柴犬了,你也得把二哈,萨摩耶,德牧,短腿柯基也弄进去。

怎么解决这个问题,给标注每天选数据呢?

这进入了我们今天的关键,分布不一致检测。他有个洋气的学术名叫concept drift detection,概念漂移检测。

传统的学术派解决这个问题的经典方法,就是用一个分布函数,把历史的数据拟合出来,然后看看待检测数据超出置信空间的水平。

以上方法有两个问题,第一,严重依赖于分布函数的先验。第二,他是无监督的,无监督听起来就不靠谱。总结起来就是又费劲又受限。

他的应用场景有开头的新样本发现,如果你标的意图识别数据,就是意图发现。其他应用还有其他的像异常检测,debias等。

那么今天的主角呼之欲出了,有监督,无先验。又简单,又好用

我以意图发现为例(找出有可能好友新意图类别的样本),几句话讲明白这个方法。


方法原理

已有的数据打上0,待检测数据打上1,然后样本拼接,训练一个lstm。最好做一个5折交叉验证,然后把验证概率大于0.9(自己设)的找出来。

他的原理就是用分类器做一个数据来源分类任务。大家都知道,两个分布重叠的部分,一会儿0,一会儿1,模型就学懵了。

要是数量均衡的话,模型只好给你个0.5敷衍完事。既然模型在重叠的分布上敷衍了事,那我把模型有把握的部分,找出来不就行了吗?

嗯,有把握的部分就是高置信的部分,你可以相信模型找到了一点不一样的东西。这些不一样的东西,才会被他学到。所以过高的置信度样本,就是我们要找的刺头。

除了意图发现,结构化数据可以用这个方法来找出分布不一致的样本和特征。

怎么做呢?和前面过程一样,一部分给0,一部分给1。你把分类器换成LightGBM就可以了,他还可以生产特征重要性,在划分新老数据的时候,他把特征bias的程度,给你打了一个排名。

61a8ab7c13ee178c2094e4856a31eb00.png

这是以前我在PAKDD AUTOML竞赛中用来处理drift特征的方法。验证AUC大于0.65的话,特征用时间窗来更新下,删掉一部分特别飘的。这个方法在工业界上线也挺有意义的。

bebcc453cac5463dd0f6dbcc92d73bf7.png


代码实现

如果你看懂了前面,基本就不需要看代码就能实现出来了。核心原理代码。

df_history['lable'] = 0 #历史数据
df_now['lable'] = 1 #检测数据
df_all = pd.concat([df_history,df_now]).reset_index(drop=True)
model_list,prob = model.fit(X= df_all['feature'],y = df_all['lable'], kfold=True)
df_drift = df_all[df_all['prob']>drift_thres]#找到prob>drift_thres的样本

完整的代码在后台回复 漂移检测


最后,会的同学说,这不就是adversial validation吗?

包大人你又在这水班车日更了。

包大人:哎,你会了不代表所有人都会。班车到站了,打卡上工打灰了。

都看到了这里了,点个关注吧!包大人的精彩班车知识分享。

 
 
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载本站qq群955171419,加入微信群请扫码:

f38f5a00360853e4f7caa4b8e5a24f41.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值