1、建立特征工程
机器学习模型的能力边界在于对数据的拟合和 泛化,数据及表达数据的特征本身就决定了机器学习模型效果的上限,而模型和算法只是在逼近这个上限。因此,特征工程 对推荐系统效果提升的作用是无法替代的。
1.1 构建推荐系统特征工程的原则
推荐系统中,特征的本质就是对某个行为过程相关信息的抽象表达。推荐系统过程中的某个行为转换成某种数学形式才能被机器学习模型所学习。所以必须将这些行为过程中的信息以特征的形式抽取出来,用多个维度的特征去表达这一行为。
构建推荐系统特征工程的原则:尽可能地让特征工程抽取出的一组特征能够保留推荐环境及用户行为过程中的所有有用信息,尽量摒弃冗余信息。
1.2 推荐系统中的常用特征
- 用户行为数据:显性反馈行为 和 隐性反馈行为 , 人与物之间的联系。
- 用户关系数据:人与人之间的联系,分为“强关系” 和 “弱关系”。
- 属性、标签类数据:描述用户或者物品的特征。可以是用户也可以是物品。
- 内容类数据:可以看做是属性类标签型特征的延伸,相比标签类特征来说内容数据往往是大段的文字类描述。
- 上下文信息:目的是尽可能地保存推荐行为发生场景的信息(在傍晚看烂漫电影,在深夜看惊悚恐怖电影)。
- 统计类特征:通过统计方法计算出来的特征,例如,历史CTR等等。本质上是一些粗颗粒度的预测指标。
- 组合类特征:将不同特征组合后生成的新特征。
1.3 常用的特征处理方法
从 连续性特征 和 类别型特征 去考虑特征处理方法:
1.3.1 连续性特征
包括像用户年龄、统计类特征、物品的发布时间等数值型特征,这类型的特征处理使用归一化、离散化、加非线性函数等方法。
- 归一化:统一各特征的量纲,将连续特征归一化到 [ 0 , 1 ] [0,1] [0,1]之间。
- 离散化:将原来的连续值进行分桶,防止连续值带来的过拟合现象及特征值分布不均的现象。
- 加非线性函数:更好的捕获特征与优化目标之间的线性关系,增强模型的表达能力。
1.3.2 类别型特征
典型例子是用户的行为历史数据、属性标签类数据等。最常用的方法就是使用one-hot
编码将其转换为数值向量。在Embedding技术成熟之后,由似稀疏向量转为稠密Embedding向量,形成最后的特征。
2、特征工程的构建
2.1 一些需要考虑到的问题
-
考虑时间对用户购买行为的影响,用户在一周之前的行为对考察日是否购买的影响已经很小,故而只考虑距考察日一周以内的特征数据。
-
购买行为可能具有一定的周期性,猜测购买行为周期可能为一周,但
12
月12
日为异常期,所以舍去12
月12
日附近的日期的数据,最后将一个月的时间划分为3
周。其中11.18
和12.05
和12.09
是验证数据集。part 1 - train: 11.22~11.27 -> 11.28; part 2 - train: 11.29~12.04 -> 12.05; part 3 - prediction: 12.13~12.18 (-> 12.19);
其中
part 1
和part 2
可作为模型训练和验证数据集,part 3
为测试数据集; -
针对当前业务背景,考虑从
user
、item
、item_category
三个基本维度及其组合入手进行特征构建,简称U、I、C
。 -
该问题的本质就是预测
U-I
是否发生购买行为的(label = {0,1}
)二分类问题,最终的结果特征数据就是要生成U-I
字典形式组成的样本集。由于样本几千万条非常庞大,所以只考虑一周之内的U-I
操作。
2.2 构建特征工程
这里将所需构建的特征分为六大类:U、I、C、UI、UC、IC
。对每类分别结合行为次数、时间、排序等视角设计特征。考虑到样本规模,特征数量不宜太少,设计了约100
个特征来进行首次的数据处理任务,具体的特征选择及定义见下表:
特征名称 | 所属类别 | 特征含义 | 特征作用 | 特征数量 |
---|---|---|---|---|
u_b_count_in_n(n=1/3/6) | U | 用户在考察日前n天的行为总数计数 | 反映了user_id的活跃度(不同时间粒度:最近1天/3天/6天) | 3 |
u_bi_count_in_n(i=1/2/3/4,n=1/3/6) | U | 用户在考察日前n天的各项行为计数 | 反映了user_id的活跃度(不同时间粒度),反映了user_id的各项操作的活跃度,折射出user_id的购买习惯 | 12 |
u_b4_rate | U | 用户的点击购买转化率 | 反映了用户的购买决策操作习惯 | 1 |
u_b4_diff_hours | U | 用户的点击购买平均时差 | 反映了用户的购买决策时间习惯 | 1 |
i_u_count_in_n | I | 商品在考察日前n天的用户总数计数 | 反映了item_id的热度(用户覆盖性) | 3 |
i_b_count_in_n | I | 商品在考察日前n天的行为总数计数 | 反映了item_id的热度(用户停留性) | 3 |
i_bi_count_in_n | I | 商品在考察日前n天的各项行为计数 | 反映了item_id的热度(用户操作吸引),折射出item_id产生的购买习惯特点 | 12 |
i_b4_rate | I | 商品的点击购买转化率 | 反映了商品的购买决策操作特点 | 1 |
i_b4_diff_hours | I | 商品的点击购买平均时差 | 反映了商品的购买决策时间特点 | 1 |
c_u_count_in_n | C | 类别在考察日前n天的用户总数计数 | 反映了item_category的热度(用户覆盖性) | 3 |
c_b_count_in_n | C | 类别在考察日前n天的行为总数计数 | 反映了item_category的热度(用户停留性) | 3 |
c_bi_count_in_n | C | 类别在考察日前n天的各项行为计数 | 反映了item_category的热度(用户操作吸引),包含着item_category产生的购买习惯特点 | 12 |
c_b4_rate | C | 类别的点击购买转化率 | 反映了item_category的购买决策操作特点 | 1 |
c_b4_diff_hours | C | 类别的点击购买平均时差 | 反映了item_category的购买决策时间特点 | 1 |
ic_u_rank_in_c | IC | 商品在所属类别中的用户人数排序 | 反映了item_id在item_category中的热度排名(用户覆盖性) | 1 |
ic_b_rank_in_c | IC | 商品在所属类别中的行为总数排序 | 反映了item_id在item_category中的热度排名(用户停留性) | 1 |
ic_b4_rank_in_c | IC | 商品在所属类别中的销量排序 | 反映了item_id在item_category中的热度排名(销量) | 1 |
ui_b_count_in_n | UI | 用户-商品对在考察日前n天的行为总数计数 | 反映了user_id - item_id的活跃度 | 3 |
ui_bi_count_in_n | UI | 用户-商品对在考察日前n天的各项行为计数 | 反映了user_id - item_id的活跃度,反映了user_id - item_id的各项操作的活跃度,对应着user_id - item_id的购买习惯 | 12 |
ui_bi_last_hours | UI | 用户-商品对各项行为上一次发生距考察日的时差 | 反映了user_id - item_id的活跃时间特征 | 4 |
ui_b_count_rank_in_n_in_u | UI | 用户商品对的行为在用户所有商品中的排序 | 反映了user_id对item_id的行为偏好 | 3 |
ui_b_count_rank_in_n_in_uc | UI-UC | 用户-商品对的行为在用户-类别对中的排序 | 反映了user_id对item_category中的各个item_id的行为偏好 | 3 |
uc_b_count_in_n | UC | 用户-类别对在考察日前n天的行为总数计数 | 反映了user_id - item_category的活跃度 | 3 |
uc_bi_count_in_n | UC | 用户-类别对在考察日前n天的各项行为计数 | 反映了user_id -item_category的活跃度,反映了user_id -item_category的各项操作的活跃度,对应着user_id -item_category的购买习惯 | 12 |
uc_bi_last_hours | UC | 用户-类别对各项行为上一次发生距考察日的时差 | 反映了user_id -item_category的活跃时间特征 | 4 |
uc_b_count_rank_in_n_in_u | UC | 用户-类别对的行为在用户所有商品中的排序 | 反映了user_id对item_category的行为偏好 | 3 |
这些特征数值尺度不一,所以对尺度敏感的模型在使用前需要进行归一化处理;有些特征是离散型(如排序特征),有的特征存在缺值(如时间差特征),这些都要根据具体的模型来进行预处理。
上述行为特征的提取,可以通过python
中的pandas
模块完成。
3、总结
本文首先简单的论述了搭建推荐系统中建立特征工程所要遵循的原则和推荐系统中需要常用的特征和常用的特征处理的办法,包括连续性特征和类别型特征。然后按照上述论述的构建特征工程所要遵循的原则和特征处理的方法对阿里天池数据集进行特征提取。
基于上述U-I-C-UI-UC-IC
这种规则对数据进行特征工程构建后,可将原始数据划分为多个csv
文件,每个文件中每行的数据表示如下表:
数据 | 索引 | 特征 | 标签 |
---|---|---|---|
一行样本数据 | user_id, item_id | 约100个特征数据 | 分类结果(0-未购买,1-购买) |
得出了我们所需要的样本集之后,下面就可以进行模型的训练和预测了。下篇博文讲述通过最优化GBDT
模型中的参数,对12
月19
日的用户购买情况进行预测, to be continued…