Kaggle的比赛和平时的数据分析有哪些区别?

kaggle是feature为王。做feature engineering比model tuning 更有用。

现实的工作生活中的数据分析也是这样吗?感觉选model调参数也很重要啊。

希望有经验的朋友不吝解答,谢谢


这个问题的答案很明显,就不说了,讲个段子吧:

刚工作的时候在一个电商网站,注册用户上千万,但账户信息很残缺,几个同事总想通过购买记录和浏览记录等等数据把性别这个字段给补齐了。

训练集和测试集就是已经填了性别的用户,然后一通电光火炮,各种算法都堆上去,最后得到了一个最好的模型,预测准确率53%。。。。。。最后被总监戏谑为比蒙的准一点点~

最后市场部门出了一个招解决了这个问题:补齐注册信息赠送5块钱礼券。。。。


先说几个明显的区别吧。

1. Kaggle比赛只看准确度,不看模型是否容易解释。这样好判断胜负,但工作中是需要给出insight的。比如用机器学习来判断一个用户的信用卡申请是否能被通过,机器判断他不能通过,是要给出解释的。为什么不能通过?哪几个原因导致了他不能通过。这时候逻辑回归的好处就体现出来了。

2。有时候问题就不是分类,聚类,回归这么简单。数据如果有时间序列,可能就不太好弄了。举个例子啊,我们有七百万个用户,他们从五十个渠道接受广告。已知他们每个人在过去一年内每天被每个渠道的影响量,就是说我有很多很多这样的数据“张三在三月七号被渠道五影响了三次”。还已知有十万人最后买了某个产品。现在问这五十个广告对这十万人的影响力大小如何量化?同时要求考虑两个因素:广告对消费者的影响随着时间有衰减,广告之间有相互作用。

这跟kaggle不太一样吧?这需要你自己设计一个模型,然后fit进data。你要有比较强的概率论基础来做建模吧,要有一定的优化能力来做参数估计(也就是 model.fit(data) 那一步,训练模型)吧。kaggle的问题一般都不要自己真正建模,对吧?

我觉得吧,要做数据处理的工作,kaggle是一定要参加的。做feature很重要。但也别太钻进去了,有几个20%的结果就挺好的了。一般20%的结果跟第一名精度也就差那么一丢丢,真正上班谁在意那么点差别呀。

3。在公司,数据种类更丰富,结构更复杂。这就导致做feature的方式可能不太一样。kaggle比赛是面向所有行业的人的。从数据里面做feature是仅凭数据集本身的。而且没有额外的数据,但是在工作中,是有行业知识,和额外的数据的。有时候要考虑什么数据能用,什么不能用,什么应该用,什么样的数据是我们想要的。kaggle呢,很多时候就是一张表格,你连column的意义都不知道,对吧?

###

我们这边有个德国过来的哥们,貌似拿过六万块比赛的第一。我觉得他做feature很厉害,tune ensemble model显然也很厉害。我会找机会跟他合作的,到时候再来更新。没啥谁鄙视谁的,做feature其实很难的,术业有专攻而已。


作为一个为kaggle比赛出过题,也经常玩各类比赛(最高排名15/399,非kaggle,kaggle上大佬太多,实在刚不动)的人谈谈区别。

首先,在kaggle上拿一个好名次(前1%-前2%),比实际生产中作出一个好模型难很多。什么原因造成了这种难度呢?

1.kaggle上一般参加人数超过800的比赛,你所遇到的竞争压力远大于你在实际工作中你的新模型和线上模型的pk。在kaggle上你pk的是很多的grand master,1%的差别可能会让你的名次下降几百名。而实际工作中模型上线,你需要pk的可能只是你的前同事或者几个月前的自己,1%的差别可能你根本不care。以前和leader聊天,kaggle上很多比赛排名几百名的模型,可能实际中就是线上能用的了。

2.kaggle上的机器学习比赛,一般在比赛的开始过程中,你所能提取的feature范围就已经固定了,比如一个比赛给了你3张表,那你的feature engineering基本上就只能从这三表的字段中来回倒腾了。而实际公司开发中,你可以提取特征的维度会高的多,3张表抽特征auc到不了0.8,那你就再多join2张表,说不定就到了,反正目的只是线上够用。

3.公司实际开发中,除了那些广告竞价,ctr预估这种提升一点就价值上亿的勾当。模型上线不需要为了提升1%甚至更低的准确率去做那些繁杂的模型融合工作,1方面是耗时耗力,另一方面可能线上资源也不允许你这样做。

4.也是最重要的一点之一,kaggle比赛的主办方有时候为了提升比赛的难度,增加比赛的激烈程度,会在比赛的测试集中放入大量的长尾数据,这种数据在实际问题中出现的比例一般情况下会比在kaggle线上测试集中出现的比例低得多。比如,我们组之前在帮kaggle出题目的时候就放入了相当一部分异常情况下才会出现的数据。这种数据,对于我们这种整天倒腾这个业务的人来说,很容易识别并在线上进行特殊处理,但是绝大多数的kaggle player如果不是功力深厚的老司机是很难识别出来的。这种时候,往往就会造成选手的挫败感。

所以,其实在公司模型做多了,会觉得混kaggle性价比并不是太高,我现在一般看到kaggle上参赛人数超过2000人的比赛,基本上就是抱着重在参与的态度玩了。所以,我觉得,你可以玩kaggle,但如果不是特别牛的那种,别对排名太较真,重要的是多看看比赛结束以后前几名分享的解决方案。如果想拿好名次可以先从国内一些小比赛开始玩。


我来说几点吧。首先明确一下我在这里说的是用于线上产品的算法模型,而不只是用于数据分析的模型

工作时使用的模型不止考虑精确度

kaggle的比赛里,模型的精度是唯一的参考标准。在实际工作中,还有很多其他的因素要考虑。

  1. 延迟。很多应用中对结果返回所需的时间有要求,一般不会应用过于复杂,计算量过大的ensemble模型。例如刷新facebook/微博的信息流等,如果用户等待的时间过长,体验是很糟糕的。
  2. 可重复性。因为线上的环境经常变化,模型经常需要重新训练。所以一般需要一个系统的,可配制化的方法来保证下一次训练的时候还能得到同样良好的结果。所以在工作中也不会去因为微小的性能提升去应用过于复杂的算法和过多的参数调整,因为这样带来的提升往往不可复现。如果每次更新模型(经常是以周/天乃至小时为周期)都需要大量的人工干预,人力成本是不可接受的。
  3. 成本。复杂的模型会带来昂贵的CPU/GPU成本,在很多情景下,更高的精度带来的收益并不一定能够cover这个成本。

由于以上几点,线上的业务会应用一些kaggle中不会应用的技术,比如cache,multi-stage-ranking等等。

线上环境中,数据是经常变化的

  1. iid假设并不成立。在线上系统中,实际应用的场景的数据和训练/测试数据并不是独立同分布的。例如公司经常会持续性地修改产品,修改了产品之后,用户行为也会发生变化。不同的时间用户的行为也会不同,例如春节时用户使用产品的习惯就会和平时不同。还有一个原因是推荐系统里经常会有feedback loop。比如你的模型预测打分高的东西会被排在前面,然后获得更高的曝光,获得更高的打分...等等。所以预测精度高的模型不一定实际效果就更好。
  2. 在复杂的系统里,一个算法模型往往从多个地方读取数据,数据的来源很可能并不是算法团队所有。其他团队的更新很可能会影响数据的分布。你的模型不能在这样的变化过于脆弱。

定义问题本身往往比解决问题更重要

推荐系统的问题其实可以分解为两部分:1. 定义什么样的内容是好的 2. 把内容按照1中的标准进行排序。实际中往往在(1)中花费的精力是很大的。比如在一个信息流推荐系统中,排在前面的内容往往并不是简单的预测CTR高的内容,有很多其他的问题要考虑。例如:用户点击进这个内容后停留了多久?有没有再点击进入的页面的其他内容?用户有没有分享这个内容?用户分享后其他的用户有没有消费这个内容?用户有没有关注这个内容的发布者或评论者?有了这么多的因素要考虑,应该如何权衡取舍?

而在kaggle中,问题是已经预先定义好的。

整个ML系统的设计要考虑工程实践

这里推荐一下google的论文:Lessons learned developing a practical large scale machine learning system

(未完待续)


泻药。现实中大部分时间都花在了清洗数据上,现实的数据集可是比比赛的恶心多了…比赛的很多特征提取技巧可以用在现实的建模过程中,不过现实的建模更多的会考虑性能和效率的平衡和工程上的问题…除去建模这部分,现实中问题的处理方法也更开放,很可能需要自己提出问题,设计方案,设定标准,不断的试错和修改,模型只是很小的一个部分,排在前面的还有用户需求和可行性权衡,数据的获取等等…


有差别啊!差的简直不要太多!

我实习的头两个月献给了数据获取和清洗,获取方式包括而不局限于购买、路由器抓包、网页爬虫、调查问卷、日志分析……数据工具不知道掌握的怎么样,反而Wireshark、Scrapy和ELK弄的很6。

最后搞了一堆乱七八糟的数据,自己想怎么提特征。回头看看Kaggle里的那些特征,简直不要太完美——人家已经都提好了放在那儿了,Kaggle选手做的“提特征”就是算高层的抽象提取了……

数据科学大体上由数据-特征-模型几个环节组成,模型只是为了逼近特征工程的效果,但是特征工程怎么用Kaggle衡量?很遗憾,Kaggle注意的只是最后者,虽然可以快速起步,但是不能沉迷于此。


Kaggle比赛中:Feature Engineering 为王,Tuning+Ensemble 为后

参加Kaggle比赛的有一大半是在校学生,剩下零零星星的企业和个人开发者。不得不说,Kaggle为普及机器学习与数据科学做出了巨大贡献,也着实提高了选手们的技术水平。

但在比赛中,为了降低 Overfitting 让分数更高,选手不得不追求极限状态,耗费大量资源组合Ensemble Model,只为提高一点点的成绩。造成的结果是:Kaggle比赛结果只有很少一部分能直接应用于现实世界中的企业产品。

所以Kaggle在折腾了数年后还是没能找到清晰的商业模式,被Google收购也不足为奇了。


有几年没关注Kaggle的数据集了,不过以前的数据集很多就是真实数据集匿名化的结果。当然隐去了很多数据采集清洗的工作。其实选 model 调参数跟 feature engineering 很难完全分开,否则干嘛不找个人专门干选 model。不过从信息逻辑上将,model 本身并没有增加信息的内容,因此并不能提高已有数据集的效果,再怎么样也不会低于 bayesian error。但是 feature engineering 却有可能直接降低这个 error,从而在本质上获得更好的数据集。所以从这方面来说,feature 更重要一些。现在 deep learning 之所以效果巨好的原因之一,就是它用很多办法产生和处理了大量的 feature。

在现实工作中,有人专门研究在同样数据集情况下,model 本身的精确性,有人专注于如何获取更多更有用的数据。前者多是研究机构和学校,后者多是企业应用。Google 几年前那个著名的数据和算法曲线图,在数据量变化的时候,模型的效果可能发生根本性变化。


大概就是处于鄙视链底端的感觉


Kaggle比赛的数据都是提供的,而且结果的要求也很明确。在实际工作中,数据的获取与清洗应该要花到80%的时间吧!


做为一个毕业刚满一年+业余坚持做比赛的新手来说说自己的感受吧

1.本人在学校做的是图像相关的内容,转到互联网的数据挖掘岗位,第一个感觉就是结构化的数据处理,特征提取方面,两者差异很大,如果你打算从事互联网相关的算法,数据挖掘岗位的化,参加kaggle比赛是很好的学习机会

2,如果所学专业不是数据相关的,通过比赛,参赛选手分享的ppt,code,你可以快速的建立起整体的一个数据处理流程,在实际工作的可以使用你学到的技巧

3,平时的数据分析挖掘,可能是产品,运营驱动的,你可能用很一般的方法就可以解决,你也可能认为你一直在使用很low的方法,没有什么成就感,参加比赛可以体验到与人竞技的快乐,让你走出工作的舒适区,时刻提醒自己要不断的学习新技巧


你会发现在实际分析中很多时候模型的影响作用占比非常小。然后基于业务经验的变量选取非常重要。


kaggle太多奇技淫巧,练多了容易走火入魔


我觉得最大的问题是kaggle的问题你明白一个前提,依靠现有的数据是一定可以做出一个比较靠谱的模型出来的。

但在实际问题中,没有这个前提,于是你可能会做很多无用功


感觉feature engineering真的很重要,最近完成一场汽车保险索赔预测的比赛,第一名用DAE (denoising autoencoder)提取的特征直接完胜,第二名分数与其相差0.002 (auc)。据赛后其说到,几乎靠一个模型就可以达到这效果。所以啊数据很重要,当然模型也需要。


e-Maize Challenge

大家有兴趣的话,可以看看这个数据挖掘竞赛!

第一名奖金10万RMB(税前)!

目前一开始一个月,8月1日截止

欢迎各个领域的高手,来此角逐!


1.问题是否严格定义:kaggle上的问题都是严格定义的,要么是预测某个连续变量,要么识别某个对象,但实际数据分析中我的目标是转化率提升、销售收入提高等等,这些问题需要一个或者多个中间目标间接实现。如何把复杂的业务问题分解为多个严格定义的数学问题,最后分配给不同人力去完成正是我佩服大老板们的地方。

2.逻辑思维能力比动手能力更重要

kaggle上的比赛,在提出新算法之后,执行算法立刻可以得到线下评测结果,线上评测结果也每天得到一次。实际数据分析工作中,一套sql执行半个小时是常见的事情,线下评测中数据预处理耗费大量的时间,而大部分情况是受制于数据量和运算能力。新算法的上线要经历长达几周的测试才能得到反馈。由于反射弧过长,我们几乎没有事后debug的机会,事前需要考虑各种情况,流程可解释性变得非常重要。


我好想kaggle拿一次第一。。。


最大的区别还是kaggle是有leaderboard的。。工作中对于一个task有时候会做个差不多就行了,满足实际要求就行了,不会去过多的看和task相关的paper,新模型。但kaggle不一样,自己排名不高的情况下,会更多的去搜集资料,看paper。


推薦閱讀:

像kaggle、datacastle、天池等大數據競賽,一般涉及哪些專業呢?
一道bat面試題:快速替換10億條標題中的5萬個敏感詞,有哪些解決思路?
2013 年末,IBM 連續 6 個季度業績下降,是出了什麼問題?
人工智慧需要學習海量數據,數據的準確性如何來保證呢?
浙江預測擁堵準確率超90%,如何實現的?

TAG:数据分析 | 机器学习 | 数据建模 | 大数据 | Kaggle |