KDDCup 2011回忆录

辛卯年乙未月己巳日,大局已定。仿三国演义,记下赛事五回。

第一回 山中有寨柠檬香,邪道异术出山狂
第二回 绝世秘籍未相传,独门小式败探花
第三回 光阴有痕巧破译,大象无形气莫测
第四回 山穷水尽疑无路,九易参数又一村
第五回 强强联合遇强敌,人品爆发显王道

  作为程序员,先说说“第〇回”的故事。比赛前半年,dora神发现了有个叫KDD Cup的比赛,做数据挖掘的,而且有奖金。在研一迷茫的生活中,发现一个既是我当时最有兴趣的数据挖掘方向的,又是有奖金的比赛,肯定是高兴的不得了,果断写入TODO-list。

第一回 山中有寨柠檬香,邪道异术出山狂

  转眼间就到了“第一回”的时间,比赛开始了。KDDCup 2011的题目是音乐推荐,Track1是做用户对音乐打分的预测,Track2是预测某首歌用户会不会去听,而且喜欢听。我们几个对数据挖掘和推荐系统都完全没经验的人凑在一起组了个队,也就是所谓的“山寨出山”。起名字想找个通俗好记的,Apple有公司了;Orange也有个公司了,而且还是之前某年KDD Cup的赞助商。还有什么容易拼写的水果呢?回头看到师兄桌子上放了一瓶柠檬香型洗洁精,就是它了,定名为“Lemon”。
  Track1的数据太大,为了方便计算,我尝试性的算了下Track2。一开始什么都不会,就想想,到底我听歌的时候有什么规律呢……果然想到一个主意,应该有很多人只喜欢某几个特定歌手的歌。于是用这个假设写了个简单的筛选程序,提交了一把,立下了比赛中的史上最好成绩。在这个方法的基础上调调参数,居然还稳居排行榜第一名长达一周时间。

第二回 绝世秘籍未相传,独门小式败探花

  只用这种土办法,肯定是没什么前途了。过了几天我又YY出了另一个土办法,叫“共现率”。接着又想了种土办法居然把这两个模型合在一起了……回想起来当时真的很山寨。但是就是用这么山寨的方法,我们还是一直在排行榜上保持比较前面的位置,这基本上全靠调参数调出来的。就在我们还在调参数的时候,xlvector师兄突然杀进排行榜,登到了榜首。在xlvector师兄的博客中,我们知道了LFM(俗称SVD)模型是当前效果最好的模型,也学到了这个模型如何用于这次比赛。当然在他博客里没有介绍效果最好算法的一些细节,接下来的很长时间我们一直在琢磨师兄提到的“最好的”算法。在师兄的博客中,我发现原来我YY的“共现率”就是一个退化了的Item-based CF算法。当即放弃“共现率”的叫法,开始学习现有的Item-based CF算法。经过长时间的努力(主要是调参数),我们终于又回到第三名。

第三回 光阴有痕巧破译,大象无形气莫测

  五月初,我们发现了一个“惊天大秘密”:公布的训练数据虽然已经去除了时间信息,但是仍然是按时间排序的。经过一些简单的实验之后,发现这个特征的效果几乎要优于之前发现的所有特征的效果。利用这个特征,我们又回到了第一名的宝座上。
  dora神的强大的数学能力发挥了重要的作用。LFM里面复杂的数学让我望而生畏,dora神只花了一天多的时间,就算出了一个效果不错的结果。更好的是,LFM算出的结果与我们已有的方法算出的结果差异非常大。融合进一个统一的结果之后,效果有了巨大的提升,而且领先第二名一大截。不过,为了不让竞争对手产生更多的心理压力,进而疯狂改进,我们开始倒着提交结果……

第四回 山穷水尽疑无路,九易参数又一村

  苦逼调参数的一个月,不忍回忆……

第五回 强强联合遇强敌,人品爆发显王道

  比赛进入白热化。排行榜上出现了好多新人,也不知道从哪冒出来的,一个个都非常的厉害。以此下去不仅没了奖金,连有个体面的排名也很悬了。在结束前半个月,我们和xlvector师兄合作了。结果的提升是一方面,思想的结合还能碰撞出新的方法。师兄在比赛中的经验也很有用,最后提出的后处理阶段,让结果有了进一步的提升。虽然只是微弱的提升,从最终比赛结果看,这点提升刚好能让我们从第三名跳到了第二名。
  对于比赛来说,最后两周发生了很多大事。主办方要求删除所有小号,于是,排行榜清静了,我们又往前了几名。最戏剧性的是,在Track1中一直领先的commendo队突然开始做Track2,而且每天都有巨大的提升,没几天就超过了我们,实在佩服。
  最后那几天的排行榜变动异常激烈,我们从之前希望比赛延长一个月,好让我们多实现一些算法,到现在变成了恨不得马上就结束比赛,好让我们从中解脱。但是在这样巨大的心理压力下,我们还是坚守岗位,苦调参数。这种时候,新的方法对结果已经很难有提升了,我们把希望寄托在“人品”上,做一些看似毫无理论依据可言的实验,还真凑到几个人品大爆发点,莫名其妙地提升了一些精度。

总结

  第一次做时间跨度这么大的比赛,从三月中旬到六月底,长达三个半月的时间里,多数时间都花在了这个比赛上。
  收获也不小。不仅仅是一些推荐算法,更对研究有了一点感觉。
  发现规律 => 统计验证 => 抽象模型 => 改进算法
  这4个步骤经常会迭代着发生,先是简单的模型,一点点地加特征,模型变得异常复杂。到某个时候,突然发现其实可以抽象到更高的层次中,于是化简,化简,变成了一个形式上很简单的模型。循环往复。
  赛后和国立台湾大学有过交流,他们的参赛形式很有意思,专门开一门课,20多个上课的学生都试着做比赛,每个人看不同的论文,每周定期交流。到比赛最后阶段的时候,把所有人的计算结果融合起来,最后就夺冠了。这种模式下,他们已经连续两年获得了KDD Cup的世界冠军,在KDD Cup 2011中更是同时拿下了Track1和Track2的冠军。我们这种山寨队伍是不能采用这种模式了,但是相比起他们,我看的论文实在是少了点。很多东西都是“重新发明”了一遍,而且肯定没有前人提出过的这么成熟。在之后的研究学习中这点一定要吸取教训。

友情链接

KDD CUP 2011 回顾 by xlvector
The Art of Lemon队的KDD CUP 2011 Track 2解决方案大致思路 by dora

12 评论

  1. “20多个上课的学生都试着做比赛,每个人看不同的论文,每周定期交流。到比赛最后阶段的时候,把所有人的计算结果融合起来,最后就夺冠了。” 这也行……不限人数么?

    1. 学长,能不能跟您交流一下KDD的竞赛经验。学弟也是研一,做机器学习的freshmam,希望能从学长这里取得一些真经。我的邮件是:syenyang@outlook.com

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注