1、建立特征工程

拟合泛化,数据及表达数据的特征本身就决定了机器学习模型效果的上限,而模型和算法只是在逼近这个上限。因此,特征工程

1.1 构建推荐系统特征工程的原则

特征的本质就是对某个行为过程相关信息的抽象表达。推荐系统过程中的某个行为转换成某种数学形式才能被机器学习模型所学习。所以必须将这些行为过程中的信息以特征的形式抽取出来,用多个维度的特征去表达这一行为。

构建推荐系统特征工程的原则尽可能地让特征工程抽取出的一组特征能够保留推荐环境及用户行为过程中的所有有用信息,尽量摒弃冗余信息。

1.2 推荐系统中的常用特征

  1. 用户行为数据:显性反馈行为 和 隐性反馈行为 , 人与物之间的联系。
  2. 用户关系数据:人与人之间的联系,分为“强关系” 和 “弱关系”。
  3. 属性、标签类数据:描述用户或者物品的特征。可以是用户也可以是物品。
  4. 内容类数据:可以看做是属性类标签型特征的延伸,相比标签类特征来说内容数据往往是大段的文字类描述。
  5. 上下文信息:目的是尽可能地保存推荐行为发生场景的信息(在傍晚看烂漫电影,在深夜看惊悚恐怖电影)。
  6. 统计类特征:通过统计方法计算出来的特征,例如,历史CTR等等。本质上是一些粗颗粒度的预测指标。
  7. 组合类特征:将不同特征组合后生成的新特征。

1.3 常用的特征处理方法

连续性特征类别型特征

1.3.1 连续性特征

  包括像用户年龄、统计类特征、物品的发布时间等数值型特征,这类型的特征处理使用归一化、离散化、加非线性函数等方法。

  1. 归一化:统一各特征的量纲,将连续特征归一化到推荐系统总结(二)_特征工程之间。
  2. 离散化:将原来的连续值进行分桶,防止连续值带来的过拟合现象及特征值分布不均的现象。
  3. 加非线性函数:更好的捕获特征与优化目标之间的线性关系,增强模型的表达能力。

1.3.2 类别型特征

  典型例子是用户的行为历史数据、属性标签类数据等。最常用的方法就是使用​​one-hot​​编码将其转换为数值向量。在Embedding技术成熟之后,由似稀疏向量转为稠密Embedding向量,形成最后的特征。

2、特征工程的构建

2.1 一些需要考虑到的问题

  1. 考虑时间对用户购买行为的影响,用户在一周之前的行为对考察日是否购买的影响已经很小,故而只考虑距考察日一周以内的特征数据。
  2. 购买行为可能具有一定的周期性,猜测购买行为周期可能为一周,但​​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​​为测试数据集;

  1. 针对当前业务背景,考虑从​​user​​​、​​item​​​、​​item_category​​​三个基本维度及其组合入手进行特征构建,简称​​U、I、C​​。
  2. 该问题的本质就是预测​​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…