了解携程个性化推荐算法原理,让旅行更实惠( 三 )


 
显式特征组合
对特征进行离散化后然后进行叉乘,采用笛卡尔积(cartesian product)、内积(inner product)等方式 。
在构造交叉特征的过程中,需要进行特征离散化;针对不同的特征类型,有不同的处理方式 。
1、numerical feature

  • 无监督离散化:根据简单统计量进行等频、等宽、分位点等划分区间
  • 有监督离散化:1R方法,Entropy-BasedDiscretization (e.g. D2,MDLP)
2、ordinal feature(有序特征)
编码表示值之间的顺序关系 。比如对于卫生条件这一特征,分别有差,中,好三档,那么可以分别编码为(1,0,0),(1,1,0),(1,1,1) 。
3、categorical feature (无序特征)
离散化方法
具体做法
OHE(one hot encoding)
用h个变量代表h个level
Dummy Encoding
将一个有h个level的变量变成h-1个变量
Hash Trick
转化为固定长度的hash variable
  • 离散化为哑变量,将一维信息嵌入模型的bias中,起到简化逻辑回归模型的作用,降低了模型过拟合的风险 。
  • 离散特征经过OHE后,每个分类型变量的各个值在模型中都可以看作独立变量,增强拟合能力 。一般的,当模型加正则化的情况下约束模型自由度,我们认为OHE更好 。
  • 利用feature hash技术将高维稀疏特征映射到固定维度空间
半显式特征组合
区别于显式特征组合具有明确的组合解释信息,半显式特征组合通常的做法是基于树方法形成特征划分并给出相应组合路径 。
一般做法是将样本的连续值特征输入ensemble tree,分别在每颗决策树沿着特定分支路径最终落入某个叶子结点得到其编号,本质上是这些特征在特定取值区间内的组合 。ensemble tree可以采用Gbdt 或者 random forest实现 。每一轮迭代,产生一棵新树,最终通过one-hotencoding转化为binary vector,如下图所示 。
了解携程个性化推荐算法原理,让旅行更实惠

文章插图
 
以下几点是我们在实践中的一些总结和思考 。
  • 在实验中发现如果将连续值特征进行离散化后喂入gbdt,gbdt的效果不佳,AUC比较低 。这是因为gbdt本身能很好的处理非线性特征,使用离散化后的特征反而没什么效果 。xgboost等树模型无法有效处理高维稀疏特征比如user id类特征,可以采用的替代方式是:将这类id利用一种方式转换为一个或多个新的连续型特征,然后用于模型训练 。
  • 需要注意的是当采用叶子结点的index作为特征输出需要考虑每棵树的叶子结点并不完全同处于相同深度 。
  • 实践中采用了Monte Carlo Search对xgboost的众多参数进行超参数选择 。
  • 在离线训练阶段采用基于Spark集群的xgboost分布式训练,而在线预测时则对模型文件直接进行解析,能够满足线上实时响应的需求 。
此外,在实践发现单纯采用Xgboost自动学到的高阶组合特征后续输入LR模型并不能完全替代人工特征工程的作用;可以将原始特征以及一些人工组合的高阶交叉特征同xgboost学习到的特征组合一起放入后续的模型,获得更好的效果 。
四、总结完整的推荐系统是一个庞大的系统,涉及多个方面,除了召回、排序、列表生产等步骤外,还有数据准备与处理,工程架构与实现,前端展现等等 。在实际中,通过把这些模块集成在一起,构成了一个集团通用推荐系统,对外提供推服务,应用在10多个栏位,60多个场景,取得了很好的效果 。本文侧重介绍了召回与排序算法相关的目前已有的一些工作与实践,下一步,计划引入更多地深度模型来处理召回与排序问题,并结合在线学习、强化学习、迁移学习等方面的进展,优化推荐的整体质量 。

【了解携程个性化推荐算法原理,让旅行更实惠】


推荐阅读