广告点击率常用模型的优点和缺点

 

LR

优点:

1. 是一个很好的baseline,效果不错,当然因为效果不错,所以后续的版本想超过它,真的还是很难的。

2. 实现简单,有开源的工具可以直接用来训练,在线的代码也写起来也比较容易

 

缺点:

1. 因为是线性模型,所以有选择交叉特征的工作,这部分工作消耗大量的精力,但往往没什么效果。一般都是wrapper方法选择,每轮可能都要进行小时级的运算,理论上要进行2^n轮(n是特征数),但因为离线分析的指标和线上效果不一定是强相关的,所以分析起来更痛苦。更令人崩溃的是点击率预估的数据变化是比较大的,离线选出来的特征,参数都不一定适用于未来。

2. 因为广告位对点击率有着决定性的影响,所以几乎所有的特征都会交叉广告位,这样广告位间的信息是无法共享的,比如广告A在广告位x上点击率很高,但如果广告A在广告位y上没有曝光过,那对广告位y来讲,广告A是一个全新的广告。

3. 实践中交叉特征还会导致模型非常大,我们也使用了FTRL,但实践中它并不能非常有效的产生稀疏模型,如果模型非常大,会导致同步模型变慢,一样会严重影响效果。

4. 在线预测时,因为大量的特征都要与广告ID交叉,所以在线拼装特征的成本很高,性能可能也会成为问题。

 

GBDT+LR

GBDT+LR真有人实践中搞成功了吗?我好怀疑,听过两个分享都是没有成功的例子。我没信心试,欢迎打脸。

优点

它是一个很有意思的想法

缺点

1. 离线处理和在线处理都复杂。不同于比赛,在实践中ID类特征还是非常重要的,广告ID可能就有几十万个,深度怎么控制呢?把那么多棵树丢到线上去,然后遍历,拼装特征,想想都难搞。

2. 要调的参数很多,人生苦短,为什么要搞这么多参数折磨自己。另外再重复一遍:在点击率预估这个问题上,离线效果好往往只能说是模型基本没问题,不能说上线后就效果好。

3. GDBT+LR本身是想解决特征选择的问题,但现实中也没那么多特征可以用吧?另外没发现点击率预估中如果特征本身没问题,加上去一般都不会降效果吗?

4. 性能问题怎么解决呢?如果GBDT+LR是不是只能batch方式训练了?如果batch更新速度比FTRL会慢不少,效果又怎么保证呢?想不通。

FM

优点

1. 它可以自动学习两个特征间的关系,可以减少一部分的交叉特征选择工作,而且参数也不算多,调起来不会太痛苦。

2. 因为不需要输入那么多的交叉特征,所以产生的模型相对LR的模型会小很多。

3. 在线计算时减小了交叉特征的拼装,在线计算的速度基本和LR持平(虽然两个向量的点积的计算看上去会导致计算量翻了几倍)。

缺点

1. 无法学习三个及以上的特征间的关系,所以交叉特征选择的工作仍然无法避免。

2. 虽然从原理上好像FM学习能力更强,但在实践中超过LR的效果也要凭实力(运气?)

3. 从功利的角度看,FM是非常不值得尝试的,它的工作量没比神经网络小多少,在这个不说深度学习都好像不懂机器的环境下,用FM算法,所能得到的资源,支持和收获,远比不上神经网络,所以建议做完LR后,就直接换神经网络吧,别搞FM了。

神经网络

优点

1. 可以直接输入原始的特征,减少了交叉特征的选择工作,并且可以支持大量的特征输入,相比因为LR要考虑交叉特征,所以交叉特征比较多的时候,模型会非常大,可能会有一些工程问题。

2. 如果输入的是原始特征,结构是用embedding layer + fc layer,产生的模型非常小,远小于LR。

3. 在线计算因为使用是大量的用户特征,所以一次请求中,用户特片和第一层隐层之间的计算只用计算一次(这是运算量最大的一部分),只有广告维度的特征需要计算多次(以及第一层隐层和之后的隐层也要多次计算),而广告维度的embedding向量和第一层隐层的计算可以预先算好,并且在线完全没有交叉特征的拼装工作,所以在线计算速度还好,实测比LR速度竟然还快了。

4. 神经网络对外宣传效果会好很多,虽然大部分时间也没什么必要搞神经网络。


 

首先,gbdt具有非常好的非线性拟合能力,以及对超参数的鲁棒性,因此在各种比赛中大量应用,堪称王者。比较适用的特征形式是连续值特征,这样的特征包含了足够的信息量用以树上各个分裂点的取值。但是,他也有明显的问题,对于线上使用的话存在一些不足。由于依赖统计特征,特征的准备需要积累一定周期才有足够置信度,故特征的实时性不太好。第二,特征准备环节多,对于线上效果迭代不利。第三,模型计算复杂度好,不能吞吐大规模样本。第四,非常重要!抛开数据质量,单纯从模型本身讲,还是由于计算代价高导致特征数很快就会达到瓶颈,从而导致效果达到瓶颈。另外,如果实在想用的话,推荐xgboost,他可以吞吐稀疏数据,计算效率也做了优化,还可以使用spark上的包方便并行计算。

再说lr。线性模型,但是在业界广泛使用。为什么呢?虽然模型本身表达能力差,但是可以通过特征工程不断减少问题的非线性结构。又由于模型计算复杂度低,可以吞吐超大规模的特征空间和样本集合,这样就为效果优化打开了空间。同时,他可以学习id化特征,从而减少了特征工程的环节,可以提高特征的实时性。

把gbdt和lr结合确实是一个很美丽的故事。大家都在说怎么怎么好,但实际落地的真的少见。当然,也许是我孤陋寡闻,如果有请给大家科普下。首先通过经年累月的优化,很多应用其实人工特征工程已经做的不错了,再把gbdt的encoding特征加进来可以表达能力有不小的overlap。两者的结合就是一种组合模型的stacking,这种没有反馈的组合对于效果的提升从理论上说不会比包含backproportion更合理。从线上系统考虑,两个模型的stacking也会加重复杂度和增加latency。

fm是一种lr思路的扩展。在一阶拟合的基础上加入二阶拟合,可以自动的学习任意两维特征的交叉。而且,交叉是以embedding向量的形式表达。跟lr一样,他可以吞吐超大规模的稀疏特征空间的样本集合。这种形式可以比较好的提高模型的表达能力,把性能和学习非线性结构的能力结合在一起,有不少实际场景中有一些应用。

dnn是当下最火的方法。本质上讲,该方法是通过前面多层的隐藏网络学习抽象特征,在最后输出层使用上述抽象得到的特征完成最终的学习任务。这种学习到的特征可以较好的降低问题的非线性程度。它的强大在于bp可以将目标函数的误差回传,逐层向输入层的方向传播从而矫正网络参数,经过多次迭代,网络参数会被修正的很好,这是多个模型简单上下的stacking所不能比的。同时,对传统的网络输入层进行改造,可适配大规模id化稀疏特征,将特征工程的难度大大降低,所以百度凤巢已经解散了主模型的特征工程team。自己把自己的工作给close了也是蛮有意思,哈哈。由于数据驱动的模式学习到了人工特征工程难以学到的隐含特征,所以模型的表达能力会有明显提升,线上效果会碾压一般的模型。但是,由于模型学习的复杂性,很难直观的解释特征与效果的关系。另外,网络结构,超参数的调参也是个技术与艺术的结合。简单点说,回报是跟付出正相关的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值