【推荐算法】推荐系统中的特征工程(一):特征处理

本文详细介绍推荐系统中各类特征的处理技巧,包括数值特征的分桶、截断、标准化,类别特征的处理,序列特征的时序分析与编码,以及交叉特征的生成。通过实例和策略讨论,提升特征工程的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

数据为王的当下,特征高效处理的重要性不言而喻,俗话说数据和特征决定了机器学习算法的上限,而模型、算法的选择和优化只是在不断逼近这个上限,因此,在对样本进行合理采样和处理之后,特征工程就显得尤为重要了。
本文主要分享推荐系统中常用的特征处理方法和技巧,不立足于某一个具象的推荐场景,而是从经验出发,介绍整体的方法论,内容涉及不少个人观点,如有疑问可评论探讨~
这篇博客介绍不同特征的基本处理方法,根据特征类型的不同,进行划分,后续会更新特征提取、特征编码、特征重要度评估等。
目前,常见的特征类型有:数值特征、类别特征、序列特征、k-v特征、embedding特征、交叉特征等

数值特征

数值特征最为常见,如一些统计类特征:ctr、click_num等,不同的业务场景,数值特征量不同,数值特征从特征获得方式上面又可以分成两类:一类是基础的统计特征,一类是根据业务场景,按照一定规则计算产出的复合特征。通常情况下,复合特征包含的信息会更多,更有效。下面对数值特征的常见处理方式进行总结。

特征分桶

针对于连续型特征,进行分桶操作简单有效,像点击量、点赞量、收藏量这类统计特征,直接拿去编码会造成编码空间的极大浪费,于是先进行分桶,同一个桶内的特征共用一个编码索引,既能够降低编码空间,又可以实现特征的高效处理。如此操作,将连续型特征映射到N个桶内,直接进行one-hot编码,简单方便。

既然需要将特征分桶,分桶的规则就起到了决定性作用——即分桶阈值的确定。这玩意儿说简单确实简单,但也比较容易被忽略,最近工作中就遇到了这个问题,之前的同事的分桶阈值设置的极其不合理,导致一些特征全部集中在几个桶里,这样会大大降低特征的区分度,影响模型效果。

其实说到这,最简单的一种处理方式已经出来了,就是先对数据进行基本的统计,然后直接将数据等分——等距分桶。但这种方式需要注意两个点:一是这个特征的数值分布是否平均,如果长尾严重,显然不合理;二十特征异常值对分桶的影响是否巨大,比如点击量中出现某个断层的最大值,会直接将其他的特征挤压到前面的桶里,后面的桶则很稀疏。

上述方式不推荐,常见且简单的方式是先对数据的等分点进行统计,然后根据每个特征等分点的情况大致确定分桶阈值——等频分桶,这样可以基本保证以下两个原则:
1.每个桶内的特征量级差不多
2.每个桶内的特征具有一定的区分度

细想一下,似乎还有更合理的处理方式——模型分桶。使用像聚类、动态规划这些算法获得特征分桶阈值,但这种方式明显有点小题大做了,毕竟整个特征池里面数值特征很多,按照第二种方式进行大致的确定就不错,当然还是要根据业务场景选择那种处理方式,具体情况具体分析。

特征截断

上面提到,特征中可能会出现异常值,这些异常值可能直接影响特征处理之后的结果,这种情况下,使用特征截断,移除异常值,可以使特征的准确性更高。

截断这里涉及到异常值检测,网上相关的资源不少,可以自行查找。

缺失值处理

这种情况也很常见,尤其是在推荐系统中,数据本身的稀疏性就会带来很多缺失值。

对于缺失值,处理方式有两种:一是进行补值,使用均值、中位数进行补值;二是直接使用0占位,因为这类值最后都是映射到编码空间的一个索引上,没有值直接置0.

标准化

原始特征空间维度较大,使用标准化操作之后对值空间进行压缩,常见的标准化方式有以下几种:
最大最小标准化
也叫0-1标准化,即将特征值映射到0~1之间,处理规则如下:
x n e w = x − m i n m a x − m i n (1) x_{new}=\frac{x-min}{max-min} \tag{1} xnew=maxminxmin(1)
z-score标准化
经过处理的数据符合标准的正态分布,处理规则如下:
x n e w = x − μ σ (2) x_{new}=\frac{x-\mu}{\sigma} \tag{2} xnew=σxμ(2)
其中, μ \mu μ 为样本数据的均值, σ \sigma σ 为样本数据的标准差

数据平滑

对于比值型特征,小分母计算得到的特征值更不稳定,置信度低,这时候需要将数据进行平滑处理,使其更接近真实值。

wilson平滑
这个是本人最常用的平滑方式。比如对于ctr特征,有以下三个case:
case1:曝光100,点击3
case2:曝光10000,点击300
case3:曝光100000,点击3000
很明显,case3计算得到的ctr会更接近真实值,因为曝光基数足够大;而case1计算的数值最不稳定,多一个点击,ctr就变成了4%,因此,需要对case1和case2进行平滑操作。

使用wilson平滑就可以对这个数值进行修正,其计算公式如下:
p ^ + z 2 2 n 1 + z 2 n ± z 1 + z 2 n p ^ ( 1 − p ^ ) n + z 2 4 n 2 (3) \frac{\hat{p}+\frac{z^2}{2n}}{1+\frac{z^2}{n}} \pm \frac{z}{1+\frac{z^2}{n}} \sqrt{\frac{\hat{p}(1-\hat{p})}{n} + \frac{z^2}{4n^2}} \tag{3} 1+nz2p^+2nz2±1+nz2znp^(1p^)+4n2z2 (3)
其中, p p p 为概率,在这里指点击的概率,也就是ctr, n n n 为样本总数; z z z 表示对应某个置信水平的z统计量。例如 z 取 1.96,就有 95% 的置信度。

贝叶斯平滑
r = C + α I + α + β (4) r=\frac{C+\alpha}{I+\alpha+\beta} \tag{4} r=I+α+βC+α(4)

类别特征

常见的类别特征有id特征、内容标签、性别、用户等级、操作系统等。

类别特征处理时候需要注意,类别本身的划分是否符合业务场景和业务逻辑,如果本身的划分就不带有区分度或者区分度很低,那这个特征的重要性也会随之降低。

类别特征相对会比较重要些,像用户id、内容标签特征都属于强相关特征,在某些场景,性别影响也很大

序列特征

如点击序列、浏览序列、转化序列等。这类特征能够反应用户的兴趣偏好,对于模型提供个性化推荐尤为重要。常见的序列特征处理方式有以下几种:

时序特征
按照时间序列对数据进行去重和排序,之后就可以直接丢给一些序列建模模型,像din等,简单方便又能提取到用户的兴趣习惯。

multi-hot编码
对于一些模型,处理序列特征会麻烦些,这是将序列特征进行multi-hot编码,相当于损失了行为顺序,但依旧有效

k-v特征

这类特征数据经过复杂逻辑计算得到的复合特征,如内容标签偏好等,在特征所属维度上,对于不同的key,都会有对应的value

embedding特征

万物皆可embedding,目前主流的方法也很多,有不少现成的api可以调用。常见的embedding可以分为item类和user类,具体的embedding特征产出之后会陆续整理。
常见的embedding特征处理方式有以下几种:
1.直接作为dense特征和其他特征concat一起,丢给模型训练
2.在模型dense layer之后再concat
3.穿插在模型的各个中间结构中

交叉特征

在FM系列模型出现之前,交叉特征尤为重要,因为当时的主流模型基本上是LR,LR只能对单特征进行处理,不能有效的提取交叉信息,之前总结的【推荐算法】ctr预估模型总结(LR、FM、FFM、NFM、AFM、WDL、DCN、DeepFM、FwFM、FLEN) 文章中有介绍。
目前,在WDL模型中,还需要交叉特征,其他复杂模型可以自动完成高阶交叉信息提取,一般不需要额外人工生产交叉特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值