广告点击率模型中,LR, GBDT+LR, FM, DNN等模型的优点和缺点?实际效果如何?

作者:屈伟
链接:https://www.zhihu.com/question/62109451/answer/196385050
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

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. 神经网络对外宣传效果会好很多,虽然大部分时间也没什么必要搞神经网络

https://www.zhihu.com/question/62109451

 

你可能感兴趣的:(推荐)