【三人行必有我师】同学提分经验分享大全,进步原来如此简单!

风流意气都作罢 提交于 2020-01-01 00:38:50

【三人行必有我师】同学提分经验分享大全,进步原来如此简单!

上周说的搞大事终于来了!

参赛心得体会分享投票活动已上线

很多进步巨大的同学都纷纷献出了自己的提分妙招

小编从留言中精选出了以下10条分享参与投票

干货满满诚意满满

学习完毕记得给分享的同学投票哦~

1

首先感谢腾讯举办这次腾讯社交广告高校算法大赛,让我们能有机会与国内各个高校的机器学习和数据挖掘方向的爱好者进行交流与学习。在这里我就简单描述一下我参与比赛这十几天的经历和收获,与大家交流一下。

5月初的时候通过各方面途径了解到腾讯要举办一个算法大赛,也知道是5月10号比赛开始。但由于5月初的时候在忙老师的小论文,而且由于粗心大意也没注意到比赛的数据早就开放下载,所以直到5月9号才获取到数据。获取数据当天就对数据进行了初步的了解。由于本届比赛的奖品丰厚(前300名提交有纪念衫),所以5月10号就提交了一个全0的结果试试水,同时借此机会验证一下测试集的正负样本比例。但是显然这样的结果是不好的,排名是251,这也为后面我能入围最快进步队员提供了先决条件。

由于之前参加过一个kaggle的比赛,当时xgboost取得了不错的效果,所以分类器我决定暂时选用xgboost。之后的几天里,我主要集中精力在对数据的分析上。下面列举一下我在这几天的数据分析中总结出来的几点:

1.本次竞赛的数据比较复杂,需要注意各个ID之间的关系,在进行表格之间的连接时注意选对标签;

2.数据的统计特征很重要,可以尝试对一些数据进行groupby处理;

3.由于数据的获取是有时序的,所以如何利用时序信息也很关键;

4.数据间的组合(比较难,希望我在未来几天内能有所突破);

5.要注意线下和线上成绩的稳定性。

在经过几天的数据分析、特征抽取后,很庆幸能得到一个还不错的成绩,也因此能有机会借助最快进步奖这个平台与大家交流。我的总结仅是我近几天的一些收获和心得,希望能对大家有一点帮助,也希望志同道合的同学能在以后的比赛里多多交流,共同进步。

祝愿大家在这次比赛里能有更多的收获。

再次感谢腾讯举办了这样一届比赛给予我们一个交流、学习的平台。

——圣骑士

2

1、特征的选择

关于特征选择,其中有两个方面是应该值得关注的。

一方面是特征的重要性,特征的重要性反映的是特征对模型效果的影响程度,理论上重要性越高的特征应该保留下来,而重要性较低的会考虑删除。特征越多,会使得模型越复杂,减少不必要的特征会使得模型更加稳定。其中常用的方法可以考虑xgboost中计算的特征重要性,或者是通过扰乱某个特征值的次序根据模型效果变化来得出。特征重要性计算的方法不少,大家可以再网上查找一下。

另一方面是特征分布是否一致,特征分布主要考虑的是线上和线下的分布差异。由于这次比赛的数据具有时序性,并且很多选手也因为在提取特征时因为信息泄露的原因导致线下成绩提升而线上成绩降低,这些问题都可以通过特征值的分布差异来排除掉,当分布不一致的特征,我们应该优先删除。特征分布差异,简单的可以通过线下和线上特征值的均值、标准差差异来考虑,或者基于其它的统计学的方法。

通过特征的重要性和分布综合考虑,应该就可以得到比较理想的特征效果了。

2、特征生成

关于特征生成,大体上可以分为两个大方向。

一个方向就是俗称的“拍脑袋”,根据个人对于数据观测、题目理解等考虑,得出的一系列规则转化为特征。这样很容易就会产生一系列有用或者无用的特征(比如one-hot、各种的转化率、点击量等特征),其中很多的特征所代表的意义其实是重复的,比如对各种ID做转化率的特征,当特征数量越来越多后,提取这类的特征会显得毫无意义。所以应该多角度的来提取特征,使得特征之间形成互补。

一方面是通过其它模型的结果来生成各种特征,其中能否通过深度学习来产生新的特征?LDA来分析用户和app之间的关系?特征之间不断的组合能否产生比较好的特征?这需要通过对数据的理解,不断的尝试和分析。不过我的并不建议那么快的考虑用其它的模型来生成特征,毕竟这种方法生成的特征有时候并不能很好的理解,并且需要的工作量也比较大,有时候生成的特征也并不一定有效果。

3、模型的理解

群里面很多的同学知道该用哪个模型,但是并没有理解模型的原理,所以把很多的时间浪费在模型的选取和调参上。事实上,我们应该先对模型有个比较基础的了解,明白模型以及各个参数的原理,这样才能指引我们如果去生成模型适合使用的特征以及怎样去调参。比如,我选取的模型是xgboost,基本上我是没怎么使用one-hot的特征。

对于刚开始比赛来讲,模型应该是简单点比较好,这样主要为了方便特征的生成和选择。当特征方面的工作做到一定的程度上,则可以考虑更复杂的模型来提高效果了。至于模型融合等方面的资料,可以参考网上历来各种比赛分享的资料了。

4、建议

参加比赛的时候,很多时候选手会因为效果不好等各种原因难免产生比较浮躁和消极的情绪。但我觉得,参加比赛来讲,最重要的是在比赛中有所收获并且提升自己,最直接的方法就是多想多做,而不是光想不做。毕竟比赛的竞争是比较激烈的,获奖的名额比例也不高。或许最后什么名次也没拿到,但是通过不断的提升自己或许以后工作可以升职加薪呢,而这样算下来的钱应该比一个比赛的奖金要多吧。

——永不理解

3

我第一次看见题目的时候,没看懂题目在说什么。后来认真看了三遍,才有了我好像看懂的感觉。后来看了视频直播后,我发现那个感觉是错觉。这个题目几乎所有的数据都是离散的,年龄,广告位置,用户婚姻状况等等。名义属性在挖掘过程中有各种处理技巧,比如独热编码。训练集train.csv是一个重要的文件,我看了一下label的情况,样本不平衡比例1:40。样本不平衡是个大问题,上次被狠狠地坑过。机智的我终于想出了一个天才般的想法:常见的模型既然有样本比例要求,我把负样本分割为20份,正样本看做1份。分割的每份负样本和正样本拼接在一起,然后分别训练模型,最后取平均。常见的merge操作也做了,除了app的两个数据集,我把其他全部的属性拼接为一张表。我用ggplot2绘图统计了正负样本在各个变量的取值上分布情况,我发现以性别为代表的一堆特征就是凑数卖萌的。我开始的时候只用了其中一份的数据,随机森林筛选特征,把无用的特征都删除了。尽管有特征筛选,我跑出来的第一个结果不忍睹。这个模型有几个问题:第一,名义变量需要编码,one-hot是不可行的,超稀疏的矩阵也是个问题。Kaggle上的动辄2^20的one-hot 离我太远,后来查到有hash feature,leave-one-out等多种编码方案,后来我也尝试了一遍,一个好的编码方案很重要。第二,facebook的那篇文章,使用xgboost提取特征,LR建模得到一个很厉害的模型。“实践是检验真理的唯一标准”,看了一下群里的评论,效果呵呵。第三,就是那个天才的想法,就是个大坑啊。当数据量大的时候,训练的模型才会更加逼近实际情况,当数据量太小的时候,模型学到的东西离现实越远。最后我还是用了全量数据,训练出来的结果比之前好很多。

——君溪竹

4

对于很多像我这样的新手朋友们,大多在入门时感到很疑惑,比赛是一个怎样的过程?

我在这里分享一下我自己的入门方法:

(1)Kaggle比赛——Titanic: Machine Learning from Disaster

(比赛地址:https://www.kaggle.com/c/titanic)

(demo:https://www.kaggle.com/omarelgabry/a-journey-through-titanic)

从头到尾做一遍,你会发现受益颇多!(数据分析,数据清洗,特征提取,模型构建,预测)

里面用到了最常用的pandas,以及matplotlib。

特别是pandas,当你遇到一行代码时,可以敲入ipython,直观感受一下它的变化(非常省时省力),再结合api文档你就掌握了!一个流程下来,就会知道特征工程中是如何进行特征提取、特征拼接。

(2)入门后当然就是参加比赛了,这时候要多与人交流、交流、交流,也会有很大收获!

(3)可以看看过去天池的比赛,github上开源的代码以及冠军或者得奖者们的分享,多思考,看看能否进行知识迁移。

(4)不断学习,不断尝试。

——Gnieur

5

我作为数据挖掘小白,5月1日那天在官方网站上看了题目,认真读了一个上午,也仔细看过每个特征的解释,当初半懂半不懂,除了第一眼看出属于二分类问题和label =1的样本比较少之外没有任何思路了,后来上网查了一些资料才知道首先要分析数据,先要用肉眼看,以及画图,找出特征。又过了一两天才弄明白原来很多时间要花在特征工程上,然后才是根据特征的主要性依次给特征编码,而且每个特征因属性不同,所以编码方式不同,比如ID类特征,要用到one-hot编码,这一点之前没有接触过,之前做的题目的数据集都很小,没有像这个题目把特征散落在几个文件中,数据量也比较庞大。还有针对广告点击率常用的FM和FFM算法,自己之前也没有了解过,Xgboost这一强大的工具也是在这次比赛中学的,虽然觉得自己十几天没做出什么好的成绩,但是对我来说已经有了很大的进步,很感谢腾讯为高校学生提供的这一交流和学习的平台。

——行者

6

特征工程不容易,往往自己兴奋得增加特征,但训练后效果很差,或者线下效果很好,线上反映不出来。慢慢来希望能有好成绩。

——王浩

7

我觉得一点值得分享的是那天讲座老师提到的,提取特征时注意时间序列,不要有leak,还有就是最后一天label不准,我是直接从train里拿掉了,应该有更好的处理方式,还有线下valiadate能和线上同步升降就行。

——黑山羊

8

数据刚放出来时我没有去分析数据,自己写了个暴力遍历,让每个prob都一样,得到0.25,顺带发了个规则baseline到群里,大家一起抢衣服,挺欢乐的。

之后的两天就没敲了,反正衣服到手了,而且第一暂时无望,就安心研究官方发的大干货了(Kaggle数据挖掘比赛经验分享),在看到模型选择的时候,受到启发,抛弃了平时习惯的xgb,把简单处理的数据扔到简单的模型里面,线下也没做就扔上去了,预料之中,效果还行。

我拿的第一枚奖牌就是talking data,当时用了一个很独特的处理数据的技巧,印象挺深的,刚好最近在学nlp,就把这个技巧用上了,最终特征维度接近300万,分数瞬间暴涨。

大致就这些了,学生狗临近期末都不容易啊。要是投票多我就放特征!

——李孟禹

9

单个用户的数据好稀疏,而且需要预测的点击情况下安装的概率,和传统的推荐问题不太一样。需要好好做数据清洗和特征挖掘。

——姚易辰

10

我是第一次参加这种大型的算法比赛,其实最终比的还是经验和算法,据我所知,这种比赛,xgboost模型可以说是大家的首选大杀器,所以我前一段时间就是在调参数,等到没长进了就开始做特征挖掘,还有数据清洗,现在难的是特征挖掘啊,作为一个新手,刚开始用传统的GDBT做特征但是效果一般,onehot编码我也试过,这样可以创造出很多新特征,但是当这些新特征对于xgboost模型并不敏感,成绩提高微乎其微,可能是我对xgboost模型不够了解吧,所以onehot编码我立马就抛弃了,然后常识特征融合的方法来创建新特征,用xgboost自带的feature importance来验证每个特征的重要性,从而对于没用的特征进行剔除,这种方法挺好用的,成绩有稳步提高了,现在还在用这种方法,但是等到这种方法之后还会产生什么新方法呢,我也不知道,腾讯的专家说的特征工程是一门艺术,是大量经验积累的沉淀的结晶,非常感谢腾讯的这个比赛,让我拥有了一个可以积累经验提升自我的平台。

——东丽传奇

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!