[关闭]
@frank-shaw 2015-07-01T09:04:53.000000Z 字数 3195 阅读 5036

参与阿里巴巴移动推荐算法比赛感想与总结

日记


比赛时间:3月20日--7月01日。

虽然昨晚是提交结果的最后一晚,但对于我们队而言,比赛已经在前几天就已经结束了。就像是一个癌症晚期的病人,深知没有存活的希望一样,放弃了挣扎,等待死神降临。

我们最终的排名是113。不理想的结果。对于一开始就抱着想要拿到一个好的名次的参赛初衷的自己,不想在这个时候说什么'重在参与','重在提高',这些都不过是失败者的自我安慰罢了。自庭(我的队友)和我的感受是一样的,只有无奈的接受这个结果。

3个月的过程就像是一次创业的过程,一切都是从无到有。所有辛酸欢乐,都在这个过程中品尝。写下来铭记之。

参赛

去年的时候,看到阿里的天池大数据竞赛,想要参加,这个比赛正是一次将自己想要研究的机器学习方向的知识很好实践的过程;当时自己基本上什么都不会,想要过一年再来参加的。不过最终还是被EX说服,和班里的晓滨以及康哥一起参加了。我们三个都没有什么经验,结果并不理想,在初赛的时候就淘汰了。

今年再次看到这个比赛,没有任何的犹豫,就报名了。同时还拉拢了实验室的学霸自庭一起加入。实验室里老师不让参与实习,那么参加这个比赛获取一个好的名次也可以看作是一次与实习相当的经历。抱着不想让找工时候简历一片空白的愿望,我们也成了7000多支参赛队伍中的一员(初赛时候水军很多,实际上最多1000多支队伍)。

初赛

将比赛的问题弄清楚,找到解题思路还是花了我们很长一段时间的。最终,和大多数人一样,我们把这个问题看成是一个二分类问题,先采用最简单的logistics回归模型作为最开始的分类器。这个阶段让我受益最多的是自庭在这个过程中体现出的各种优秀品质:学习python的深入,程序整体框架的构建,可视化操作,逻辑的严谨性等。我们一步步将整个解题框架搭建起来,当终于成绩不再是0的时候,我们高兴坏了,记得当时写道:“今天终于有成绩了,算是对自庭和我的一次肯定。我们的框架搭建起来了,算法的完善是日后的重点,工作量也会轻松一些。”

那时候的我们白天应付着实验室的工作,晚上写程序将心中的想法一一实现。回去的时候差不多12点了,因为晚归,基本上都要在值班室登记。有一个楼管阿姨对我特别好,每一次我晚归,她都会微笑着挥挥手,说:“又做实验啦?没事,直接上去吧~” 示意我不用签名。我心里默默感激,阿姨的善解人意也算是一种对我的默默支持。我想着当比赛完了要好好谢谢阿姨。可惜的是,前几个星期回去的时候就发现,发现那位阿姨已经换岗了(可能调走了也可能做别的工作了)。

记得比较搞笑的一次经历:在某一天晚上线下测试的时候,调参(我主要负责这一方面)过程中突然发现了一个特别高的得分(这个分数如果放在线上可以排在排行榜的第一名位置),那个时候我们高兴的呀,简直飘到天上去了,我和自庭在那吹,30万到手了!!买车,旅游,等等各种YY~~ 那滋味美得,仿佛我们真的得到第一名一样。晚上12点出结果的时候,实际得分就把我们两个飞上天的幻想给死死地按在了地上,成绩低得离谱,和线下成绩相差甚远。那个时候,心中的沮丧与失望真的是双倍的,被很狠打回现实的感觉,记忆犹新。以后一遇到非正常性的高分,我们都会警觉是不是出错了,确认了正确性之后才敢进行下一步操作。

初赛阶段所得到的种种经验,都是在书本知识上体会不到的,我们接触的是真实的数据,思路的是否正确,模型的好与坏等都可以直接从结果中得到最直接的反馈。数据清洗、特征选择、模型融合等手段都在这个过程中慢慢被我们掌握。两个人之间的代码书写过程需要不断沟通,以达到更好的衔接,这个过程让我切身体会到了自己编程写代码的差劲程度。

进入复赛选取的是前500,最终我们是以第146名的身份进入复赛的。不太光明的一点是,为了一天多测试几组数据,我们开通了几个小号,这在一定程度上影响了比赛的公平性(当然,对实际结果的影响很微弱)。在此感谢啊谦、智聪、我妹的友情客串,哈哈~

复赛

复赛是在阿里的御膳房平台上操作的,这个平台可真的是坑了我们很多。不完善的指导资料,不稳定的运行过程,越来越卡的执行速度。如果悲观去看,我们可真的就是御膳房平台性能测试的小白鼠,太折腾。我想前500支队伍当中会有1/10的人会因为无法忍受这个平台而直接放弃吧。但我们接触到的确实是真正意义上的大数据(50亿的数据量),也唯有在它这个平台上才有可能操作。

也正是因为复赛的操作太耗时间了(平台问题,以及编程语言需要重新学(由初赛Python转为sql与mr)),让我一度有了退出比赛的冲动。我真正在意的是关于机器学习相关的知识,但是实际上大部分时间都是在适应这个平台以及搭建新的实验框架上。和自庭说过,当比赛的框架在御膳房那里搭建起来的时候,我就要缩减花在这个比赛上的时间,以增加找工作所需的必备知识的学习与掌握。但是实际上我并没有这样做,或许是我无法同时做好多项任务吧。

也有过这么一段时间,家里面的纠纷、实验室老师工作的催促、比赛这三件事情一齐压过来的时候,精神上的压力真的很大。睡眠时间严重不足。好久不见的师弟感慨我这么憔悴了这么多,呵呵。不过最终还是挺过来了。

终于重新搭建好了整个框架,也基本上将初赛时候的各种思路在现有平台上得到了实现,得到了4.66%的线上F1的成绩,记得当时应该排在50名左右。至少在我看来,依照我们的努力,奔到排名的首页(前20)应该是一个可实现的目标。这个时候我们俩对接下来该往那一步走展开了激烈讨论,最终决定的是:尽力跨过数据集中双12这个坎,从而将训练数据可以尽可能延伸(半个月或者一个月),并且在特征选择上尽可能地增加特征。大体思路确定下来之后,我们开始着手实现。但是没有想到的是,花了将近一个月的时间,实现了以上思路,但是结果仅仅提升到了4.70%。距离比赛结束的日期已经越来越近了,想要推倒一切重来已经不可能了,那时候的平台越来越卡,留给我们的时间所剩无几。只有在这个基础上修修补补,尝试了平台已有的不同算法,也尝试了不同采样正负比以及不同思路的模型融合方法,希望成绩能够有小幅度提升(那时候的我们已经跌到了100名左右)。

我在想,如果当时我们采取了另外一种思路:直接在原有数据集上增加特征,并且注重检验特征的有效性。那么结果应该会有所不同。当然,这都是事后诸葛,并且所谓的不同思路都是在不断尝试过程中才发现的经验之谈。就像所有的决策一样,很难料到当时的决策会带来怎样的影响。也就是从那个时候起,我们渐渐偏离了上升的轨道,慢慢滑落,与此同时,我们的信心也受到了严重的打击。

如果不参加这个比赛,很难会有这样一段经历,我所认为的这就像一次创业的过程(我并没有创业过),重要的就体现在这样一个起起落落的过程。

当然,我们并没有就此放弃。有那么几天,为了加快测试参数的进程,我也试过凌晨3点左右起来跑数据,检验不同参数的有效性。我也可以和那个爱装逼的科比一样,说:“我见过凌晨4点的华工”。哈哈~

我们的分数也有了缓慢的提高,它是这么缓慢,以致于我有一天跟自庭讲:“很苦逼的感觉,这样拼命,结果只提升了0.003%,就有一种你拼死拼活了一个星期,工资就只上涨了一毛钱的感觉。。。”

本来已经决定不弄了,没想到自庭昨晚又给了我一个新处理过的数据集,尝试了一些参数,效果比之前的要好一些。最后一次提交的机会了,时间只剩下几个小时。自我感觉很难弄出一个很好的参数,但还是无法掩饰心中的激动心情,以前的情绪就像死灰复燃一般,开始了新一轮的调参过程。

结果?结果并没有超过最好的那一次成绩。呵呵,很多次的经历之后,学会了平静接受这个结果。

为期3个月的过程,苦逼、充实。感谢学霸队友的无私指导,感谢舍友对我不规律作息时间的理解,感谢初赛时候的那几个“抢手”,嘻嘻~同样的,感谢阿里以及那个坑爹的平台带给我们的一次尝试的机会。接下来就要投身到找工的准备过程中去。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注