CTR预估在广告领域是非常重要的一环,主要是计算点击率,很多会使用LR模型,其间因为特征之间存在相互作用,就要进行特征的组合,业界一般用FM和Tree两种系列。
FM(Factorization Machines)
主要是为了解决数据稀疏的情况下,特征怎样组合的问题。
分类变量一般使用one-hot编码,但是就会 造成数据稀疏,使得特征空间变大。
一般是特征两两组合。
Wij求解的思路是通过矩阵分解的方法,为了求解Wij,我们队每一个特征分量xi引入辅助向量Vi=(vi1,vi2,...,vik)Vi=(vi1,vi2,...,vik)
然后用vivTjvivjT对wijwij进行求解
求解<vi,vjvi,vj>,主要采用公式(a+b+c)2−a2−b2−c2(a+b+c)2−a2−b2−c2求出交叉项
设有3个变量(特征)x1 x2 x3,每一个特征的隐变量分别为v1=(1 2 3)、v2=(4 5 6)、v3=(1 2 1),即:
设交叉项所组成的权矩阵W为对称矩阵,之所以设为对称矩阵是因为对称矩阵有可以用向量乘以向量转置替代的性质。
那么
,即
实际上,我们应该考虑的交叉项应该是排除自身组合的项,即对于x1x1、x2x2、x3x3不认为是交叉项,那么真正的交叉项为x1x2、x1x3、x2x1、x2x3、x3x1、x3x2。
去重后,交叉项即x1x2、x1x3、x2x3。这也是公式中1/2出现的原因。
对交叉项有了基本了解后,下面将进行公式的分解,还是以n=3为例,
所以:
上面的例子是对3个特征做的交叉项推导,因此对具有n个特征,FM的交叉项公式就可推广为:
我们还可以进一步分解:
所以FM算法的交叉项最终可展开为
M的复杂度为O(kn2)O(kn2),通过上述等式,FM的二次项化简为只与vi,fvi,f有关的等式。因此,FM可以在线性时间对新样本做出预测,复杂度和LR模型一样,且效果提升不少。
在训练FM是,加入使用SGD来优化模型,训练时各个参数的梯度如下
∑nj=1vj,fxj∑j=1nvj,fxj 只与f有关,只要求出一次所有的f元素,就能够计算出所有vi,fvi,f的梯度,而f是矩阵V中的元素,计算复杂度为O(kn)。当已知∑nj=1vj,fxj∑j=1nvj,fxj时计算每个参数梯度的复杂度是O(1),更新每个参数的复杂度为O(1),因此训练FM模型的复杂度也是O(kn)
SVM和FM的主要区别在于:
1.SVM的二元特征交叉参数是独立的,而FM的二元特征交叉参数是两个k维的向量vi、vj,交叉参数就不是独立的,而是相互影响的。
2.FM可以在原始形式下进行优化学习,而基于kernel的非线性SVM通常需要在对偶形式下进行
3.FM的模型预测是与训练样本独立,而SVM则与部分训练样本有关,即支持向量
FFM(Field-aware Factorization Machine)
在FM的基础上,将同一个field的特征单独进行one-hot,因此在FFM中,每一维特征都会针对其他特征的每个field,分别学习一个隐变量,该隐变量不仅与特征相关,也与field相关。
FFM将问题定义为分类问题,使用的是logistic loss,同时加入正则项
在DSP或者推荐场景中,FFM主要用来评估站内的CTR和CVR,即一个用户对一个商品的潜在点击率和点击后的转化率。
CTR和CVR预估模型都是在线下训练,然后线上预测。两个模型采用的特征大同小异,主要分三类:
用户相关的特征
年龄、性别、职业、兴趣、品类偏好、浏览/购买品类等基本信息,以及用户近期点击量/购买量/消费额等统计信息
商品相关的特征
商品所属品类、销量、价格、评分、历史CTR/CVR等信息
用户-商品匹配特征
浏览/购买品类匹配、浏览/购买商家匹配、兴趣偏好匹配等
FFM默认是进行样本数据的归一化
将源数值型特征的值归一化到 是非常必要的。
省略零值特征
DeepFM(FM和DNN组合)
DeepFM目的是同时学习低阶和高阶的特征交叉,主要由FM和DNN两部分组成,底部共享同样的输入。模型可以表示为:
在第一层隐藏层之前,引入一个嵌入层来完成输入向量压缩到低位稠密向量。
嵌入层的结构如上图所示,有两个有趣的特性:
1) 尽管不同field的输入长度不同,但是embedding之后向量的长度均为k
2) 在FM中得到的隐变量VikVik现在作为嵌入层网络的权重
嵌入层的输出为a(0)=[e1,e2,...,em]a(0)=[e1,e2,...,em],其中eiei是嵌入的第i个filed,m是field的个数,前向过程将嵌入层的输出输入到隐藏层为
其中l是层数,σσ是激活函数,W(l)W(l)是模型的权重,b(l)b(l)是l层的偏置
因此,DNN得预测模型表达为: