当前位置:   article > 正文

【推荐算法】推荐系统中的特征工程(二):特征选取及重要性分析_推荐算法特征重要性woe

推荐算法特征重要性woe

前言

上一篇文章介绍了常见的特征处理方法,详见:【推荐算法】推荐系统中的特征工程(一):特征处理
本文介绍特征的选取及特征重要性的分析方式。

特征选取

机器学习模型实际上就是归纳学习数据分布,有策略的选择特征,会给模型提供一个较高的起点,并且在模型训练期间更不容易受到数据的负向影响。

特征选择就是在整个特征池中选取优质子集的过程,这里面说的优质指的是特征与目标相关性较强。好的特征可以提升模型性能,提升业务指标。选取特征的目的主要有两点:

1.简化模型。非必要特征注定会增加模型的复杂度,模型复杂度增加又会导致资源占用、训练时长、响应时长的增加
2.简化特征池。能用几十个特征完成的事就不要用上百个特征,特征一多,编码空间就变大,特征生产阶段耗时不说,不相关特征也会导致模型过拟合

那么如何判断特征与目标的相关性强弱呢?以点击率预估模型为例,从用户认知业务场景的角度出发,用户点击某个商品或是某个feed,说明被点击的item符合用户偏好,从这个角度,能够体现用户偏好的特征,对于点击这个目标的重要性就会更高;另外,用户本身的信息比如性别、年龄段,商品本身的信息像商品价格、促销情况、商品的标签类别等,对于用户的点击决策相关性也很大。

备选特征是否有效,一方面取决于特征选取的准确性,这个一般是算法同学的经验主导,对业务场景的理解够深,踩的雷进的坑多了,也就大致能判断一些特征是否有用了;另一方面,对备选特征进行基础的统计分析也是必要的,常见的统计分析有以下几种:

覆盖度统计
一般情况下,覆盖率很小的特征,一般对模型的影响也相对较小。这个是最直观的感受,当然,不排除存在个别覆盖度不高,但是和目标强相关的特征,自己判断就好。

方差分析
方差分析用来判断特征值的分布情况,计算得到的方差越小,特征的区分度就会越小,根据经验确定阈值,小于某个阈值时候认为特征与目标相关性低

互信息
这个之前有介绍过,详见:【ML Method】熵、联合熵、条件熵、互信息、相对熵、交叉熵

pearson相关系数
取值为 [ − 1 , + 1 ] [-1, +1] [1,+1],+1表示完全正相关,-1表示完全负相关,0表示无关

最后,从上面的例子总结一下,在个性化推荐场景中,可能有用的特征:
user侧:性别、操作系统、年龄段、用户活跃程度等
item侧:商品价格、feed质量、feed标签等
context侧:时间段、日期(节假日 or 平常)、周几(工作日 or 周末)、地理信息
偏好类特征(user侧):历史行为的标签偏好、用户的内容偏好、历史行为统计量等复合指标

特征重要性分析

特征的重要性分析也是一个比较重要的环节,对于重新审视特征池,迭代优化复盘以及发现后续优化迭代方向有现实意义,可以用来判断哪些特征对模型的影响程度大,哪些影响较小。

通常情况下,我们优化迭代特征会一次性选取多个备选特征,但这几个特征里面哪个是真实有效的,不得而知,如果计算得到每个特征的重要性,就可以再次对特征进行精简,保证特征池的特征高效性,同时,也能够指导后续的优化方向,即多开发重要特征相关的其他特征,而对于重要性低的,就可以简单地进行迭代验证猜想即可,这样就可以节省更多的时间,在有限的时间里实现业务指标提升的最大化。

目前的大多数主流排序模型,其评估指标为auc、gauc等,反应了所有特征对模型预测能力影响的高低。由此,是不是也可以根据增加或移除某一个特征,评估指标的变化量来判断这个特征的重要程度呢?答案是可行的。
下面以gauc作为评估指标、计算用户性别这个特征的重要性为例,介绍常见的几种处理方式:

1.特征值置为0

即将gender这个特征的特征值都置为0,前面有提到,gender这个特征一般只有三个取值,男、女、无法判断。置0的这种方式最为简单,开发成本最低,置0后,和其他特征拼接在一起,再丢给模型进行训练,最后模型的gauc与online的gauc的变化量作为gender特征的重要性。

上面这种操作简单方便,但也有一个实质性的问题:单独改变这个特征是否会影响其他特征?事实上,可能会存在影响:主流的模型基本上都是像DeepFM、DIN这类的深度模型,本身就能够完成对交叉信息的提取,直接吧特征置为0,相应的,交叉特征也都受到影响,而交叉特征(假设是gender和tag的交叉特征)不只可以体现gender这一个特征,还可以体现tag特征的重要性,这显然不合理。

2.特征值随机打散

同样还是gender这个特征,只有三个取值,将特征值随机打散,新的特征值不一定是0,可能是三个取值中的任意一个,这样处理之后,只会影响gender特征和交叉特征中gender影响的那部分,相比于上一种方式更加合理。

在工程实现上也不麻烦,只需要提前维护一个特征值集合,然后随机取值即可,如果特征需要进行编码映射,逻辑可能会复杂一点,后续介绍特征样本拼接工具时候再详细介绍。

总结一下,本篇文章介绍了特征选取和特征重要性分析的相关内容,在特征选取这一块,最重要的还是立足于业务场景,对业务和数据进行透彻理解之后,开发特征时候才会更加游刃有余。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/370286
推荐阅读
相关标签
  

闽ICP备14008679号