导语: 马上就要五一了,祝全世界人民五一快乐!在这之前,想过好几个准备这些天可以完成的专题,比如Boosting系列在搞点最近几年的新玩意,或者开一个新专题,如心心念念的GNN/GCN(主要是又可以去回忆一下信号与系统的内容),或者把最近王喆老师的推荐系统看看,或者卓克老师的科普人物系列,模仿一下大佬的写作风格,或者写点风控模型相关的,正好与节日氛围想匹配。然而,当我回到家,打开知乎正好刷到一篇讲Adversarial validation相关的,Adversarial,对抗,我喜欢的内容,写它写它写它(抄它抄它抄它)。

本文提纲如下:

  • 地震无处不在
  • Adversarial validation
  • 对抗训练-DANN
  • 总结

地震无处不在

训练集与测试的不一致问题是我们经常面临的问题,在互金领域,市场环境变化,准入策略,额度策略的调整,会导致训练样本在时间维度上存在差异,因此在利用大规模样本,或者长期限样本来训练模型时,必然会存在训练集与测试集(或者当前线上打分模型)产生偏差,这种现象在模型指标上的表现就是训练集,验证集上的KS/AUC想对较高,测试集上天然会存在decay的现象。面对这种情况,不能把原因单纯的归结为过拟合,而使劲地去改善这种表面的过拟合现象,也需要考虑上述人群变化的原因。

训练集与测试集差异明显的典型例子很容易发生在Kaggle比赛,或者国内高水平的比赛上,比赛前期显示的都是在公榜上成绩,最后的评判的却是的额外的私榜上,就会产生很大喜闻乐见的地震, shake up。如Kaggle比赛LANL Earthquake Prediction,在public Leaderboard中排名第一的,在private Leaderboard却掉到了2734,而后面一大票老哥却冲到了前排,上演数据世界的地震。

所以大佬们,总是提醒我们,trust local cv,但是在很长一段时间大佬却没有告诉我们如何构造稳定,测试集与验证集一致的方法,而正是本篇要带来的一种方法。

Adversarial validation

Adversarial validation,网上的翻译是对抗验证,但是当我看完内容之后其实是没有发现太明显的对抗痕迹,还是高攀得起的,步骤如下:

  1. 构建一个样本的分类器,该二分类器的任务用于区分样本来源于训练集,还是测试集。因此,需要为原始数据新增一个标签列,将训练集中的样本标记为0, 测试集中的样本标记为1,样本的特征是数据中已有的特征,或者衍生的新特征,生成新的训练数据集;
  2. 将新的训练数据集进行划分,保留部分样本作为该样本分类任务的测试集
    , 利用分类算法(XGBoost, LightGBM)等对数据集进行训练,AUC作为模型指标;
  3. 在测试集
    中进行验证,如果模型效果AUC在0.5左右,说明该样本分类模型无法区分样本来源训练集,还是测试集,说明原始数据中训练集,测试集分布是一致的;如果AUC较大,如0.9, 说明样本分类器很容易区分样本,间接说明训练集与测试集存在很大差异;
  4. 根据第3步的结论,对于分布一致的,正常对目标任务训练即可。对于分布不一致的,可以继续进行样本挑选的尝试。利用上述样本分类器模型,对原始的训练集进行打分预测,并将样本按照模型分从大到小排序,模型分越大,说明与测试集越接近,那么取训练集中的TOP N 的样本作为目标任务的验证集,这样即可将原始的样本进行拆分得到 训练集,验证集,测试集。那么线上模型验证时,在这样的数据上调参等得到模型,如果在验证集上效果稳定,那么应用在测试集上,大概率结果是一致的

如此,完成了local CV的构建。有了上述的思路,可以做进一步的扩展(在可容忍的模型误差范围内), 利用样本分类模型,挑选与测试集相近的训练集,做样本的反向选择,挑选合适训练样本进行模型训练。至于还有其他应用,同学们可以继续探讨。

对抗训练-DANN

看完上述方法,确实很实用,至于效果嘛,笔者还没在自己的业务数据上实验,后期有了结果在进行补充(此坑比填),上述好像也没有发生什么对抗,但是不要一看到对抗就陷入到GAN,生成对抗网络的思维里面,似乎一提对抗就要有显式一个生成器,一个判别器,两者相爱相杀,共同提高。在2015年,就有一篇对抗训练(而不是对抗生成)的文章,Domain-Adversarial Training of Neural Networks,就是从梯度翻转(Gradient reversal layer)的角度来进行对抗训练,如果希望深入学习这方面的东西的同学,可以检索领域自适应, domain adaption相关的内容,了解相关的思路,至于能否解决业务问题,还需要看场景。

还是以风险模型为例,如果一个公司要启动一个新业务线,而针对的客群跟当前跑通的场景是不同的,人群差异较大,那么就面临的业务任务启动的问题,那么怎么高效的利用历史积累的数据样本呢,很容易想到迁移学习,而上述讲到的领域自适应是迁移学习中的一种,可以利用DANN框架进行对抗训练,一个任务用于用于进行具体任务的训练(对应图中的 label predictor), 而域分裂器(对应图中的domain classifier),其标签就是用于区分样本来源于哪个业务线,哪个客群等,通过对抗训练使得在特征提取器部分能够学习到多个客群的本质特征,学习到共同特征,以至于域分类器陷入懵逼状态,安能辨我是雌雄,从而完成迁移学习,解决样本不足的问题,在预测是只需要将提取的特征进入具体任务的分类网络即可。

上述方法听取来是有效,我以前也实验过,对于模型还是有提升的,然而,这毕竟是一个思路,没有具体的落地。

总结

上述两种方法,其实是两个不同的思路,只是刚好说到对抗,就联想到了DANN。顺便说一下,对抗训练的思维,给我们开启了一个新的模型训练的思路,传统的机器学习方法,重要的目的是根据目标函数,尽力去拟合即可,使得损失最小,而对抗训练是尽可能利用额外的信息,解决额外的一些任务,我们常说,模型是很容易偷懒的,给它找个对手,一切都是为了它好。至于对抗训练方面的内容,又要挖坑了,此坑可填。

参考内容:

Adversarial validation, part one​fastml.com

label y 训练集测试集x_Adversarial validation-对抗验证| 一种解决训练集与测试集分布不一致的方法...相关推荐

  1. 深度神经网络(训练集,验证集,测试集), 提升模型效果,交叉验证

    随笔 神经网络训练确实是loss越小,效果越好,但不是绝对的. 因为损失小只是对训练集而言,所以要划出部分数据不做训练,只做验证,即为验证集,验证集对网络训练是没影响的, 所以要将数据集分成:训练集, ...

  2. 阿里公开自研AI集群细节:64个GPU,百万分类训练速度提升4倍

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :量子位 AI博士笔记系列推 ...

  3. 面试了10几家软件公司测试岗位,做的面试题大盘点,重点大合集

    马上就是金三银四了,不知道小伙伴们有没有准备好呢?希望这篇文章的内容可以帮助到大家! 另外文末给大家准备了资料(好几套面试题加学习资料等),需要自取! 项目的测试流程 1.拿到需求文档后,写测试用例 ...

  4. FCN训练不收敛的原因分析和最详细的FCN训练与测试自己的数据程序配置

    在2015年发表于计算机视觉顶会CVPR上的Fully Convolutional Networks for Semantic Segmentation 论文(下文中简称FCN)开创了图像语义分割的新 ...

  5. ubuntu16.04下使用YOLOV3训练自己做的VOC数据集(VOC数据集制作+模型训练步骤+训练参数解析和问题解决+训练日志可视化(loss、IOU)+模型测试(单张、摄像头、批量测试))

    前序 1.环境配置 请自行参考其他博客 本机环境 ubuntu16.04 python3 英伟达显卡驱动:nvidia-396 OpenCV3.4.5 CUDNN7.0.5 CUDA9.0 2.ubu ...

  6. matlab气管分割,一种基于区域生长法与水平集相融合的肺部CT图像的分割

    摘要: 为将肺实质区域从含有背景.噪声的胸腔区域里分割出来,首先,应用传统的区域生长法初步定位肺部边界轮廓:其次,去除肺部边界噪声,采用自适应曲率阈值法修复肺部边界:最后,应用水平集法中的DRLSE模 ...

  7. Nacos2.0.3版本线上bug导致整个集群挂掉从而导致业务系统挂掉的解决办法

    文章目录 @[toc] 一.问题 二.解决办法 三.项目升级demo及项目nacos配置 3.1 dubbo-demo-producer生产者端项目POM配置 3.2 dubbo-demo-consu ...

  8. 食物链 (利用并查集的两种解决方法)

    食物链是并查集中的一道经典题, 第一次看<挑战程序设计竞赛>上懵懵懂懂, 最近又看见了发现还是一脸懵逼. 首先题目如下 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形 ...

  9. Galera Cluster: 一种新型的高一致性MySQL集群架构

    2019独角兽企业重金招聘Python工程师标准>>> 1. 何谓Galera Cluster 何谓Galera Cluster?就是集成了Galera插件的MySQL集群,是一种新 ...

最新文章

  1. VBA Editor Addins -- VBE插件模板开发众筹
  2. Fedora 31安装RPMFusion源的方法
  3. PAT (Basic Level) 1044 火星数字(模拟)
  4. odoo12 日历模块_odoo12
  5. 分布式光伏补贴_四川:2020年起工商业分布式光伏已无补贴
  6. JavaScript基础语法快速入门
  7. 布局之StackPanel面板
  8. 国内外计算机专业图形图像处理课程现状,计算机图像处理论文
  9. html右下角的广告特效,用jQuery实现网页右下角弹出广告效果
  10. 如何将pdf文件转换成word格式
  11. 推荐一款 GitHub 星标 11.5K 的神器,可将任何设备转换为电脑辅助屏幕
  12. 【QCM2150】WCN3680 WFA认证11ac AP 4.2.23测试FAIL
  13. ActiveMQ学习(二)——MQ的工作原理
  14. 重置form表单中的input值
  15. 论文投稿指南——SCI选刊
  16. 学生管理系统(链表)
  17. 自动驾驶之——CAN总线简介
  18. pid刘金琨matlab仿真
  19. 上班时间写开源软件,结果被单位告被警察抓,这算什么?
  20. 程序员合同日期不到想辞职_“我又辞职了”

热门文章

  1. Spark _01初识
  2. 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?
  3. 牛客网_PAT乙级_1018人口普查(20)
  4. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序
  5. Scala教程之:Future和Promise
  6. Mybatis基本配置和搭建
  7. 容器学习 之 本地镜像与共有镜像(十)
  8. Lombok介绍、附比较好用的几种注释推荐
  9. 乐观锁和悲观锁的使用场景及应用——Java高并发系列学习笔记
  10. 【终极方法】This method must return a result of type boolean