特征工程是利用数据的特定领域知识构建特征使算法达到最高性能的过程。
# 过程
特征工程通常包含特征提取、特征选择、特征构建等三个子过程。
# 特征提取
自动构建新特征,将原始特征转换为一组具有明显物理意义或统计意义的特征。比如PCA,ICA,LDA等,推荐系统中常用特征构建。
# 特征构建
特征构建是指从原始数据中人工地构造新的特征,需要对结合使用场景和数据样本分析构建。
# 特征选择
特征选择的目的是从特征集合中选一组最具统计意义的特征子集,从而达到降维的效果。常用的方法包括:filter、wrapper、embedded。
- Filter法使用一些评价指标计算单个特征和类别变量之间的关系,如Pearson相关系数,Gini-Index(基尼系数),IG(信息增益)等,选择某个子集作为特征子集(比如从高到低排名的前10%),使用子集的特征训练,评估模型性能,或者绘制子集和精度的相关图,寻找性能最好的一组特征。优点是计算高效,对过拟合有较高的鲁棒性。缺点是倾向于选择冗余的特征,不考虑特征间的相关性。
- Wrapper本质上是分类器,使用选取的特征子集对样本集分类,分类精度作为特征子集优劣的衡量标准,常用的有逐步回归(Stepwise Regression)、向前选择(Forward Selection)和向后选择(Backward Selection)。优点是考虑了特征间的相关性,缺点是数据较少时容易过拟合,特征较多时计算时间长。
- Embedded是自主选择特征,如使用Regularization做特征选择,或者用决策树思想,比如Random Forest和Gradient Boosting。
# 构建
# 类型
# 数值特征(Numerial)
- 标准化与归一化。归一化将数据按比例缩放,使得不同单位/量级的特征间具有可比性。
归一的常用方法:
- 线性函数归一化,$$X_{max}$$、$$X_{min}$$分别为数据的最大值和最小值,映射到[0, 1]。
- 零均值归一化,假设原始数据均值为$$\mu$$,标准差为$$\sigma$$,映射到均值为0,标准差为1的分布上。
- 分桶后onehot。
等距分桶、等频分桶。
- 缺失值处理。使用均值、中位数、众数代替,也可以直接忽略,将缺失当作一种信息编码。
- GBDT模型。LightBGM、XGBoost。
# 类别特征(Categorical)
- One-Hot Encoding。通常用于处理类别间不具有大小关系的特征。当类别数量较多时,特征空间会非常大。
- Hash Encoding。将原始高维向量压缩成低维向量,且尽量不损失原始特征的表达能力。
- Ordinal Encoding。序号编码通常用于处理类别间具有大小关系的数据。
- Binary Encoding。用二进制编码,比One-Hot少很多,本质上属于Hash。
# Embdedding特征
# Context特征
用户授权的前提下拿到的客户端带的信息,比如请求时间,手机品牌,型号,操作系统,网络状态,用户渠道等。
# Session行为特征
基于用户行为流水,常见划分方法包括:
- 固定行为数窗口,如最近100条行为中的行为统计。
- 固定时间窗口,如1/3/7/15天内的有过正向行为的item id或同级量。
- 连续行为窗口,如从打开到关闭App期间的互动行为。
# 组合
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。
当两个特征的数量较多时,可以矩阵分解为k维的低维向量表示。
可以通过梯度提升决策树(GBDT)寻找有效的特征组合,该方法的思想是每次都在之前构建的决策树的残差上构建下一棵决策树。
# 典型
# 商品推荐
# 游戏推荐
# 视频推荐
# 新闻推荐