四个月的马拉松,到达终点就是胜利

——记  2014 阿里巴巴大数据竞赛

  最初,从一个机器学习交流群里了解到,今年阿里巴巴举办了 首届大数据竞赛 。那会儿正好要准备结束 kaggle 上的 PAKDD比赛 (ID:lemon),就报名参加了。

大赛介绍

  题目是给出用户四个月在天猫的行为(点击,购买,收藏,购物车)记录,根据这些记录预测用户下一个月会购买哪些品牌的商品。详细说明可到官网上去了解。

流程

比赛流程

先晒晒成绩

第一季结束,我们晋级第二季的成绩是:

  • 正确率:7.46% , 召回率:6.46% , F1:6.93%

2014.7.30 第二季结束,成绩如下:

  • 正确率:5.94% , 召回率:5.64% , F1:5.79%

定格在排行榜第77名

爱恨交加理还乱的S1

  第一季是海选,那时候参赛选手可以把数据下载到本地,提交答案的方式是上传结果。我是用MATLAB做的,session1比赛下来,让我熟悉了MATLAB 编程以及许多API函数的使用。
  在session1中,我曾尝试过把问题看成一个评分问题,也用过LR,协同,由于举办方在session1给出的数据量太少(只有八百多个用户),各种算法难以发挥作用,有种无米之炊的感觉。接着,session1从每周评测一次改到每天评测一次,直接导致了凶残的大面积过拟合现象(虽然无米,也要你多做几顿饭)。现在回想起来,仍心有余悸。
  session1临近结束的时候,许多选手们都开始组队合并,抱团取暖。我跟在台湾读书的俩研究生(beader,福姐)组队了,从此感觉好像抱上了大腿。大腿们带着迈入了Session2的幸福大门。我们的队名是 DataCrush ,霸气侧漏。从此,一段别致的旅程开始了。

磨人铸剑

  本人在广州大学城上学。人活在广州不容易。S2 正好横跨了 五六月份,在这段时节里,广州的天气是混沌的,有点像三体世界。这只有生活在广州的人才能懂的。在这段时间里,生活的主要内容是宅在宿舍,赤着胳膊敲代码,汗流浃背做学霸。上帝似乎总喜欢给凡人各种意外,等我熟悉了ODPS(比赛使用的平台),我笔记本的显卡因扛不住长时间的高温,烧坏了。成绩还没有任何提升,剑也没铸成,电脑却坏了,那会儿真的有种跪的感觉。怎么办?修呗。果断流血¥400,换回笔记本的生命,在队友的鼓励下继续打榜,追求F1值。

千呼万唤始出来,柳暗花明大逆转

  电脑复活后,态度上我从来没有这么珍惜过我的电脑。我开始正式构思比赛战略、阵型,包括进一步理解业务,执行步骤化,代码模块化,制定优化方案等。我把构建特征体系作为第一个战略目标,于是花了一大把时间在提取特征上面,主要是跑MapReduce程序,并结合SQL。特征体系构建完毕后,我把它丢进了 LR 模型,在本地测试F1有4.3+(4.3%),于是心情倍爽地运用到线上去并提交了答案。第二天,我怀着小激动去问队长查成绩,结果是,线上得分只有2.2+。我再一次领悟到了“理想很丰满,现实很骨感”这句话。事实上我不觉得有太大的打击,在IT行业里,刚出炉的东西都是有bug的,这正常。我很淡定的去找bug,并又做了几次本地测试,本地得分依旧4.3+%。提交,线上得分依旧只有2.2+。
继续找bug…
本地测试 ==> 提交 ==> 线上得分2字头
继续找bug…
本地测试 ==> 提交 ==> 线上得分2字头
继续找bug… 一天,三天, 五天 ,七天…

  连续十几天 , 线上测试依旧是2字头!!最优成绩记录仍然是一个月以前队友福姐打下的4.36(我们队的合作方式有点接力的成分,并且底下交流想法,游击作战。)。
  为什么线下成绩和线上成绩差那么远? 连续十几天如此,让我不得不开始怀疑是不是自己水平的问题,情绪开始沮丧,甚至浮出放弃比赛的念头。可又想到如果真的放弃,首先无法向队友交代,再者前面的努力就全白费了。于是,硬着头皮再一次走上前线。在这最困难的日子里,驱动我继续走下去的是队友的鼓励和期待,没有其他。
  后来,仔细观察了一张张表(在ODPS中,数据以表的形式存储),在特征体系中有很多特征向量为 0 数据!这就像你用掺着许多沙的米煲一锅米饭,能好吃么?所以,这些数据显然起到了一个噪声的作用。饿狼遇见羔羊,久旱逢甘露,我迅速地在相应的MapReduce 程序里找到了这个bug 并做了更正。这一次,我把修正后的特征体系丢进RF(随机森林模型),300棵树 ==> 训练 ==> 预测 ==> 提交 。

  这一夜久久不能入眠。

  第二天,线上得分 4.7 ,乐坏了…


希望之火从此熊熊燃起 。
两天之后,破五

补充理论知识,蓄势而发

从舍友口中得知,图书馆有免费wifi开放了。我果断把根据地转移到图书馆。
破5 之后, 很快,理论知识的缺乏成为瓶颈。于是,我开始充电。
  在这一段日子里,我每天午觉醒来后,大概14:20就到达图书馆,开电脑干活,学习ID3,C4.5,CART,
GBRT,写MR程序或脚本探索新特征,晚上八点才离开图书馆去找吃的。
其实,这时候已经快临近专业课程的期末考试。为了这个比赛,我把备战期末考的时间减少了一天又一天。因为,只要有点想法都会去实现,去试错,实在不忍浪费每天一次的提交机会。
  后来考完试了,由于班上的为期5天的大学毕业旅游要开始了,比赛进度不得不暂停下来。即使无法登陆ODPS比赛平台进行劳作,身处景区的时候也常常分神,总想着还有什么特征可以提取的。直到7月19日,我回了家,开足马力,开始编写MapRedcue程序,研发十几个新特征,再投一弹。

激烈、不舍、定格的一周

  在7月24日,举办方更换了数据并清空了所有参赛队伍先现有的数据。这意味着所有参赛队伍要拿着自己的代码在新的数据上从头到尾重跑一遍。 在比赛的最后七天里,睡得少,排行榜每天都有大幅度变化,在这样激烈的竞争中,想到长达四个月的比赛就要结束了,心中犹然产生一种不舍之情,这种不舍不仅对比赛本身,还有对于队友和对手们。没有队友的支持,坚持不下来;没有优秀对手的刺激,难以做到当前的成绩。

四个月的马拉松,到达终点就是胜利

  我没想过自己能这么有耐心做日志

  比赛结束了,我依旧习惯地登陆旺旺,打开日志,连接虚拟机。
  比赛结束了,一下子觉得日子有点无聊。
  我们队伍没有进入top50,相比于长期驻扎在top50的队伍,我们的成绩也并不显得闪亮。但我们跟自己比,在这个过程里,我们一次又一次的超越了自己的极限,每到达一个新高度都令人感到充实、兴奋无比。这不只是技术技能方面的进步,还有心智上的历练,不是学到更多新道理,而是实践早已熟悉的道理。
  感谢这次大数据竞赛让我们真正体验到了大数据。虽然走了不少弯路,也试了不少错,但积累了宝贵的大数据处理经验。

  虽然没有进入top50,但我们到达了终点,这也是一种胜利。

  我的队伍是 DataCrush,两个队友是 Beader ,福姐。要说我在这四个月里说收获最大是什么,除了自身的成长,就是这两个队友了。

  感谢身边的一些朋友的谅解,虽然放了暑假,但因为要冲刺比赛,久别重逢却还不能及时相聚。
  感谢澜天哥,土豪果,give姐,你们的鼓励和指点给了我很多帮助,还有那充满喜感的旺旺交流群。

   感谢!