原文
需要同时掌握理论方法和业务逻辑才能提取有效的特征;
在特征方面拥有最大的自主性和探索性;
指征能力, 该特征的大小变化对最终结果的大小变化会在什么方向起到多大的作用;
ID特征, 指为每个用户分配一个唯一ID, 将这组唯一ID作为一组 One-Hot 特征, 每个用户在这组特征中只有一个特征; 具有个性化程度最强;
学习到一个用户整体的点击偏好, 承担学习全局偏置的功能;
将用户ID与物品侧的非ID类特征交叉组合, user_id+user_id×item_attribute;
历史记忆性强, 未来扩展能力差;
从根本上替换掉用户ID这个具有历史记忆属性的核心元素, 将其替换为可以代表一个用户, 同时还具有扩展性的其他信息, 降维;
有过某个行为的用户对于当前物品的点击概率;
对于用户有过行为的物品 hitory_item 和待预测的物品 current_item 组合特征;
大规模 ID 类特征, 非常细粒度的描述方法, 对于用户和物品之间的喜好关系有非常强的捕捉能力, 但也有局限性:
样本量要求大;
样本量是特征量的 10 倍;
数量庞大, 实现要求高;
数据稀疏性;
特征泛化能力差;
ID 类特征在 bias-variance(偏差-方差)的权衡中选择了偏差较低的一端;
模型信息总结提炼难度大;
将用户, 物品的 ID 用更低维, 更稠密的信息来表示;
例如: 用户ID => 属性(性别或年龄), 标签(喜好类别和标签)等;
高维特征(ID 类)用来增强行为丰富的用户的细致体验;
低维特征用来覆盖行为不足的用户和物品;
构造交叉特征有两种方式:
笛卡尔积方式
用户特征A和物品特征B中各个特征相互组合成一个特征;
特征量大, 描述能力强; 但工程方面要求高, 压力大;
交集方式
用户特征A和物品特征B中通过设置条件进行组合特征;
特征量减少, 性价比更高;
快速构建基线版本特征(指导原则)
机器学习系统的 **MVP(Minimal Viable Product, 最小可行产品, 可满足某一个功能的最简单产品形态)**原则: 首先构建整个系统的所有组件和 pipeline, 跑通流程, 然后在这个 pipeline 上进行细致的优化;
业务规则特征化
系统中存在的, 参与到与模型决策相同目标中的业务规则, 尽量将其特征化, 尤其是复杂的规则;
数值特征缩放(scaling)
取值范围差异较大的数值特征, 将它们的取值映射到同一个范围内([0,1]或[-1,1]);
缩放的好处:
缩放的方法:
单位长度缩放
x s c a l e d = x ∣ ∣ x ∣ ∣ 2 x_{scaled} = \frac{x}{||x||_2} xscaled=∣∣x∣∣2x, ∣ ∣ x ∣ ∣ 2 ||x||_2 ∣∣x∣∣2 表示特征向量的 L2 Norm;
整个向量长度为 1, 适合特征向量全部或大部分为数值类型
标准化
x s c a l e d = x − x ‾ σ x_{scaled} = \frac{x-\overline{x}}{\sigma} xscaled=σx−x, x ‾ \overline{x} x 特征的样本均值, σ \sigma σ 特征的样本标准差;
特征值具有 0 的均值和单位方差;
最小最大缩放
x s c a l e d = x − x m i n x m a x − x m i n x_{scaled} = \frac{x-x_{min}}{x_{max}-x_{min}} xscaled=xmax−xminx−xmin,
将原始值映射到 0~1, 同时保持原始的线性关系;
百分比化
x s c a l e d = Σ I ( x i < x ) N x_{scaled} = \frac{\Sigma I(x_i
将原始取值变换为该取值在全局取值中的百分位取值;
缩放比前面几种更稳定, 不用特殊处理异常值; 但只保留了排序信息, 去除了具体的数值信息;
特征离散化
将一个数值特征根据取值映射到多个离散值上, 最常用的是 One-Hot 编码技术;
离散化的目的: 引入更多的非线性因素, 使模型具有更强的拟合能力;
最核心的问题: 如何决定离散化的映射区间:
离散化到多少个区间
经验值;
如何决定离散化的分界点
组合特征的使用
能够引入非组合特征无法描述的信息;
需要注意问题:
特征稀疏性处理
某个特征只能覆盖少量样本的情况;
出现原因:
关注特征的显著性和置信区间, 与特征对应的样本量有直接关系;
好特征的特点:
特征的高纬度, 带来两个问题:
解决方法:
借助正则化等训练技术消除一些无用的特征, 减少整体特征量;
降维处理
基于业务的降维, 例如聚合类
缺点:
基于算法的降维
处理位置偏差(position bias)
点击率, 转化率等特征容易受影响;
常用做法: 计算出每个位置 i 上的平均点击率 c t r i ctr_i ctri, 在统计点击数时, 将原本会被计算为 1 的每次点击统计为 1 / c t r i 1/ctr_i 1/ctri, 再计算对应的点击率;
对展现位置优越的物品进行惩罚, 对位置不好的物品进行补偿;
特征效果查看
在模型训练完成之后进行特征效果查看, 目的有三:
前向神经网络, 多层感知机(Multi Layer Perceptron, MLP), 重要点在于表征学习和特征降维, 可以提升模型的泛化能力;
特征系统要能够同时服务于探索开发, 例行训练和线上预测;
解决特征和样本的时间对齐问题;
解决方法:
Netflix 特征系统的时间机器:
样本是通过指定上下文生成, 使用**分层抽样(stratified sampling)**保证样本具有代表性;
DeLorean 模块: 根据配置信息自动生成所需要的特征;
需要提供:
共享特征编码器, 该编码器在离线开发和在线预测中共享;
搞清楚当前整个系统中投入产出比最高的事情;
第一版系统务必要快速且有效;
考虑系统的预期承载能力和性能要求;
系统上线后单位时间内需要处理的请求数; 实时处理的性能要求在100ms一下;
评估模型可解释性的重要性;
预测过程和原理可否向非专业人士用通俗语言进行解释;
评估可用的训练数据量和可承载的特征量;
训练工具选择:
准确率(precision), 在召回的文档中应该召回的文档占到的比例;
召回率(recall), 召回的相关文档占全部相关文档的比例;
F值, 准确率和召回率的一个权衡融合;
AUC(Area Under Curve), ROC 曲线下面积;
A U C = ∫ 0 1 P ( f ( x + ) > c ) d P ( f ( x − ) > c ) AUC = \int^1_0 P(f(x^+)>c)dP(f(x^-)>c) AUC=∫01P(f(x+)>c)dP(f(x−)>c)
离散公式:
A U C = ∑ x i ∈ x + r a n k x i − M × ( M + 1 ) 2 M × N AUC = \frac{\sum_{x_i \in {x^+}} rank_{x_i} - \frac{M \times (M+1)}{2}}{M \times N} AUC=M×N∑xi∈x+rankxi−2M×(M+1)
NE(Normalized Entropy)
N E = − 1 N ∑ i = 1 N ( ( 1 + y i ) × l o g ( p i ) + ( 1 − y i ) × l o g ( 1 − p i ) ) − ( p × l o g ( p ) + ( 1 − p ) × l o g ( 1 − p ) ) NE = \frac{-\frac{1}{N}\sum_{i=1}^{N}((1+y_i) \times log(p_i) + (1-y_i) \times log(1-p_i))}{-(p \times log(p) + (1-p) \times log(1-p))} NE=−(p×log(p)+(1−p)×log(1−p))−N1∑i=1N((1+yi)×log(pi)+(1−yi)×log(1−pi))
校准度(Calibration)
衡量模型预测值与真实值之间在整体数值规模上的差异;
C a l i b r a t i o n = 1 N × ∑ p ( x i ) S a m p l e C T R Calibration = \frac{\frac{1}{N} \times \sum p(x_i)}{SampleCTR} Calibration=SampleCTRN1×∑p(xi)