为期100天的阿里移动推荐算法比赛终于结束了,上一篇谈了一下比赛的感受,这一篇谈谈特征的提取。该篇文章的布局:对一期和二期用到的特征分别进行说明。
在说特征的提取之前,在这里给出这个比赛的题目和数据及相关说明:
竞赛题目
在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行为数据,往往还需要利用更丰富的用户行为数据。定义如下的符号:
U——用户集合
I——商品全集
P——商品子集,P ⊆ I
D——用户对商品全集的行为数据集合
那么我们的目标是利用D来构造U中用户对P中商品的推荐模型。
数据说明
竞赛数据包含两个部分。第一部分是用户在商品全集上的移动端行为数据(D),表名为tianchi_mobile_recommend_train_user,包含如下字段:
字段 |
字段说明 |
提取说明 |
user_id |
用户标识 |
抽样&字段脱敏 |
item_id |
商品标识 |
字段脱敏 |
behavior_type |
用户对商品的行为类型 |
包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。 |
user_geohash |
用户位置的空间标识,可以为空 |
由经纬度通过保密的算法生成 |
item_category |
商品分类标识 |
字段脱敏 |
time |
行为时间 |
精确到小时级别 |
第二个部分是商品子集(P),表名为tianchi_mobile_recommend_train_item,包含如下字段:
字段 |
字段说明 |
提取说明 |
item_id |
商品标识 |
抽样&字段脱敏 |
item_ geohash |
商品位置的空间标识,可以为空 |
由经纬度通过保密的算法生成 |
item_category |
商品分类标识 |
字段脱敏 |
训练数据包含了抽样出来的一定量用户在一个月时间(11.18~12.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。
以上是这个比赛的题目和数据及相关说明(从比赛官网复制过来的,你也可以自己 去比赛官网瞅个究竟,网址
http://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100066.333.5.b8vGf9&raceId=1)。
为了后面叙述的方便,我们在这里作一些定义:UI表示用户对当前产品的操作,U表示用户的操作的产品数,I表示操作该产品的用户数,C表示产品类别的操作,UC表示用户对该类产品的操作。
一期特征说明:
我们对数据进行了分析(通过各种摸索进行的),发现以一周的时间作为一个统计窗口比较合适,并且只取一周内有加入购物车行为的UI对。因为这样就能保证召回率足够的高,数据量足够的小 。为了能使训练集与测试集的比比较合理,我们使用了10个滑动窗口(10个一周)作为训练集,一个滑动窗口(一周)作为测试集。根据需要我们分别对每周的前1天,前3天,前五天,前七天作为统计特征单元。在统计时间特征时,都是以小时为单位。
一、UI特征
UI的点击数,UI的收藏数,UI的加购数,UI购买数,前面四种操作的最晚时间,UI的加购数/UI点击数,UI的加购数/UI的收藏数,UI的购买数/UI的点击数,UI的购买数/UI的收藏数,UI的购买数/UI的加购数。
二、U特征
U的点击数,U的收藏数,U的加购数,U的购买数,UI的点击数/U的点击次数,UI的收藏数/U的收藏数,UI的加购数/U的加购数,UI购买/U的购买数。
三、I特征
I的点击数,I的收藏数,I的加购数,I的购买数,UI的点击数/I的点击数,UI的收藏数/I的收藏数,UI的加购数/I的加购数,UI的购买数/I的购买数。
四、C特征
C的点击数,C的收藏数,C的加购数,C的购买数,UI的点击数/C的点击数,UI的收藏数/C的收藏数,UI的购买数/C的购买数。
五、UC特征
UC的点击数,UC的收藏数,UC的加购数,UC的购买数,UI的点击数/UC的点击数,UI的收藏数/UC的收藏数,UI的购买数/UC的购买数。
六、交叉特征
该用户购买的最晚时间-该用户的最晚加购时间,该用户购买当前item的最晚时间-该用户加购当前item的最晚时间。
七、模型选择及参数设置
在模型方面,我们直接采用了weka自带的LR分类器。参数设置:正负样本权重为1:0.045。
Ps:一期我们并没有对双12的数据进行特殊处理。
二期特征说明
二期用到的特征的大体思路跟一期差不多。但是在我们的实验过程中,我们发现一期以一周有加购行为的UI作为我们的基本过滤条件在二期已经不适当用了。经过我们的探索,我们采用了前28天作为一个滑动窗口,那么这里每项特征都是以前1、2、4、7、14、21、28天进行统计计算的(有特殊说明的除外)。在计算时间特征时、都是以小时为单位。
Ps:二期的特征由我队友撰写,我只是进行了少量的改进。
一、用户-商品特征
1、用户对商品点击、收藏、加购物车、购买的最近时间。
2、用户对商品点击、收藏、加购物车、购买的次数
3、按时间分段,且相同粒度的时间段之间不重叠(比如粒度为6个小时,则分别统计0-5,6-11,12-17,18-24四个时间段的操作),分别统计用户对商品的点击、收藏、加购物车、购买的次数,分段粒度分别为6小时、12小时、1天、3天、7天、14天,由于该特征分数提升比较小,实际并没有计算所有分段,比如6小时为粒度的只取了前两段(即只取了0-5,6-11两个时间段的统计信息)。
二、用户-商品、用户-类别组合特征
1、用户对除去该商品的同类其他商品的点击、收藏、加购物车、购买次数。
2、按时间分段且相同粒度的时间段之间不重叠对前面的四个特征进行计算,类似用户-商品特征。
3、用户对该商品的最近点击、收藏、加购物车、购买时间减去同类其他商品的最近点击、收藏、加购物车、购买时间(这里指的是相同操作的时间相减)。
4、用户对该商品的最近点击、收藏、加购物车、购买时间减去同类其他商品的最近购买时间。
5、用户对该商品的点击量减去用户对同类其它商品的平均点击量。
三、用户特征(子集和全集分别计算该类特征,其他大类特征只在商品子集计算)
1、用户最近点击、收藏、加购物车、购买时间。
2、用户点击、收藏、加购物车、购买量。
3、用户转化率即用户购买量分别除以用户点击、收藏、加购物车这三类行为的比值。
4、用户点击、收藏、加购物车、购买量在28天里的均值方差(不按周期计算)。
四、商品特征
1、商品被点击、收藏、加购物车、购买量。
2、商品被购买转化率(计算方法同三)。
3、商品被点击、收藏、加购物车、购买量在28天里的均值方差(同样不按周期计算)。
五、类别特征
1、该类商品被点击、收藏、加购物车、购买量。
2、该类商品转化率(计算方法同上)。
六、交叉特征
1、用户对商品最近点击、收藏、加购物车、购买时间减去该用户最近点击、收藏、加购物车、购买时间。
2、用户对商品最近点击、收藏、加购物车、购买时间减去该用户购买时间。
3、用户对商品点击、收藏、加购物车、购买量减去用户平均点击、收藏、加购物车、购买量。
4、用户对商品点击、收藏、加购物车、购买量减去商品平均被点击、收藏、加购物车、购买量。
5、用户对商品点击、收藏、加购物车、购买量除以用户点击、收藏、加购物车、购买量。
6、用户对商品点击、收藏、加购物车、购买量除以用户对该类其它商品点击、收藏、加购物车、购买量。
7、用户对商品点击、收藏、加购物车、购买量除以该商品被点击、收藏、加购物车、购买量。
8、商品被点击、收藏、加购物车、购买量除以该类商品被点击、收藏、加购物车、购买量。
七、双十二处理
在计算商品特征和用户特征时删除双十二数据,在计算时间周期等时,双12后面的时间前移一天填补双十二的空缺。但在计算交叉特征时,如果需要计算上述特征仍然保留双十二数据。
八、滑动窗口(效果微小)
以前28天为历史数据计算特征,后一天的购买情况打标签,如用11月18号至12月15号数据计算特征,以12月16号购买情况打标签。然后窗口依次滑动一天,如此一共得到4个数据集,用前三个数据集作为训练集,最后一个数据集作为测试集。
九、前期样本过滤及抽样
只保留前两天有操作的的样本、然后正样本过采样到4倍。负样本随机抽样,抽样后正负样本比约为1:8
十、模型选择
我们一开始用LibSVM,主要是因为这个不用抽样,只需要向一期设定正负样本的权重。但是后来,我们发现这个效果没有GBDT好。后来我们也就采用了GBDT(采样好麻烦)。由于GBDT参数相对较多,这里就不一一列出了。想知道具体的,可以联系我,qq:836304831。
Ps;到最后了,我还是想吐槽一下阿里的比赛平台,真的是卡出翔了。