当前位置: 首页 > news >正文

kaggle比赛_由kaggle的一个失败的比赛引出一个CVR的小问题

今天刷知乎的时候无意看到cvr 预估中的转化延迟反馈问题概述 这一篇文章,了解到了"转化延迟"这个概念,让我想起了去年kaggle一个不成功的比赛.随便写写.

转化延迟

首先看看原文转化延迟的概念:

点击行为可能在用户浏览后的很短时间内就发生并被广告系统收集不同,广告后续所产生的转化conversion很可能延时发生(更可能是通过不同的方式延迟上传的,如需要广告主回传的深度转化行为),比如看过一个商品广告,当时有些心动但并没有马上去买,过了几天按捺不住又去购买(Delayed Feedback),给建模带来困难。

比赛简介

再看去年kaggle的比赛Microsoft Malware Prediction

这是一个由微软举办的比赛,预测一台机器是否很快会受到恶意软件的攻击。是由2015年Microsoft Malware Classification Challenge (BIG 2015) 比赛的延伸,而2015年比赛已经成为恶意软件检测领域小有影响力的数据集,little boat 和jiwei liu的冠军solution 对应的网页还被不少论文引用了,因此这次2019年的比赛吸引了不少高手参加.

关于这个数据集,是有八百万台机器样本组成,每个样本包含了诸如操作系统,版本号,是否安装杀毒软件,杀毒软件版本号等八十多列关于该机器样本的信息,虽然feature里没有直接的时间特征,但是通过对版本号这种暗含时间信息的特征做EDA分析,可以看到,train和test其实按照time 做split 的.test集里的机器基本都是比较新的版本号.

19ae89fb09b882d4853e7c7c8b001891.png

通常我们知道涉及到时间分割的比赛由于分布不一致模型很容易不稳定,但是这次比赛样本很多(八百万),而且使用的AUC做为metric,数据特征比较丰富,容易拉开区分度.在过去时间split+auc的比赛里,比如talkingdata-adtracking-fraud-detection 以及 home-credit-default-risk 均未发生特别大的shake.因此大家都预期这次比赛不会发生shake,这也是同期还有别的比赛(ELO),但是大部分高手都参加Microsoft Malware Prediction比赛的原因.

令人震惊的shake up

令人意想不到,到开榜那天,巨大的shake up的让所有投入巨大时间精力都愤怒了.首先在这里说,kaggle有两种shake up,一种是合理的,被shake down的是由于新手过拟合造成的,另一种是不合理的,被shake down是由于数据集质量不足造成的.通常我是通过"奖金区","金牌区","非折叠区(top50)"里保留多少GM,master来判定shake是否合理的,比如下图,shake的都是kaggle expert及以下的,而保持名次都是GM和master,就是合理的shake.

062c4d65b27062969b48bf19faac931e.png
合理的shake up(某比赛public榜)

而在Microsoft Malware Prediction比赛的private榜里,top10居然只有一只队伍高过master,剩下的都是expert以下的,可见这次比赛的shake是非常不合理了.说明这个比赛的数据很可能有问题.

53f939f7c53dd6e129f9e957477c8df3.png

shake up的原因:转化延迟

开放private榜后,愤怒的kaggler开始通过提交来测试private 数据寻找原因,很快原因就被kaggle的著名EDA高手Chris Deotte找出来了找出来了, 他只用七行代码就在private榜上比第一名还高的成绩,其代码仅仅是把最新的操作系统版本的被恶意软件感染的概率全部手动设置为0,其它的设置为0.5就行了.

之所以会出现这种情况,是因为老的电脑机器都已经运行了足够的时间,经过了恶意软件的考验,包括train里和public的数据的label都是正常,而private里一部分最最新的机器,离制作数据集的时间太近,还没来的及被恶意软件入侵,转换为正样本,因此其label就几乎全标注为0了,这也是Chris Deotte 简单的写个规则就超过了第一的原因,因为模型并不能去预测这些错误标注的outlier label.具体可见Summary of Microsoft Malware Shakeup

c0b07486e3cf5bb3e66abbcb00b63e4d.png

小结

总的来说,这场比赛就是出题方没有注意到转化延迟问题,在离制作数据时间最近的样本中制作了一堆outlier,最终比赛结果毫无意义.不顾也正如很多人所说的一样,对于一个算法工程师来说,定义一个好问题,制作一个好的数据,很多时候比给出一个好的solution更困难,更重要.连微软都不小心在这里翻车了.

小结2

在我遇到的比赛数据集里,数据质量可分为三类

  • 1.完美的数据集
  • 2.不完美的数据集,有小瑕疵但是不影响比赛进行的,比如出现了home-credit 和ieee-fraud-detection duplicate id leak,但前者8000只队伍仅有1只发现,后者最后基本都发现了,因此没有影响到比赛的结果.
  • 3.失败的数据集,如本次比赛,可以通过赛后不成功的shake up看出来.

做出完美,没有瑕疵的数据集是很不容易的事情,上述三者大概是1:1:1的样子吧,去翻过往kaggle比赛的leaderboard shake 记录,失败的比赛还不少.当出现失败的数据集的时候,比的就不是谁模型好,而是谁能够拟合到test集.在kaggle这就是看运气了,放在某些平台private开放几天的,就可能出现Chris Deotte那种测出test分布而刻意过拟合的方法,这时就是比谁小号多,谁更能private share了.而这些平台跪舔评委的答辩制度导致参赛者不会指出出题方的错误.所以在失败数据集不可避免的情况下,我还是倾向于kaggle这种形式,毕竟RP好的人不可能永远RP好,但是人品差的却可能永远人品差.kaggle这种比赛形式虽然不能挽救比赛的失败,起码可以让没有参加比赛的人在复盘的时候知道这是一个失败的比赛.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 存储过程
  • 启动子级时出错_买面粉不能只看价格,看准包装上这两点,买面粉不出错
  • C语言中嵌入式SQL语句
  • php编译成二进制文件_基础为零?如何将 C++ 编译成 WebAssembly
  • 履带机器人运动控制器c++_PAL Robotics借助磁编码器技术实现机器人运动平衡
  • css 背景图怎么设置自动填充满_几种常见的CSS布局,新手一定要学学
  • 关于存储过程的一些tips
  • python判断文件读取结束_python中readline判断文件读取结束的方法
  • Memory Notification: Library Cache Object loaded into SGA
  • 加密机工作原理_观健电解水机工作原理是什么 电解水机工作原理【介绍】
  • ORA-02064: 不支持分布式操作
  • 无监督学习与有监督学习的本质区别是什么_监督学习 vs 无监督学习
  • wxpython使用_python图形界面开发之wxPython树控件使用方法详解
  • 无线开发,你凭什么吸引VC?
  • python画玫瑰图_python之windrose风向玫瑰图的用法-Go语言中文社区
  • python3.6+scrapy+mysql 爬虫实战
  • 【技术性】Search知识
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Apache Zeppelin在Apache Trafodion上的可视化
  • conda常用的命令
  • FastReport在线报表设计器工作原理
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JS函数式编程 数组部分风格 ES6版
  • js数组之filter
  • mysql外键的使用
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • webpack入门学习手记(二)
  • 工程优化暨babel升级小记
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 面试总结JavaScript篇
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端临床手札——文件上传
  • 如何在GitHub上创建个人博客
  • 软件开发学习的5大技巧,你知道吗?
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • %@ page import=%的用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (Java入门)学生管理系统
  • (pycharm)安装python库函数Matplotlib步骤
  • (第一天)包装对象、作用域、创建对象
  • (独孤九剑)--文件系统
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (回溯) LeetCode 40. 组合总和II
  • (一)VirtualBox安装增强功能
  • (转)nsfocus-绿盟科技笔试题目
  • (转)Scala的“=”符号简介
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core Redis 使用有序集合实现延迟队列
  • .net core Swagger 过滤部分Api