特征工程 - 你不知道的特征筛选

不管是在机器学习,还是深度学习场景中,特征决定了模型效果的天花板。在互联网公司中,总会有那么些团队专门去做用户画像,他们提取用户落下的日志,转化成能够精准描述用户的特征,这部分特征可以自己组内提出,也可以是算法组提出,将用户用一连串的特征去表示,来达到某种特定模型上线最好的效果。

做特征,需要紧紧围绕目标去做特征,而不是为了做特征而做特征,不合适的特征后续的存储、维护问题很多,以信息流推荐场景为例,目标是希望推给用户的内容都是用户喜欢的。我们可以通过用户对推荐的某篇文章或视频的点击、点赞、评论、转发、收藏、浏览播放时长等数据来综合衡量用户对该文章或视频的喜欢程度;可以通过用户打开APP的次数、用户返回APP的时间间隔、用户一次停留时长等来衡量用户对APP的满意程度。

知道了目标,确定了衡量目标的标准,我们围绕这些标准来做特征。这部分特征包括:用户画像,用户的历史行为、用户所处的环境、文章的内容和属性等因素相关。

上线的模型并不是用了所有特征,针对不同的场景,会增加特定特征。例如,序列化推荐会添加用户历史交互信息特征 hist_item, 时序预测项目中,添加了过去m天的滑窗特征增加对未来N天的预测效果等。
 
 

在获得了诸多的特征后,如何进行特征筛选,或者类别特征和连续特征如何进行处理?

1 特征筛选方法

按照传统统计学上面的回答:

  • 基于统计量筛选:选择方差大的特征、皮尔逊相关系数(与target相关系数高,数据正态且连续)、覆盖率、假设检验。

假设检验;假设特征变量和目标变量之间相互独立,选择适当检验方法计算统计量,然后根据统计量做出统计推断。例如,对于特征变量为类别变量而目标变量为连续数值变量的情况,可以使用方差分析,对于特征变量和目标变量都为连续数值变量的情况,可以使用皮尔森卡方检验。卡方统计量取值越大,特征相关性越高。(方差分析所要研究的是分类自变量对数值因变量的影响。卡方检验分析两个变量间的关系:是否相互独立,是否来自一个总体。)

  • 基于模型选择:
    1. 基于模型参数;LR 系数
    2. 树模型;最开始分裂特征,重要的特征更有可能出现在树生成早期的节点,作为分裂节点的次数也越多。
    3. L1正则;L1可以得到稀疏解,也就是可以对特真进行降维
  • AutoML:
    1. AutoML 在推荐系统中的应用

这里再解释几种特征筛选的方法:
(1) 对于类别特征 计算单特征的 AUC

意思就是说,将所有离散特征与target离散label,计算单值特征的AUC;再进行特征重要性排序,取出单值特征AUC较高的特征。

REF: AUC 理解与应用

单特征的AUC和 训练集与验证集划分划分有关,因为拿的是训练集中特征值的占比作为预测值,划分大小不一样,映射到验证集上也不一样吧。那这样是给了数据集了 就可以手算出来了。

(2) 树模型
XGBoost, lightGBM树模型都可以用来特征筛选;运用 plot_importance() 可以得到所有特征的 score, 然后进行排序。

 
 


ps:2. 类别特征和连续特征处理方法(sparse feature, dense feature).

(1)sparse feature
离散特征是非常常见的一类特征,如性别、标签等等。

  • one-hot
  • 散列编码 (类似于 mutil-hot)
    https://www.jianshu.com/p/9c40b8dc60bf
  • 离散特征之间交叉 (男-北京,男-上海)
  • 离散特征与连续特征交叉
    将离散特征a对连续特征进行groupby,取连续特征的sum, mean, max, min;然后 to 到 离散特征后面。

(2)dense feature

  • 离散化
    分桶(等距,等频,模型分桶(聚类K类))
  • 特征交叉
    这里通过 z=f(x,y)的形式。
  • 滑窗特征
    一般用在时序数据上,通过统计过去N天同连续特征值下的mean, max, min等。

你可能感兴趣的:(图与推荐,数据挖掘,机器学习,人工智能,机器学习,算法)