King_K

导航

失败感言之——阿里移动推荐大赛

  阿里移动推荐大赛第一轮也算是结束了,很遗憾排名631,虽然去掉前面的小号和不符合参赛要求的队伍(不是学生或者科研人员),也勉强进入了第二轮但是数据摆在那里,差距还是相当大的。作为一名合格的失败者,必须要总结下自己失败的原因。很荣幸,今年排名第一第二的两个队伍都在我们学校,通过跟他们交流,让我有机会更好的发现自己的问题。下面直接上干货,大部分是自己实际操作,有些是自己后来想到的,极少部分是别人采用的方法,如果还有类似比赛可以参考一下大概思路。
  排除其他因素,包括时间和队友沟通上的一些问题。仅仅从自身上来说,就暴露除了不少问题。在此次比赛中,分工上我应该是做工作最多的,队友A用规则提供了一个baseline之后,基本上特征的构造,验证;分类器的选择和使用,都是我完成的,令一个队友B主要是验证了一些想法,比如商品关联性,后期还统计了一部分特征的数据。下面说说我们的流程:首先,关于数据处理这一块,其实有一些数据是要做处理的(比如过高的浏览量),在开始的几天时间里,我们用一些规则的做了测试,主要是判断这些规则能否转化为特征。主要是统计一些数据,然后踢掉值太低的。比如:对用户而言,用户的购买数量,非购买操作数,购买天数,活跃天数(有操作)等;对商品而言,商品的销量,在所属类下销量排名,被浏览数等;用户和商品的交互上,主要是用户对这个商品的一些操作,以及对该类商品的操作数等。统计完这些之后,以购物车规则为基准,然后逐渐踢掉一些购买数量很少的、购买和操作比例太低的诸如此类的规则,之后将这些规则一一转化为特征。以这些特征构造了一个很简单的特征,然后将模型的大体框架构造起来。到这里,这些基础准备都是没问题的,经过验证的规则,都被用于后期的特征空间构造。这些差不多就用了大概一个礼拜的时间,期间还在处理一篇论文,每天在这上面的时间也是有限的,完成这些之后,以预测日12月19日之前的1,3,7,10,20,29天内,各个操作的数量,加上用户购买数量,非购买行为数,两者比值,购买天数,活跃天数,以及它们两者的比值,构成特征空间。这里,就有一个小问题,一些用户的非购买行为实在是很大,如果不做处理,就会对最后结果又较大的影响。所以这里需要一些小处理。要么进行归一化;要么设置一个阈值,超过该值的数修改为阈值;再不然可以根据数据的范围:比如0-50次为1,50-100为2;甚至你可以不管浏览量。总之这里的目的就是让浏览量不至于直接决定最后的结果。我在这里采用的是设阈值,后来想想,这应该是三种方案里面最差的了。由于用户19号是否购买商品,除了那些当天决定买的,影响最大的应该是前两天的行为。这里又是我的第二个问题,我采用的1,3,7,10,20,29,时间段的操作,其实后四个时间段基本是没操作的,除非是周期性购买的商品(因为阿里提供的这批数据是服务类的,比如定期洗车,每周五看电影之类的属于周期性购买),后来我采用的是双十二之后的数据。即1,2,3,5,7。这也算是我的第二个问题。由于看过去年的一些分享帖,先入为主的以天为最小单位,没有注意到这次是以一个月预测一天,而去年是以三个月预测一个月。所以这里更精确的做法应该是以“2014-12-19 00”之前1h,2h,3h,5h....的数据更为恰当一点,而其他数据则主要用于其他特征,比如购买量,因为一个人如果习惯与这种购买方式的话,那他就会经常使用淘宝买,那么19号购买的可能性就会大一点,说夸张点,如果一个人每天都买东西,那我们基本可以确定这个人19号肯定也会买了。这里精度的问题,是我犯下的一个较为致命的错误。最后一个问题在于模型融合上,没有充分利用不好的结果是一个重大失误。其实听了他们做法,跟我们前期都是一样的,直接用SKlearn的LR,都没有调参;然后用了SVM也产生了一个结果;将两者简单结合,即结果等于:从LR中踢掉被SVM判为不购买的,或者从SVM中踢掉被LR判为不购买的;也可以直接取交集(保证最后结果在400-600个之间,再多的话得分很难上去)如果提交的一份结果得分很低的话,可以将这些样本作为负样本,将这些数据全部踢掉。
  最后,我想从一些数据角度出发,分析下我们的问题。我大概用了3800多个测试样本,这些测试样本的召回率是24.3%(线上测试过),LR的结果是600多个,召回率只有8%左右,SVM的结果有1600多个(实在是太多了,汗!我都不知道怎么再剔),召回率大概有10%不到。分类器和测试集本身是没有问题的,那么唯一可能的问题就出在训练集上:1.正负样本的问题:我的正负样本比例大概是1:3左右,加起来6000多条。问了下第一名的队伍,他们的正负样本比例是将近1:1,其中有将正样本复制,我尝试过,但是想想最后的结果肯定是偏向负样本多,所以没采用复制正样本的做法。2.特征统计出错,特征的时间段数据是我负责统计的,其他购买数量之类的是队友B统计的,很大可能是其中有错误。后期得分一直上不去,想找另一队友验证下,对方已经没有信心了,或者说大家都没啥信心了,已经没了刚开始前几天的激情了,加上这段时间刚好是大家找实习,面试笔试的时间,队友B还有项目,导致中间有将近一个礼拜没有提交数据,一直在断断续续的统计特征。算是终于体会到了团队合作的重要性。
  不管怎么说吧,虽然是失败了,也算是学到一点东西了,分享下经验希望能对别人有所启示。

posted on 2015-04-27 16:54  King_K  阅读(404)  评论(0编辑  收藏  举报