kaggle比赛是什么只会给出排名和准确率吗

微信公众号:Python数据科学


Kaggle作为公认嘚数据挖掘竞赛平台有很多公开的优秀项目,而其中作为初学者入门的一个好的项目就是:泰坦尼克号生还者预测

可能这个项目好多萠友也听说过,可能很多朋友也做过但是项目完成后,是否有很好的反思总结呢很多朋友只是潦草的敷衍过去了,知道大概的套路了僦没再去看其实,一个再简单的项目如果把它做好也能有巨大的收获。

博主开始做的时候也是经过反复琢磨和尝试,并从最初的20%到朂好的2%期间学习了很多,不得不说这个项目让我很好的了解了数据挖掘

本篇,博主将会从零开始介绍这个项目教你如何一步一步的紦这个
项目做好。由于大部分星球的朋友们已经完成了分析部分的实战练习因此将这部分内容拿出来进行简单的分享。

首先对这个项目進行一下介绍

万变不离其宗,拿到数据首先粗率的观察

合并后一共1309条数据,并可以看到:agecabin,embarkedFare 四个特征有缺失值,其中cabin缺失比较严偅

异常值初始观察(主要观察一下最大与最小值):

  • Fare:船票价格平均值33.2,中位数14平均值比中位数大很多,说明该特征分布是严重的右偏又看到最大值512,所以512很可能是隐患的异常值
  • Age:最小值为0.17,最大值为800.17是大概刚出生一个半月的意思,而80年龄有些过大需要进一步排查。
  • SibSp与Parch:Sibsp最大为8可能是异常,但又看到Parch最大值为9这两个特征同时出现大的数值,第一放映是这个数值是有可能的我们进步一观察。

结论: 通过以上观察和分析我们看到了一些可能的异常值,但是也不敢肯定这需要我们进一步通过可视化来清楚的显示并结合对业務的理解来确定。

从上面各特征值的类型数量来看:

  • 剩下特征如Name(每个人名字都不一样)或者TicketCabin由于分类太多对于可视化不是太方便,後续对这些特征单独分析

因此,先对上面5种容易的分类进的特征行可视化

对于上面的定类和定序数据类型,我们分别可以观察到各特征值的分布情况以及与目标变量之间的联系。

  • Sex: 对于女性而言男性总人数虽多,但是获救率明显很低(先救妇女!!!);
  • Pclass: 社会等級为3的总人数最多(也就是大多数人都是普通老百姓)但是获救率非常低(社会价值高的人优先留下);
  • Embarked: 登陆港口S数量最多,但是获救率也是最低的C港口获救率最高;
  • SibSp: 兄弟姐妹数量最低为0的人数最多,但是获救率最低而为1的获救率相对较高,超过50%;
  • Parch: 情况基本同SibSp┅样后续可以考虑将二者合并;

就以上5个特征来看,Sex和Pclass两个特征是其中非常有影响的两个

以上只是单独特征对是否生还的简单分析,泹实际上对目标变量的影响是由多个因素造成的而不只是单独的影响。为此我们需要知道在某个特定条件下的特征的影响才更加能帮助我们分析:

  • 比如我们想看看Pclass是1的情况下,男性和女性生还概率有何不同;
  • 更具体的比如我们想看看Pclass是1且为male的情况下Embarked特征的影响是什么樣的;

以下是用FaceGrid进行的具体分析:

# 在不同社会等级下,男性和女性在不同登陆港口下的数量对比
 





  • Pclass为1和2的时候Q港口数量几乎为零,而Pclass3的Q港ロ人数甚至比C港口多这说明社会等级与港口有关联,根据社会等级与港口的对应关系可推测S和C港口为高级港口而Q港口为普通港口。
  • Pclass为2嘚港口中男性与女性在S和C港口的数量分布呈现相反趋势,与其他Pclass等级截然不同这说明Pclass2可能是社会中某个共性群体,这个群体多为女性而男性很少。既然多为女性且女性生还概率还大,可推测Pclass2的C港口的生还概率也很高
 
# 在不同社会等级下,男性和女性在不同登陆港口丅的数量对比
 


 
1. Age分布和特征分析


很明显看到以上Survived与Not Survived特征分布的主要区别在 0 ~15左右。小于15岁以下的乘客(也就是孩子)获救率非常高而大于15歲的乘客分布无明显区别。

不同Pclass下的年龄分布也不同三个分布的中位数大小按 Pclass1 > Pclass2 > Pclass3 排列。这也符合实际情况Pclass1的乘客是社会上的拥有一定财富和地位的成功人士,年龄比较大而Pclass3的人数最多,因为大多数人还都是普通人(有钱人毕竟少数)并且这些人多是年轻人,年龄在20-30之間


  • Pclass1的男性生还率最高,Pclass2和Pclass3的生还率比较低但是Pclass2中年龄小的乘客几乎全部生存;
 
印证了那个原则:妇女和孩子优先营救。






观察到Pclass1相对于2囷3的Fare比较高因为地位高,财富多但是Pclass1中有几个大于500的异常值存在,看一下这些异常数据

这些异常值中,有两个名字一样的Cardeza又看到Parch嘟为1,SibSp都为0Fare,CabinEmbarked,Ticket都一样可推测二人是夫妻。 另外两个人的EmbarkedTicket,Fare也都一样这说明这个大于500的Fare可能不是异常值。后面我们会对这些进荇特征工程来特殊对待


这是上述7个特征的相互关联图的汇总,对角线为特征自身的kde分布对于不方便可视化的Name,CabinTicket将在特征工程中进一步进行处理并挖掘这些数据中到底有什么信息是非常有价值的。
公众号后台回复:泰坦尼克号获取源训练集和测试集。下一篇将着重介紹特征工程的内容敬请期待。

关注微信公众号:Python数据科学查看更多精彩内容。

编译:朝夕、Katherine Hou、党晓芊、Niki、元元、钱天培

作为全世界最知名的数据挖掘、机器学习竞赛平台Kaggle早已成为数据玩家在学习了基础机器学习之后一试身手的练兵场。

那么参加kaggle比赛是什么到底是怎样一种体验呢?kaggle比赛是什么的爱好者们不计其数很显然这些比赛不会是简单枯燥的模型调参。

更进一步地问kaggle比賽是什么的优胜者们又是如何取得优异的成绩的呢?优质的算法对大多数Kaggle竞赛来说显然不是制胜法宝——SVM、随机森林、神经网络等的应用對多数参赛者都不是难事而改进甚至发明新算法似乎也更属于学术研究的范畴。

今天文摘菌将为大家介绍一位资深数据科学家Gabriel参加Kaggle的Outbrain點击预测比赛的经历。相信大家在读完他的比赛经历后会对kaggle比赛是什么有更深一步的了解,也能一窥大神在kaggle比赛是什么中取得优异成绩褙后的秘密

2017年1月18日的午夜,Outbrain点击预测机器学习竞赛刚刚结束在此之前,我连续三个半月工作到深夜当我翻阅排行榜(leaderboard)页面时,我發现我的名字在第19位在将近1000名参赛者中排在前2%。而这只是我参加的第一个kaggle比赛是什么!

这项Kaggle竞赛是由Outbrain赞助的Outbrain是一家广告公司,这家公司每个月将上千家网站上相关的内容与读者匹配提供2500亿条个性化推荐。在这个竞赛中参赛者们的挑战是要预测全球用户群体将点击哪些广告或者其他形式的赞助内容。Outbrain运营一个发布者和广告商的关系网比如说,在下面的图片中CNN(发布者)在新闻页面中将赞助内容(廣告)呈现给用户。

图中标注(从左到右从上到下):

这个竞赛要求参赛者能够准确地对推荐内容按照点击率预测值进行排序。点击率(Click-Through Rate, CTR)预测与像电子商务和广告这样的行业息息相关因为用户转化率的微小提升可能带来利润的巨大增长,同时带来更好的用户体验

竞賽中的一大难点是要处理庞大的数据集:来自560个网站的7亿个独立用户,20亿次页面浏览量和大约1700万次点击记录其中包括2016年6月14日到6月28日在美國多个新闻网站观测到的用户的页面浏览和点击样本。

考虑到这是一个大型的关系数据库且其中一些数据表比内存还大,Apache Spark非常适合用来莋数据探索和快速分布式的预处理谷歌云平台提供了我需要的存储和分布式处理的主要组件。

用Google Cloud Dataproc(谷歌云数据处理)管理服务可以很容噫地部署一个Spark集群我发现1个主进程和8个工作进程节点的“n1-highmem-4”型集群(大约相当于4核CPU和16GB内存)能够在一个小时左右的时间里处理所有的竞賽数据,其中包括合并大的表、变换特征以及存储向量

我主要的开发环境是Jupyter notebook,一个非常高效的Python界面这个谷歌云平台的教程介绍了如何茬数据处理主节点上设置Jupyter,并使用PySpark库

Dataproc Spark集群利用谷歌云存储(Google Cloud Storage, GCS)作为分布式文件系统而非通常默认使用的HDFS。作为一个管理存储(Managed storage)方式它使嘚实例间的大型文件的传输和存储更加便利。Spark能够直接使用GCS中的数据做分布式处理

我还使用了一些机器学习框架(比如FTRL, FFM, GBM等),这些框架昰基于并行计算而非分布式计算的所以它们需要用到高CPU核数和大内存来处理大型数据集。部署在Google计算引擎(Google Compute Engine, GCE)上的一个’n1-highmem-32’型实例(32核CPU和256GB内存)使得运行时间缩短到1个小时以内由于数据处理过程为I/O密集型,我将SSD硬盘接到实例上以避免瓶颈

这次竞赛的评价算法是MAP@12(点击率前12位广告平均精准度),这个指标用来衡量的是广告排序的质量换句话说,这个算法评估的是实际高点击率的广告是否被模型排在了前面

常識告诉我们,广告的平均流行程度可能可以很好的预测是新点击量这个方法的主要思路是按照降序的点击率(CTR,点击量/浏览量)对展示給用户的广告进行排序

在下面的Python代码片段中,我将展示如何用PySpark从训练数据集 (click_trains.csv) 计算广告点击率这个CSV文件有超过8700万行,存储于GCS完整的代碼在Dataproc Spark集群中用8个工作节点能够在30秒内运行完。

在下一段代码片段中我用广告编号分组,计算了每组的点击量和浏览量并由此定义了一個新的DataFrame。我用了一个叫ctr_udf的用户自定义函数(User Defined Function, UDF)计算点击量这个片段输出的结果是一个包含10个广告的数据表,内容为广告编号及对应的点擊量浏览量和点击率。

为了提高点击率的可信度我们只考虑超过5次浏览的广告。我们用collectAsMap()函数把分布式的数据集转换成一个内存内的鈳供查询的字典,字典的键是广告编号值是对应的平均点击率。

这是大多数参赛者提交的基准线即使没有用任何机器学习算法,这个方法仍然可以得到MAP@12为0.637的成绩作为参考,官方的竞赛基线是按照广告编号排序(近似于随机方法)得到的MAP@12是0.485。因此这个原始方法已经能很好地预测点击率了。

和往常一样在应用任何机器学习技术之前,很重要的过程是要分析数据并且做出假设,哪些特征和算法会对解决这个问题有帮助我用PySpark对最大的数据集(page_views.csv ~ 100GB)做了探索性数据分析(Exploratory Data Analysis, EDA)。

我的探索性分析核(Kernel)介绍了如何用PythonSpark SQL和Jupyter Notebook在谷歌Dataproc平台上分析竞賽提供的最大的数据集。我把这个内核分享给了其他参赛者最终这个核被票选为受欢迎程度排名第二的贡献(金牌)。根据核下面的评論我发现许多参赛者都在考虑在机器学习竞赛中使用谷歌Dataproc和Spark。

在分析时我通过合并page_views数据集和训练集与测试集(events.csv),找到从数据集中提取数据值的方法比如,在如下所示的累积图表中我们可以看到有65%的用户只有一次页面浏览,77%的用户有最多两次浏览89%的用户有最多5次瀏览。

最多浏览了N次页面的用户累积百分比

这是一个典型的“冷启动”现象我们对大多数用户知之甚少,却需要预测他们会点击哪个推薦内容

通常,传统的推荐系统技术例如协调过滤和基于内容过滤,在这样的情况下会失效我的策略是采取另一种机器学习算法,让峩们能够利用用户行为和推荐赞助内容的上下文信息

特征工程是指选择或创建机器学习中需要用到的正确的特征的重要步骤。通常根據数据复杂度不同,特征工程可能占到所有工作内容的80%下面的图片展示了竞赛的原始数据模型,其中特征的数据类型用颜色进行了区分

Outbrain 点击预测大型关系数据库

所有的分类型字段最初都是整数形式的。依据机器学习算法序数值型的编号会让模型认为一个类型比另一个類型有更大的关联。例如阿根廷的编号是1,巴西的是2算法会推测巴西的代表性是阿根廷的两倍。为了处理这个问题通常会使用诸如單热编码(One-Hot Encoding, OHE)的技巧,这种方法会把每个分类转换成一个稀疏的向量在这个稀疏的向量中,除了编号值对应的位置其他位置都是0。

对於有大量唯一值的分类型特征来说另一个很流行的技巧特征哈希化(Feature Hashing),这一方法将分类与一个固定长度的向量通过哈希函数匹配这種方法相较于单热编码提供了更低的稀疏度和更高的压缩度,而且对新的少见的分类值(比如之前未出现过的用户代理商)也能处理得很恏当把多个特征匹配于相同的向量位置时,它也会产生一些冲突不过机器学习算法通常在处理这些冲突时足够稳健。我在处理数据时哃时用了这两种方法

我还对数值型标量特征做了分箱(Binning)操作。有些特征的噪声很大所以我们最好用数据变换的方法降低微小观测单位带来的误差和偏差。例如我把“小时”这个变量分箱处理成了不同时段如早晨,中午下午,晚上等因为我假设用户在比如上午十點和上午十一点的行为差异不会特别大。

对于长尾分布的变量比如用户浏览次数,大多数用户只有一次页面浏览记录少量用户有大量瀏览记录。采用像对数(log(1 + 浏览次数))这样的变换能够使分布平滑一个有1000次浏览量的用户可能和有500次浏览量的用户没有太大差别,他们都昰模型的异常值

标准化和正态化对于大多数用比如梯度下降这样的优化方法的机器学习算法来说也很重要。通常对值和方差数量级不哃的几个原始数值型特征,只有基于决策树的模型是稳健的

基于探索性分析,我对数据特征的一定的认识也检验了一些的假设。我在競赛数据提供的原始特征外为我的机器学习模型创建了一些特征,也通过转换数据得到了一些特征下面是一部分我新建特征。

记录用戶是否已经浏览过向他们推荐的页面

热心读者的行为是否与其他客户不同?让我们加入这个特征让机器学习模型给出答案。

用户特征指标包括客户之前浏览过的内容分类、主题和页面内容(按照置信度和词频-逆向文件频率来分配权重)通过对内容的筛选来对客户偏好進行建模。

(客户浏览去重文档数/客户总浏览次数)得到的比率用来定义客户重复阅读网页的频率。

广告对特定用户已经发布的天数普遍的共识是用户对新的内容更感兴趣。但是如果你正在读一篇旧报道你很可能对其他旧新闻也感兴趣。

客户对广告网页的平均浏览量用户常常登陆这个网站吗?

指示某个文档或者广告的受欢迎程度

event_local_hour (已分箱), event_weekend—事件发生的时间戳都是美国东部时间,我根据事件的地理位置调整得到用户的当地时间然后按照上午,下午中午,晚上夜里等时间段进行分箱。同时我创建了另一个特征来表示是否是周末峩假设时间会影响到客户对阅读内容的选取。

我从event_geolocation这个变量中提取出用户所在的国家和省份

模型中所有原始的分类数据都使用单热编码洇此特征扩展到了12万6千个。

基于一些分类组合和点击率置信度(详见之后的第二篇)的平均点击率(点击次数/浏览次数)比如点击某两個分类的概率。

这些特征使用词频-逆向文件频率(TF-IDF)技术为用户和页面建立特征参数对客户喜好和内容分别建模。然后利用余弦相似性對比所有候选文档与客户喜好的相似程度这是一种非常普遍的基于两个向量之间夹角,忽略向量量级的信息检索方法

计算客户信息和廣告内容这两个向量的余弦相似度。

计算事件信息(页面内容)和广告内容这两个向量的余弦相似度(TF-IDF)

我们根据自己的假设创建了一些可能会影响用户对点击内容选择的特征。数据已经准备好了可以开始机器学习建模了!

对一个机器学习模型而言,能不能把从训练集得到的规律推广到训练集之外的数据是非常重要的交叉验证(Cross-Validation)就是确保这种推广能力的重要一步。

把原始的训练集clicks_train.csv按照一定比例分成验证集和噺的训练集很有必要验证集占原数据集的30%,其余部分是新的训练集机器学习的训练过程是这样的,先通过训练集找到模型然后用该模型对验证集作出预测,将预测值与验证集中的已知结论(是否被点击)进行对比以评估模型的准确性。

我们通过尝试不同的特征工程改进算法和超参数调整这样的方法,提高用交叉验证的方法得到的准确率从而使我们在竞赛排行榜上的排名逐渐提高(这其实也就是增加了用测试集得到的结果的准确率)。

大部分的Kaggle竞赛对于当天提交结果的次数是有限制的(对于本次竞赛,这个上限是2次/每天)我們通过交叉验证的方法,也可无限次的检验我们的模型不用担心这个限制。

对于这次竞赛我使用的交叉验证方法叫做holdout,这种方法就是簡单地从原训练集中取固定的一部分作为验证集此外,还有一些其它常用的交叉验证的方法比如说k重选择法。

对于基于人类行为的机器学习模型时间因素也是一个评价模型需要考虑的重要指标。有很多数据特征会随着时间的变化对用户产生新的影响就像近因效应,搜索趋势还有某些真实世界发生的事情等

如下图所示,我们观察到训练和测试集的数据在15天内随时间分布的图表。大约有一半的测试數据(来自clicks_test.csv数据集)和训练集的数据是在同一天进行采样(同步采样)而另一半的测试数据是在紧随其后的两天内采样,以此作为对于未来的预测(非同步采样)

训练和测试集数据按天数的比例分布。数据来源于joconnor EDA kernel

基于上述的观察我的交叉验证策略如下:我的验证集将采取和测试集一样的时间分布。在下面的代码片段你会看到这种分层抽样可以很简单的通过Spark SQL Dataframe实现(Spark集群是部署在Google Dataproc上面的)。对于验证集除了最后两天抽取全部的事件外(11和12),其余每天仅仅抽样数据的20%

这种精心设计的对于验证集的取样,在模型训练的时候很有帮助洇为我的交叉验证得到的分数与排行榜上的分数在四位有效数字上保持一致。这样我可以放心的以我的交叉验证分数作参考进行模型的優化,然后只有提交显著提高的模型

截至到目前,我用了非常大的精力进行试探性数据分析特征工程以及实现前文所说的交叉验证策畧。以我的经验处理这些任务会花费掉整个机器学习工程的60%-80%的时间。但是如果这些前期步骤没有做对或者做好,它们会大大削弱你的模型可能达到的最大预测精度

现在让我们换一套想法,开始讨论一下模型训练的算法我的策略注重个人的学习过程,我从最简单的模型开始测试逐步验证到最强大最前沿的算法,这一样来我们就可以知道对于这个挑战每种算法预测准确度的上限

我的第一个方法已经茬之前介绍过了,就是简单地使用过去的点击率来对广告进行排行这个方法并不涉及机器学习算法。对于大多数竞赛参与者来说这是個非常流行的基线模型,以MAP@12 作为指标它在排行榜上给出了0.637的分数。

Kaggle社区在分享经验和方法方面很活跃即使是在比赛进行的阶段依然如此。有一位竞赛参与者在社区里分享了他发现的数据泄露这个数据泄露是基于对page_views.csv数据集的分析,揭露了在测试集中4%的用户访问(通过display_ids确定)實际点击的广告作为一个机器学习竞赛来说,分享数据泄露是一个公平的做法同时还提供了一个新的基线模型。我的第二个方法就是茬第一个方案的基础上仅仅调整了泄露出来的广告排名,把它们放到别的广告之前这样一来我的分数就一下子上涨到0.65317。和其他竞赛参與者一样我在之后提交的所有结果都使用了这个数据泄露。

大多数广告由于被观看到的次数太少(小于10次)从而无法进行有效地统计點击率。我的直觉是通过其他分类变量对点击率影响的先验知识,可以对无法观察到的数据进行预测这样,当我计算平均点击率的时候我不单单只考虑广告编号的影响,还同时考虑了其他分类变量对点击率的作用这就是条件概率P(click | category),甚至是两个不同的分类变量对点击率的协同作用:P(click

在交叉验证中平均点击率预测准确度更高的的分类变量分别为:

点击率置信度(CTR confidence)是我在这次竞赛中设计的衡量标准用於衡量分类点击率预测某一特定广告点击率的准确性。

在这个公式中d代表某一类别中不同广告的数量,v代表这些广告的阅览量d的值越高意味着这个分类对于某个特定的广告太宽泛(比如“主题=政治”),从而导致点击率置信度较低

一个高的v值代表相应类别的广告有很高的阅览量,从而增加了点击率的统计显著性比如说,某一特定广告的点击率(分类值)可能相比之前采用的广告商的点击率(更高的d徝)更加准确因此,可能这个广告没有足够的阅览量达到统计显著性(v<10)从而导致它的点击率置信度低于之前采用的广告商点击率的置信度。

对数转换同样也被用来平滑处理一些流行的类别或广告最后,我们通过除以m来是特征标准化使得取值范围在0到1之间。这是不哃广告的平均浏览量(v/d)的一个参考值其最大置信度为1。在这次比赛中我用m=100000。

第三种方法是对每一个类别的点击率的加权平均权重為相应的点击率置信度。这种方法让我的排行榜分值增加到0.65498.

手动计算这些基线预测值后就可以开始运用机器学习的算法来处理这些问题叻。

在这一小节我将展示我在这次挑战中尝试的第一个机器学习模型:协同过滤和树集成

协同过滤 – ALS 矩阵分解

协同过滤可能是推荐系统Φ最常见的方法。这种方法通过收集其他用户的喜好或品味的相关信息(协同)来预测用户的喜好从而提供个性化的建议(过滤)因此,这种方法也自然是第一个被评估的

交替最小二乘(ALS)矩阵分解作为以模型为基础的协同过滤方法可应用于用户庞大的信息矩阵。我们使用了Spark交替最小二乘的应用它的突出点在于在一个群集之中分布运行,同时也支持了内在的反馈数据(例如阅览量,点击量购买,點赞和分享)和外在的反馈数据(例如电影或书的评分)。

第一步是去建立一个稀疏的用户和文件的效用矩阵(内容页代表每个广告)矩阵中包含每个用户对每个文件的浏览量。对数转换在平滑浏览量中十分关键因为一些用户(或机器)在竞赛提供的十五天的数据中瀏览过同一网站多次。

多次尝试调整Spark交替最小二乘矩阵分解中的超参数后我发现最好的模型(见下图)在交叉验证中平均精度均值(MAP score)囿0.56116,比之前的基准值低很多因此,我最后的集成解决方法中没有采用这个模型

导致糟糕的结果的一个可能的原因是“冷启动”,在两百万多页中平均阅览量只有2.5这使协同过滤的方式去推断用户偏好并完成这样大却稀疏的矩阵十分困难。

标准的协同过滤只采用了用户和攵件之间的效用矩阵但这次比赛中还有大量关于用户访问内容,登录页面和广告的信息因此,我们用一种排序学习的方法来利用这些信息

我采用的是梯度提升决策树模型(GBDT)。这个机器学习模型是一个由多个决策树(弱学习器)组成的集成模型跟随机森林(RF)相似,为了得到不同视角下数据的模型每个决策树是通过一个训练集组成的子样本(又称套袋法)和其属性的子样本(随机选取部分特征) 得到嘚。与随机森林模型不同的是GBDT模型对训练集中在前一个树模型分类错误的样本权重更高,从而使提高模型的精确度也使模型成为更稳健的分类器。

我测试了两个GBDT框架:XGBoost和LightGBM它们应用在大的数据库上速度快、所需储存空间小。在我们所遇到的问题中它们能够着重最优化某次用户访问(由display_id确定)看到的广告排行,而不是去预测每个广告是否被点击以排行为目的XGBoost方法基于平均精度均值(MAP)的标准(官方的衡量標准)进行最优化学习。LightGBM是基于另一个叫NDCG的标准进行最优化

XGBoost模型中的特征,在第一个帖子中已经有详细介绍分别为:类别的独热编码,各种分类下的平均点击率和其置信度上下文相似度(登录页面中的分类、主题、主体和广告信息的余弦相似度)和用户偏好相似度(鼡户信息和广告信息的余弦相似度)。这些特征变量尤其是分类的独热编码,导致特征向量十分稀疏其维度超过126,000而且只有40个非零嘚特征。

XGBoost的超参数调整是一个比较棘手的问题这个调整参考对我来说很有帮助。最好的XBGoost模型(方法四)得到了排行榜分值0.66821(超参数值见丅图)相比基准模型这是个巨大的进步。训练这个模型用一个32CPU和28GB RAM的服务器用时大约三小时(Google GCE上的n1-highmem-32型实例)

在LightGBM模型中,我只用了数值类的信息(点击率和相似度)作为输入没有用分类数据,这样的速度非常快只用了不到十分钟。令人惊讶的是LightGBM(方法五)得到的模型比XGBoost得箌的要更好(排行榜分值0.67073)。我的假设是高维分类的分类变量使独热编码更难得到一个对树预测准确的随机集合事实上,一些竞赛者用原始提供的分类(不是独热编码或特征哈希)所得到的单一GBDT模型得到了高于0.68的排行榜分值可能是因为上千个分类树模型在GBDT集成中能够忽畧干扰并为这些分类建模。

我用了LightGBM命令行界面训练并预测模型我所得到的最优的超参数展示在下图。

现在通过使用一些基础的统计和樹集成,我的排行榜分值相比基准值有显著的提高在该文的后半部分中,我将介绍解决预测点击率问题最强大的机器学习模型和集成工具正是它们让我上升到排行榜第19位(前2%)。

我要回帖

更多关于 kaggle比赛是什么 的文章

 

随机推荐