My Summary to Buyer Prediction in Alibaba Contest

一直想留下一些阿里推荐算法比赛的感悟,但是一直给自己找推托的理由T_T,并不是没有总结而是一直未在博客上更新,今天放出来分享一下。

# 本人参加了阿里巴巴两次推荐算法比赛,主题分别是天猫品牌推荐、移动端商品推荐。

1. 天猫品牌推荐 - 比赛网址

个人实践流程:

1)分析问题
给定四个月的用户行为数据,预测用户未来一个月的对品牌商品购买行为。
行为数据有4个字段:用户id,品牌id,行为类型,行为日期
行为类型包括点击,购买,收藏,购物车
把这个预测问题看做是一个二分类问题。

2)数据预处理
+ 由于题目要求预测用户未来一个月的购买行为,我们可以通过拆分4个月的行为数据来构造训练集和测试集。
为了构造训练样本,我们保留前3个月的数据用于提取特征,保留最后1个月的数据用于提取标签(有购买为1,无购买为0)。
为了构造测试样本,我们保留最后3个月的数据用于提取特征。
+ 另外考虑到收藏和加入购物车这两种行为的个体差异性很大,因此我们简单地将这两种行为与点击合并到一起。

3)特征提取
画统计图分析用户行为

从三个维度构建特征体系:
用户类型特征(描绘什么样的用户会购买)
品牌类型特征(描绘什么样的品牌会被购买)
用户对品牌的交互特征(描绘用户在什么样的情况下会购买品牌商品)

更细致的讲,我主要使用了:
1-简单的计数特征:比如行为次数,行为天数,类别数等等
2-组合这些计数特征还可以得到比值特征:比如购买点击率,日购买率,返客率等等
3-还用了基本的统计特征:比如用来衡量行为时间间隔分布的均值和方差,用来衡量行为均匀程度的基尼系数和信息熵

(最近三天/一周/半个月/一个月/三个月)
# 用户特征,需要挖掘出哪种用户会购买
+ 统计类型特征
- 点击购买品牌数
- 点击购买次数
- 点击购买天数
- 点击购买基尼系数(衡量行为覆盖率)
+ 比值类型特征
- 购买次数除以所有行为次数(转化率)
- 用户购买次数除以购买天数

# 品牌特征,需要挖掘出哪些品牌会被购买
+ 统计类型特征
- 点击购买用户数
- 点击购买次数
- 点击购买天数
- 点击购买基尼系数
+ 比值类型特征
- 购买次数除以所有行为次数
- 多次购买用户数除以总购买用户数(返客率)

# 交互行为特征,需要挖掘出行为表现与购买的关系
+ 统计类型特征
- 点击购买次数
- 点击购买天数
- 点击购买基尼系数
- 点击购买行为到最后一天的时间间隔均值
- 点击购买行为到最后一天的时间间隔方差
- 点击购买行为兴趣(类比原子核衰变)
+ 比值类型特征
- 用户点击购买品牌次数除以用户总点击购买品牌次数(关注度)
- 用户点击购买品牌天数除以用户总点击购买品牌天数(关注度)

4)样本数不平衡问题
无购买样本数与有购买样本数的比例大约是100:1,因此需要解决样本数不平衡问题。
可以通过对多数类样本进行抽样或拷贝少数类样本的方式,解决数据不平衡问题。
经过线下调试,比例调为8:1时分类效果较佳。

5)选择分类模型
# 线下赛
+ 规则尝试
- 利用用户对品牌的行为计数给品牌打分,将评分高的品牌推荐给用户。
+ 相似评分推荐
- 协同过滤CF(mahout算法包)
+ 使用分类器(由于数据量不是很大,使用低方差/泛化能力较好的分类器)
- 逻辑回归LR
- 支持向量机SVM(libsvm)

# 线上赛
+ 随机森林RF
+ 梯度加速回归树GBRT(以优化残差为目标)
+ 极限学习机ELM(特点是训练和预测速度快)
+ 融合
- 将RF/GBRT/ELM/LR融合,效果提升不大(原因:在保证单模型效果的前提下,模型差异越大,混合效果越好)
- 未实现的想法:
考虑到无购买样本数比较多,存在的数据噪点也比较多,所以希望分类面能够向有购买样本一边紧缩,所以可以用有购买样本训练一个one-class分类器,然后与two-class分类器融合。one-class分类器的分类边界是比较紧的,它会将训练样本包起来,常常用于异常样本的检测。

6)线下测试及上交结果
按时间轴切分数据,计算线下F1-score。

 

2. 移动端商品推荐 - 比赛网址

由于比赛设定与天猫品牌类似,这里只讲不同点。

首先,这是一个以提高准确率和召回率为目标的比赛,有别于推荐系统中以提高推荐准确度、新颖度、惊喜度等为综合目标的实际应用,我们把推荐问题修正为预测问题,把精力放在对有历史交互数据的用户商品对(user-item pair)的购买预测上。

其次,日志时间段和预测时间段的改变并没有带来太大的差异,由于时间粒度精确到了小时,这样相当于只是做了一个紧缩,我们仍然可以借鉴去年的特征设计。

最后,虽然数据中存在用户和商品的地理位置字段,但是这并没有带来太多的信息,相反有可能引入新的噪声(有些用户和商品该字段为空),用户是否有购买意向其实只从行为序列就可以发现很多影子,假如用户会购买位置比较靠近的商品,那么他极有可能会多关注这个商品,那么此时的地理因素就显得不是那么重要了。

对于商品类别这个属性,我们除了考虑类似商品的基本特征之外,还会考虑其与用户及商品的关联特征,例如可以把类别当做一个限定条件,统计用户对某类别中的商品行为数。

最后,关于双十二的处理,我们主要是采用不处理的方法,即在设计特征的时候尽可能规避双十二对不同时段数据集的影响(双十二的影响主要为当天及前后天的行为),如果训练集出现偏差,那么学习到的模型将会出现偏差,如果测试集出现偏差,那么预测的结果将会是有偏差的,采用不处理的方法可以同时规避数据集偏差和人为引入偏差。

另外,为了提高分数,期间我们尝试过再排序的方法,从用户购买力的角度去优化推荐列表。我们统计过一个规律,购买力靠前的用户他的购买量比重是比较大的,而推荐列表中如果达不到这个统计值,则可以尝试去修正这个比例,这样能取得一定的成绩提升。

更多内容见 - http://weibo.com/p/1001603865213605651756

 

 

有机会再去体验一下其他领域,也是棒棒的 :)

 

posted @ 2015-10-05 13:40  awarrior  阅读(235)  评论(0编辑  收藏  举报