各个ctr算法的⽐较
什么是点击率预估?
ctr的主要任务是预测⽤户点击某个⼴告的概率,⼀般是⼀个⼆分类问题,通常需要⾯对海量的样本和特征,所以算法的效率和性能都⽐较关键。
评估指标是什么?
以kaggle上的⼀个⽐赛为例(),该⽐赛的任务是给定 display_id和ad_id,判断⽤户点击这个ad_id的概率(display_id应该是与⽤户相关的),该任务采⽤的评估指标是MAP@12(mean average precision),具体的公式如下所⽰:
其中|U|是总的display_id的数⽬,|n|是预测的ad_id的数⽬,k是cutoff,p(1)表⽰取每个display_id⾥得分最⾼的ad_id看准确率,所以p(k)就表⽰取每个display_id中概率最⾼的前k个ad_id作为候选,判断其中有没有⽤户真实点击的ad_id,并计算准确率。
常⽤算法⽐较:
1. lr
优点:简单,⾼效
缺点:线性模型,⽆法⾃动处理特征间的交叉关系,需要⼿动做特征⼯程
正则化其实是破坏最优化2. fm
在lr的基础上加⼊了⾃动对特征间的交叉关系建模的⼆阶特征,避免了⼿动特征⼯程的繁琐,每个特征都需要学习⼀个k的隐空间向量,特征两两之间的交叉项系数等于对应特征隐空间向量的内积。
3. ffm
由于ctr预估中的特征通常都是离散的,所以通常需要对特征做one-hot编码,所以可以对one-hot的编码特征进⾏分组(分为多个field),由同⼀个原始特征编码出来的one-hot特征属于同⼀个field。假设有k个field,之前在fm中每个特征都只需要学习⼀个隐空间向量,这就意味着这个特征在与其他不同field特征相交叉时⽤的是同⼀个隐空间向量进⾏内积。ffm的做法是对每个特征都学习k个隐空间向量,这样每个特征在与其他各个不同field的特征交叉时能⾃适应得学习到最优的隐空间向量,ffm的参数明显⽐fm 多,所以ffm模型的表达能⼒⽐fm强。
4. ftrl
其实ftrl本质上与上述的lr,fm和ffm并不在⼀个层级上,fm和ffm都是⼀种建模算法,⽽ftrl本质上是⼀种优化算法,ftrl也可以⽤来优化fm和ffm。不过最常⽤的是⽤ftrl来优化lr 来获得稀疏解。在各类机器学习训练任务中,为了避免过拟合,通常会在⽬标函数上增加L2范数的正则项以提⾼泛化性,另⼀种常⽤的正则项是L1范数,其能起到特征选择的作⽤。对于添加了L2范数的损失函数,⼀般的sgd优化算法就能较好得优化,对于L1范数,虽然其也是凸函数,但是由于L1范数在零点不可导,sgd在优化时通常会⽤次梯度代替梯度。但是使⽤次梯度在优化很难获得稀疏解(为什么?),⽽这催⽣了⼀些针对求解稀疏解的在线最优化算法。
如:截断梯度法,FOBOS算法,RDA算法以及FTRL算法。它们本质上都是优化算法,可以作⽤于⼤部分使⽤了稀疏正则项的⽬标函数中。这类算法主要适⽤的场景时⾼维⾼数据量的场景,解的稀疏性⼀⽅⾯起到了特征选择的作⽤,另⼀⽅⾯能够加速预测时间。
ftrl算法是基于多个算法发展⽽来,我从头捋⼀遍(参考冯扬的《在线最优化求解》,具体细节可以看那篇⽂章):
1. L1正则化法
梯度下降时对L1范数⽤的是次梯度进⾏更新,⽽这会导致求得的系数没有稀疏性。
2. 简单截断法
每隔K步(t mod K = 0 )都对梯度进⾏⼀次截断,其他步(t mod K !=0)按照⼀般的梯度下降更新参数(不考虑L1范数)
3. 截断梯度法(TG)
截断梯度法与简单截断法⽐较像,也是每隔K步进⾏截断,其他步是常规更新参数,与简单截断法不同的是,TG采⽤的截断函数不同
4. FOBOS,RDA和FTRL算法
这⾥这要对⽐这⼏种算法的优缺点:
总结⼀下就是:FOBOS的优点是限制了W的变化不能离已迭代得到的解太远,缺点是产⽣的解相⽐RDA求得的解稀疏性不⾜,且其每次判断是否对每个维度进⾏截断时只考虑了当次迭代该维度的梯度变化,⽽RDA则考虑了过去所有迭代该维度梯度变化的平均值,避免了由于当此迭代该维度训练不⾜引起的梯度截断。RDA的缺
点是只限制了W的变化不能离0点太远,⽽FTRL则结合了FOBOS和RDA的优点。
5. ftrl中,每个维度的学习率是单独考虑的(per-coordinate learning rates)
5. DeepFM
说到deepfm,就要说到神经⽹络相关算法在ctr⽅⾯的进展。为了便于理解,我们从最开始的矩阵分解算法说起
(⼀个deepfm讲得⽐较好的博客:)
6. Deep Interest Network
7. Behavior Sequence Transformer for E-commerce
Recommendation in Alibaba
8. Deep Session Interest Network for Click-Through Rate Prediction
算法性能⽐较:
只⽤了 movielen100k 中的u1.base 作为训练和验证,采⽤5-fold交叉验证⽅法评估各个算法在验证集的上mse。u1.base 涉及⽤户 900+,涉及电影 1600+,数据量为8w。没有经过特别复杂的调参⼯作
算法validation mse
fm 1.18
ffm 1.20
ftrl 1.14
deepfm 1.56
xgboost1.22
lightgbm1.23
分析:
fm 和 ffm在只有两个field的时候效果理论上是⼀致的,这⾥的结果来看也基本⼀致。⽐较令⼈惊讶的是ftrl竟然是效果最好的,⽐⼆阶的算法效果都好,可能是因为ftrl针对每个特征都会单独学习⼀个学习率。
总结:
ctr算法可以分类两⼤类,⼀类⾛的是传统机器学习算法的路线,另⼀类是⾛的神经⽹络的路径(因为不够深,暂且不叫他深度学习,哈哈)。传统算法是主流也⾮常有效:lr/gbdt/fm/ffm/
神经⽹络也在发展中:wide&deep/deepfm
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论