理解特征工程

1. 特征工程的目的:

特征工程就是将原始数据空间映射到新的特征向量空间,使得在新的特征空间中,模型能够更好地学习数据中的规律。因此,特征提取就是对原始数据进行处理与变换的过程。常见的原始数据类型有数值型、离散型,还有文本、图像、视频等。如果将这些数据作为一个整体来看待的话,把用户、视频、作者看作节点,用户与视频、作者的交互看作边构建出的复杂网络也是我们的原始数据。

2. 特征的来源

在微视场景下,视频的播放时长、播放完整度、点赞、转发、分享、评论等多种互动行为都是推荐模型的训练目标,根据模型所要学习的目标和业务逻辑,我们需要考虑数据中有哪些可能相关的信息,从现有数据中挖掘出对模型预测有用的特征。比如在微视排序中,用户的兴趣,在 App 上的播放、互动等行为以及视频的类别、标签、热度等都是强相关的因素。在确定了哪些因素可能与预测目标相关后,我们需要将此信息抽取成特征,下面会对不同特征的处理方式做具体介绍。

3. 特征的种类与处理方法

(虽然种类很多,但是最后多转换成数值类型)

3.1数值特征

(例如用户对不同类目下视频的兴趣分,或者是计数,例如一个视频被播放了多少次、被点赞、转发以及评论了多少次等)
虽然一些机器学习模型可以直接输入数值类型的数据,但是通常情况下,对数值型数据进行适当的变换和处理能带来更优的效果。
(1) 数值分桶
场景:当数值特征跨越不同的数量级的时候,模型可能会只对大的特征值敏感,这种情况可以考虑分桶操作。比如视频一周内被播放次数应该是一个有用的特征,因为播放次数跟视频的热度有很强的相关性,但是如果不同视频的播放次数跨越不同的数量级,则很难发挥想要的作用。例如 LR 模型,模型往往只对比较大的特征值敏感。
作用:分桶操作可以看作是对数值变量的离散化,之后通过二值化进行 one-hot 编码。分桶后得到的稀疏向量,内积乘法运算速度更快,计算结果更方便存储;对异常数据有很强的鲁棒性。
注意:需要注意的是:1)要使得桶内的属性取值变化对样本标签的影响基本在一个不大的范围,即不能出现单个分桶的内部,样本标签输出变化很大的情况;2)使每个桶内都有足够的样本,如果桶内样本太少,则随机性太大,不具有统计意义上的说服力;3)每个桶内的样本尽量分布均匀。
(2) 数值截断
对于连续型数值特征,有时精度太高可能只是噪声,并不具备太多的信息,也使得特征维度急剧上升。因此可以保留一定的精度,之后当作类别特征进行处理。对于长尾的数据,可以先进行对数缩放,再进行精度截断,之后可以当做类别变量做二值化处理,这也是我们实际应用中的做法。
(3) 缺失值处理
实际问题中经常会遇到特征缺失的情形,对于特征缺失,可以选择补一个值,例如使用均值,中位数,众数等进行替代,需要视具体情况进行选择;也可直接忽略,即将缺失作为一种信息进行编码输入模型让其进行学习,比如用户性别缺失,可以直接将未知作为一种类别进行处理;还可以使用模型预测缺失值,当然也有一些模型可以直接处理缺失值特征,比如 XGBoost。
(4) 特征交叉
场景:有时候无法发现更多有用的原始特征,可以从已有特征中构造出新特征,更细粒度的描述。特征交叉可以表示特征之间的相互作用,有助于表示非线性关系,增强对问题的刻画,缺点是维度快速增长,需要更多的训练样本。提升模型表达能力常见的关联方式有内积、笛卡尔积、哈达玛积等。
交叉的对象:
日常工作场景中的特征往往都是以用户和其对应的属性作为出发点,然后和物品对应的属性特征或者上下文特征进行交叉组合,比如:
用户与类别特征组合(eg:电商平台中,用户在不同类别下的点击次数,可以简单衡量用户的类别偏好)
用户不同年龄档与类别特征组合(eg:新闻平台中,少年用户在娱乐新闻下的点击次数会比较高,青年用户在社会新闻下的点击次数会比较高)
用户身份与时间特征组合(eg:学生周六周日、节假日,在某娱乐APP内的行为会比较丰富,上班族早晚高峰,在某娱乐APP内的行为会比较丰富)
用户的价格偏好与物品的价格级别特征组合(eg:用户A偏好的价格级别为中,物品的价格级别为高,那么组合特征就是0,即两者不匹配)
(5) 标准化与缩放
数据的标准化或者归一化是将数据按比例缩放,将其转化为无量纲的纯数值,使得不同单位或量级的特征之间具有可比性,对于利用梯度下降来训练模型参数的算法,有助于提升模型的收敛速度。一般用01标准化,z-score标准化。
(6) 数据平滑
常用的行为次数与曝光次数比值类的特征(如CTR),由于数据的稀疏性,这种计算方式得到的统计量通常具有较大的偏差,需要做平滑处理,比如广告点击率常用的贝叶斯平滑技术。而在我们推荐场景中,也会用到很多统计类特征、比率特征。如果直接使用,比如由于不同 item 的下发量是不同的,这会让推荐偏向热门的类目,使得越推越窄,无法发现用户的个体差异,也不利于多样性的探索。我们可以把曝光量进行分段,同一个曝光量级的指标进行比较,也可以用该 item 所属类目统计量的平均值进行平滑处理。对于离群值较多的数据,我们会使用更加健壮的处理方法,比如使用中位数而不是均值,基于分位数而不是方差。而在短视频业务上较短或较长的视频在播放完成度上存在天然的差距,我们按视频本身长度离散,观看时长做分位数处理,同时做威尔逊置信区间平滑,使得各视频时长段播放完成度相对可比,避免出现打分因视频长度严重倾斜的情况。以及短视频 app 的投稿数量大,对于长尾的视频和类目都是需要做平滑处理的。常用贝叶斯平滑
(7) bias 消除
微视会用到一些不同时间窗口以及实时的统计特征,比如不同类目或者不同时长区间下的完播率、平均播放时长等,考虑到冷热门类目以及长短视频在统计量上本身存在明显的差异,平滑之后我们会用统计量均值进行消偏,这也相当于有一个对热门视频降权,对长视频提权的作用。

3.2类别特征

(类别特征可以是标签、属性、类型 ,比如在微视应用中,视频的 id、作者、类别、标签、清晰度、质量、topic、bgm 曲风与速度等视频属性特征。)
(1)onehot独热编码。
one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程。
独热编码通常用于处理类别间不具有大小关系的特征,每个特征取值对应一维特征,能够处理缺失值,更合理地计算欧式距离,在一定程度上也起到了扩充特征的作用。但是当类别的数量很多时,特征空间会变得非常大。在这种情况下,一般可以用 PCA 等方法进行降维。
优点:红字
缺点:造成维度高,过于稀疏。无法体现一些关联度高的特征数据
(2)hash散列编码
对于有些取值特别多的类别特征(用户id),使用独热编码得到的特征矩阵非常稀疏,再加上如果还有笛卡尔积等构造的组合特征,会使得特征维度爆炸式增长。特征数量多的问题自古有之,目前也已经有很多用于降维的方法。比如聚类、PCA 等都是常用的降维方法。但这类方法在特征量和样本量很多的时候本身就计算量很大,所以对大问题也基本无能为力。特征哈希就是一种简单的降维方法,在微视使用也较多,特征哈希法的目标就是是把原始的高维特征向量压缩成较低维特征向量,且尽量不损失原始特征的表达能力,其优势在于实现简单,所需额外计算量小;降低特征维度,从而加速算法训练与预测的时间,以及降低内存消耗;但代价是通过哈希转换后学习到的模型变得很难检验,我们很难对训练出的模型参数做出合理解释。特征哈希法的另一个问题是它会把多个原始特征哈希到相同的位置上,出现哈希 collision 现象,但实际实验表明这种 collision 对算法的精度影响很小。
(3)类别特征之间交叉组合
比如用户性别、操作系统 cross 得到用户分群特征,视频类别与标签之间的组合特征。在实际应用中,类别特征之间的组合方式千变万化,这类特征一般从业务逻辑的角度出发进行构造。相比类别特征之间的笛卡尔积操作,基于分组统计的特征组合方式计算更加复杂,需要对业务数据有较好的理解。
(4)类别特征和数值特征之间交叉组合
这类特征通常是在类别特征某个具体类别中计算一些统计量。例如用户对不同类目视频的完播率、平均播放时长,不同用户群体的互动指标等利用数值特征对类别特征进行处理。

例如我们构造了视频一二级类目的曝光次数 cross 快划次数的组合特征,这个可以有很直观的解释,比如分析某个用户的样本发现类似王者荣耀_31_31 的组合,即我们的推荐系统给这个用户曝光了 31 个王者荣耀的视频,但是每个都快速划过了,如果还是继续推,这个用户体验将会是极度糟糕的,而这个特征会很大程度的解决这个问题,使得尽可能的给这个用户曝光感兴趣的类目。这个特征可以进一步细化为类目曝光次数 cross 一些统计量,比如完播次数、互动次数等,因为没有快划可能是用户愿意尝试去看,完播可能是喜欢这个视频内容,而互动比如说转发或者点赞,可以看做是用户表现出了更为强烈的兴趣。

比如为了提升视频的清晰度,我们给视频清晰等级打标签,但是发现直接加入清晰度属性特征后,清晰视频分布和线上指标并没有改善。通过对终端屏幕匹配情况,视频相比于屏幕过度拉伸比例的分析,我们发现约有十分之一的播放体验表现出过度拉伸,对于部分大屏幕用户,过度拉伸比例会更高,于是我们进一步尝试了视频清晰度分别与用户手机屏幕拉伸度和手机型号的笛卡尔积特征,清晰视频播放占比有了较为明显的提升,这对用户体验起到了一定的优化作用。

3.3Embedding 特征

为了解决one-hot的数据维度大,训练成本高,且无法体现节点与节点之间的关系。使距离相近的向量对应的物体有相近的含义,比如 Embedding(复仇者联盟)和Embedding(钢铁侠)之间的距离就会很接近,但 Embedding(复仇者联盟)和Embedding(乱世佳人)的距离就会远一些。除此之外Embedding甚至还具有数学运算的关系,比如Embedding(马德里)-Embedding(西班牙)+Embedding(法国)≈Embedding(巴黎)
(1) 视频embedding
视频 embedding 分为基于内容的 embedding 和基于行为的 embedding,前者使用视频的标题、封面、图像,音频等视频自身属性信息,通过 nlp、图像视觉等技术获得 embedding,后者是基于用户与视频的交互行为数据获得,比如我们发现用户在一个 session 中,前后点击的视频存在一定的相似性,通常会表现出对某类型视频的兴趣偏好,可能是同个风格类别,或者是相似的话题人物等。因此我们将一段时间内用户点击的视频 id 序列作为训练数据,使用 skip-gram 模型学习视频的 embedding 特征。由于用户点击行为具有上下文承接关系,因此得到的 embedding 特征有很好的聚类效果,使得在特征空间中,同类目的视频聚集在一起,相似类目的视频在空间中距离相近。在微视推荐系统里,视频 embedding 不仅可以作为排序特征,利用用户最近点击过视频的平均 embedding 进行召回,也是带来了效果提升。
(2)user embedding
想让 embedding 表达什么,主要在于选择哪一种方式构建语料,不同的用户行为序列,表达的兴趣也不同,比如快速划过行为、完播行为,点赞转发行为等表达的兴趣以及程度也都是不同的。因此视频 embedding 向量最终的作用,是不同 item 在用户兴趣空间中的位置表达。
简单一点的做法也可以将一段时间内用户点击过的视频的平均 embedding 作为该用户的 embedding 特征,当然这里的“平均”可以是简单的算术平均,也可以是根据视频的热度和时间属性等进行加权平均或者尝试用 RNN 替换掉平均操作。同时将时间跨度取长一点,可以表达用户的长期兴趣;取短一点,可以用于刻画用户的短期兴趣,当然用户覆盖率也会随之降低。比如用户最近一周内主要点击观看的都是关于“猫”的视频,那该用户 embedding 特征,就会跟“猫”的向量很相近。我们也尝试将用户点赞或者分享转发过的视频序列作为训练数据,为用户互动过的视频提权。这里需要注意的是,有时单个用户行为序列太稀疏了,无法直接训练,一般可以先对用户做聚类再训练。
(2) 作者embedding
可以取作者近一个月内发布视频的平均 embedding,作为该作者的 embedding 特征。这样做的出发点是,如果两个作者发布的视频相似,那么这两个作者的 embedding 向量也应该是相近的。假设此时某个用户喜欢作者 A,那么我们可以试着把与作者 A 相似的作者 B 发布的视频推荐给该用户。

3.4 context 特征

context 特征通常是客户端带的信息,在用户授权的前提下可以直接获取,比如请求时间、用户手机品牌、手机型号、操作系统、当前网络状态(3g/4g/wifi)、用户渠道等实时属性特征以及之间的 cross 特征。

3.5 session 特征

session 特征一般是基于用户最近的行为流水,常见的 session 划分方法有以下几种:

固定行为数窗口,例如最近 100 条行为中分视频类别的完播个数、快速划过个数;
固定时间窗口,例如最近 3 天里有过正向行为的 item id 或者一些统计量;
连续行为窗口,例如用户 1 次打开 app 到关闭 app 期间的播放互动行为。
如上几种 session 定义的方法没有优劣之分,一般会结合具体业务场景做混合定义。在获取到用户的 session 数据后,可以直接将 session 里对应的 item id 序列作为特征,或者是 session 内的类别统计数据,也可以将预训练好的 item embedding 构造成 session 特征。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值