项目一 2015阿里移动推荐算法竞赛
一、比赛背景
以阿里巴巴移动电商平台的真实用户-商品行为数据为基础,同时提供移动时代特有的位置信息。参赛队伍需要通过大数据和算法构建面向建移动电子商务的商品推荐模型,挖掘数据背后丰富的内涵,为移动用户在合适的时间、合适的地点精准推荐合适的内容。
二、第一赛季
(1)比赛数据
官方提供了两个文本文件,第一个是用户在商品全集上的移动端行为数据 tianchi_mobile_recommend_train_user.csv 。每一行代表了用户user_id对属性分类item_category的物品item_id在time这个时间于地点user_geohash发生了交互,交互类型是behavior_type。Behavior_type包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。Tianchi_mobile_recommend_train_user.csv中的数据约有1200万行,第一赛季用户数为1万。
一共有31天的交互数据,最后要预测第32天有哪些user会购买哪些item。比赛结果是采用精确度、召回率作为评估指标。
另一个文件是商品子集(P),文件名为tianchi_mobile_recommend_train_item.csv。这个文件约有44万条数据,是 tianchi_mobile_recommend_train_user.csv 中出现的item的一个子集。官方的第32天的会发生购买的 user, item 中的item都是这个文件中的item,所以我们预测的 user, item 需要根据这个文件来过滤掉一些结果。
(2)规则应用
我们第一次根据用户的心里行为,觉得前一天的购物车商品很有可能第二天就被购买,所以我们直接提交了12月18号一天的购物车(跟商品.子集交),得到的成绩为:(F1 7.56%,准确率 7.14% ,召回率 8.03%)。
这种直接提交购物车的方式不涉及任何算法,我们以后就称为规则了。之后的几天我们开始很兴奋的去寻找各种规则,包括剔除掉在30天里从来不买东西的人。(F1 8.05%,准确率 6.19%,召回率 11.50%)
包括把前一天加入购物车然后当天购买的剔除掉。
F1 8.75%,准确率 7.80%,召回率 9.98%
还有一条云泛天音小哥给我们的指导,就是假设用户在12月18号上午9点加入购物车三件东西,10点买了其中一件,那么剩下两件就可以删掉了,因为如果要买,为何不一起买呢,因为用户做出了选择,F1继续提升
F1 9.27%, 准确率 10.58%, 召回率 8.24%
这时候F1已经破9了,但是由于我们一直是在一天的数据集上进行操作,所以recall是有瓶颈的。但此时对于我们来说还是想继续找规则,相信那个阶段很多队伍都跟我们一样,原因只有一个,那就是规则提升太快了。
(3)模型应用
后来实在找不出啥强有力的规则来了,就准备用一下算法,因为LR快速简单,在python里面有包,我们就直接拿来用了,对稀疏问题采用了L1正则化.LR自己写的话也很快,就一个梯度下降定参。同一队的小哥之前用过那个包,我们就直接拿来用了。拆分数据集我们是这样做的
19号:线上测试
18号:线下测试用
17号:线下训练用(用当天购买或没购买的作用对打标签,然后用16号及之前的提特征)
16号之前的:提特征用
其中的具体数据是多少由于时间久远记不太清楚了,但其中最大的问题就是训练的时候正负样本不均衡的问题,我们是在写代码的时候把他当做一个参数设置的,然后选择最优的,第一赛季负样本我们做了1/20的抽样,正负样本比例我记得是在1:5左右。
这里分析一下正负样本比例的问题:
直接量化 (1)正:负=1:3
(2)正:负=1:5
(3)正:负=1:7
从(1)到(3)负样本逐渐增多,负样本分的更细,算法预测出的正样本会变少,,准确率会上升,召回率会下降,因为评测指标是两者的均衡F1,所以总能调出一个F1最高的值来。
用LR的时候特征我们主要用了以下这些(直接上代码,都是些简单的特征,包括购物车购买转化率啊,商品热度啊等等):
这时候我们是在规则的基础上用了两天的数据。(F1 10.02%,准确率 9.9%,召回率10.15%)
三、第二赛季
第二赛季用户数为500万,商品为千万级别的,30天的交互的条数大约是58亿条,数据量庞大,最后第二赛季第一阶段评测只用结果的一半,第二阶段用全部的结果.区别就是第二阶段precision会翻倍,recall基本不变。
四、感想
(1)记录是很有必要的,在记录的过程中经常会有很多思路;
(2)有想法的时候,尽快实现,要不灵光一闪,经常就给闪没了;
(3)多与其他队伍进行交流,多讨论,才会有比较大的提升,才知道自己的不足;
(4)讨论交流后多思考,思考其中影响的本质是什么,从中寻找突破瓶颈的方法