四个月的比赛总算是落下帷幕了,作为单线程的动物,没有办法边写总结报告(其实就是拖延症)。比赛结束,总算可以静下心来想一些东西。
我是从年级的群里知道阿里的这个比赛的,一直都推荐挺感兴趣的,那段时间又刚好看了一些推荐方面的书籍,就拿准备拿这个机会练练手,在第一赛季的时候比赛特别疯狂,第一次提交成绩是在3月26号,F1成绩是0.17%,当天排名在1428名,印象中是用的协同过滤算法,根据用户购买过的物品来做协同过滤,所有的点击,收藏和加购物车的信息全部都没有用,没过几天,阿里来到我们学校做宣传,突然间发现各种经典的推荐算法在这个比赛中都不怎么适用,就开始使用规则,比如说对于在日期半个月以前的用户点击这个物品多少次以上推荐购买,用户购买过多少次以上的推荐购买,用户在最近几天内点击多少次的推荐购买。用简单的规则来猜测用户的购买行为,F1成绩大概在6.5%左右,鉴于比赛太过凶残,基本上每天不提交就能掉个几十名。后期也尝试过贝叶斯,lr来做,那个时候对于特征的理解并不深,感觉成绩并不是很好。那段时间基本上都是每天早上两点多自然醒的看成绩,最后第一赛季以7.07%的成绩进入第二赛季。
第一赛季在简单规则上迟到了甜头之后,第二赛季一开始也是用sql大概写了下第一赛季规则的思路,成绩涨到4.6%左右(用了大概十天),开始和善善用lr来做,第一赛季我们俩都没有用过lr,所以,一直在尝试,比如说我们用最简单的点击来当做特征,做预测,熟悉了下lr的流程。然后,还尝试过用一个星期内有交互的ub对的点击值做归一化处理后做训练,四个月所有交互的ub对的所有点击值做归一化做预测,得到效果竟然不错,现在看来那个时候也真的是各种脑洞大开。我们也尝试了抽取LR特征,和其他队伍交流,才发现我们的差距,他们已经尝试了所有的算法,我们还在LR上面打转,连提取特征的方法都是暴力的提取,才有了时间片的概念,开始使用mr提取特征,估计刚刚开始用mr来写,特征经常写错,陷入了大概有十几天都没有进步的情况,每天晚上和善善在实验室写代码写到楼下的人来催,然后一路上很开心的设想:哎呀,明天马上就要上5了,怎么办,要进首页了,好紧张好激动。但是每天早上起床,总是一脸郁闷,没有一次是能够实现的。到了二十三号的晚上做融合的时候,写了三个版本,写完之后一直在算概率,感觉进步的希望不大,就推倒所有的思路,把我们现有的可以提交的版本分成长期预测以及短期预测,长期预测一般都是用户比较稳定会购买的品牌,短期预测是用户最近的需求,然后对所有分到长期预测的结果取交集,对所有短期预测的数据也一样取交集,在把两个合并。当天的成绩是达到了5.31%。当天排名是25,第一次进入到了第二版面。
第二赛季的第一个月结束后,又开始进入了一段蛰伏期,长期不进步,主要是有了几个坑,首先,我们都是通过两个月的数据预测第三月的,比如说比赛有四个月的数据,我们用了第一二月做特征,第三个月做y值,来做训练,然后第二三月做特征,进行线下预测,与用第四个月的购买情况来做评估。第三四月份直接用线下训练的模型做预测。后面改成,重新训练二三月份的数据,成绩大概提升了0.2%,其二,把两个月的数据换成三个月的数据,成绩也是相应的有提升。后来,根据这段时间的各种特征的尝试,写了第一个版本比较完整的特征,对于品牌特征主要从四个方面进行思考(品牌属性,品牌热度,最近行为,一些比值),用户特征也是主要从四个方面进行思考(购买能力,用户属性,最近行为,一些比值),对于ub交互信息主要是划分时间片,提取的都是简单的特征。算法也从rf逐步转移到gbrt,后面几天稳步提升,到了第二个月的24号,F1成绩是5.82%。
第二赛季的最后一个月再次大换血的重新整理一份特征,这次特征的思考方式主要是想到衡量标准,所有的衡量标准只能想到个数,天数,品牌数,用户数,次数(不同品牌不同天),行为有点击,购买,收藏,加购物车,操作,按照这些量,加上时间片,组合了一份我觉得基本特征都包含在内的大杂烩特征。大杂烩特征第一次测是用的rf,成绩是5.69%,一度心碎,估计一下子加的特征太多了。本来想要抛弃的,第二天因为也没有其他东西可以交,就跑了一份gbrt交了,得到的成绩是5.88%,后面发现里面有部分特征是写错的,估计gbrt对特征的容错性比较强。然后在此基础上有加入了一些极值,单份成绩没有变,但是两份的融合结果涨到了5.92%,再然后,就是经常改改特征,基本上都是单份没有提高,融合慢慢提高,在20名左右徘徊,换数据前的最终F1值是5.98%
换数据之后,跑之前的最后成绩单份变成了5.99%,融合却不怎么能够提高,再加上最后一个星期的某次提交我还给失误了。最后的成绩在6.02%,幸好还在前三十。
这算是这次比赛四个月的一个流水账吧,有同学说走到现在,基本上很傻的方法都能做到这个成绩,我觉得这可能是因为做到了所以才这么说,如果说这仅仅是最傻的方法,我们也用了四个月才走到现在。在这个过程当中,对于很多算法,特征的抽取,正负样本的处理,采样方式,各种调参,特征的处理,y值处理,融合的方式都有了一个不一样的理解。这四个月,熬夜跑程序,早上四点起床看成绩,其中还经历连续感冒,胃镜,拔牙,各种身体上的折磨,最后竟然身残志坚的坚持下来了,真是佩服我自己!
第一赛季感谢主公,第二赛季感谢亲爱的好队友善善!
其他的一些总结与教训:
1、记录还是很有必要的,在记录的过程中经常会有很多的思路,这一点善善做的很好,向你学习。
2、有想法的时候,尽快实现,要不灵光一闪,经常就给闪没了。
3、多于其他队伍进行交流,从几次比较重要的提升都是因为和其他队的交流,才知道我们的缺陷。
4、在与其他队伍交流后能够多思考,思考其中影响的本质是什么,从中可以触类旁通,应用到其他方面。