廣告點擊率模型中,LR, GBDT+LR, FM, DNN等模型的優點和缺點?實際效果如何?


2017年11月17日 第三次提交

2017年7月11日 第二次提交

2017年7月10日 第一次提交

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. 神經網路對外宣傳效果會好很多,雖然大部分時間也沒什麼必要搞神經網路。


簡單答一波,有時間再展開。

lr,演算法簡單,易並行和工程化。ftrl是其實時化版本,目前各大廠商都有在用。優點都說了,就是簡單,能夠處理超高緯度稀疏問題,能夠做到實時。缺點也是簡單,基本靠人工堆特徵。

GBdt加lr。GBdt對連續特徵劃分能力超強,主要來提取特徵,再加上一些稀疏特徵,補足了lr的不足。優點是把lr中人工構造特徵的大部分工作給做了。缺點,暫時沒有想到比較大的缺點。這裡安利一波lightgbm,效果指標某些場景略好於xgboost,但是計算速度非常的快。

DNN,深度學習,優點是擬合能力強,樣本足夠的情況下一般效果都不會差。缺點是計算複雜,工程化和實時化難度大

FM,相較與lr,能夠補抓交叉特徵。


也來簡單寫下。

我的理解是沒有免費的午餐,lr模型投入主夠的資源去做特徵,不會比gbdt + lr或dnn差。而且特徵上可以用大量的離散特徵,比如id類,用戶行為序列等,模型可以描述的很細。但會帶來特徵規模特別大,一般的公司基礎建設不行,模型根本跑不起來。另外,這麼大維度的特徵,做個交叉,計算時間也是很頭疼的。而gbdt在模型能力上就天然適合挖掘交叉特徵,即讓模型幫你解決了原來要人工去構建的特徵,看起來是提高了效率,但由於fit數據集能力變強,會對樣本、特徵更敏感。特別是對業務理解不深的同學,很容易就不知道該怎麼辦了。另外,對一些用戶行為序列的離散特徵不好處理,很多時候需要去做多模型融合。至於加不加lr,看各位自己了。看起來,gbdt + lr利大於弊,怎麼說呢,可以看看最近阿里媽媽公布了5年前的piece-wise lr版本,lr也能完成非線性特徵表達。

DNN可以說是更進一步,本人還沒有真正在線上拿到可靠的收益,不方便說。

最後,做廣告的同學不要只關心ctr預估,商家的預算投入、廣告物料量級都是很影響模型效果的。基本上只有到了一定量級,機器學習才能發揮出作用。


根據經驗說一下我的觀點,有不妥之處請指出。

首先,gbdt具有非常好的非線性擬合能力,以及對超參數的魯棒性,因此在各種比賽中大量應用,堪稱王者。比較適用的特徵形式是連續值特徵,這樣的特徵包含了足夠的信息量用以樹上各個分裂點的取值。但是,他也有明顯的問題,對於線上使用的話存在一些不足。由於依賴統計特徵,特徵的準備需要積累一定周期才有足夠置信度,故特徵的實時性不太好。第二,特徵準備環節多,對於線上效果迭代不利。第三,模型計算複雜度好,不能吞吐大規模樣本。第四,非常重要!拋開數據質量,單純從模型本身講,還是由於計算代價高導致特徵數很快就會達到瓶頸,從而導致效果達到瓶頸。另外,如果實在想用的話,推薦xgboost,他可以吞吐稀疏數據,計算效率也做了優化,還可以使用spark上的包方便並行計算。

再說lr。線性模型,但是在業界廣泛使用。為什麼呢?雖然模型本身表達能力差,但是可以通過特徵工程不斷減少問題的非線性結構。又由於模型計算複雜度低,可以吞吐超大規模的特徵空間和樣本集合,這樣就為效果優化打開了空間。同時,他可以學習id化特徵,從而減少了特徵工程的環節,可以提高特徵的實時性。

把gbdt和lr結合確實是一個很美麗的故事。大家都在說怎麼怎麼好,但實際落地的真的少見。當然,也許是我孤陋寡聞,如果有請給大家科普下。首先通過經年累月的優化,很多應用其實人工特徵工程已經做的不錯了,再把gbdt的encoding特徵加進來可以表達能力有不小的overlap。兩者的結合就是一種組合模型的stacking,這種沒有反饋的組合對於效果的提升從理論上說不會比包含backproportion更合理。從線上系統考慮,兩個模型的stacking也會加重複雜度和增加latency。

fm是一種lr思路的擴展。在一階擬合的基礎上加入二階擬合,可以自動的學習任意兩維特徵的交叉。而且,交叉是以embedding向量的形式表達。跟lr一樣,他可以吞吐超大規模的稀疏特徵空間的樣本集合。這種形式可以比較好的提高模型的表達能力,把性能和學習非線性結構的能力結合在一起,有不少實際場景中有一些應用。

dnn是當下最火的方法。本質上講,該方法是通過前面多層的隱藏網路學習抽象特徵,在最後輸出層使用上述抽象得到的特徵完成最終的學習任務。這種學習到的特徵可以較好的降低問題的非線性程度。它的強大在於bp可以將目標函數的誤差回傳,逐層向輸入層的方向傳播從而矯正網路參數,經過多次迭代,網路參數會被修正的很好,這是多個模型簡單上下的stacking所不能比的。同時,對傳統的網路輸入層進行改造,可適配大規模id化稀疏特徵,將特徵工程的難度大大降低,所以百度鳳巢已經解散了主模型的特徵工程team。自己把自己的工作給close了也是蠻有意思,哈哈。由於數據驅動的模式學習到了人工特徵工程難以學到的隱含特徵,所以模型的表達能力會有明顯提升,線上效果會碾壓一般的模型。但是,由於模型學習的複雜性,很難直觀的解釋特徵與效果的關係。另外,網路結構,超參數的調參也是個技術與藝術的結合。簡單點說,回報是跟付出正相關的。

需要說明的是,包含以上演算法在內的各種模型並不能孤立的比較孰好孰壞,一定是跟應用場景的階段和數據質量結合在一起。在數據質量和數據規模發展到一定程度時,複雜模型的作用才會充分爆發。


LR:優點是簡單成熟,易實現易解釋。缺點是需要人工堆交叉特徵。

GBDT+LR:優點是通過GBDT來代替一些人工特徵工程,包括連續特徵離散化,特徵交叉等等。

FM:優點是模型中加入了二階核,通過embedding的內積來表達交叉特徵權重,有更好的泛化能力。這裡建議關注一下其增強版FFM,按公開資料來看,效果好。在本人的實踐中,效果也確實不錯。

DNN:還沒有從公開資料裡面看到其優越的表現,相反,Microsoft的paper說DNN線上效果不穩定,消耗資源大。


推薦閱讀:

為什麼FTRL比FOBOS更容易獲得稀疏解?

TAG:機器學習 | 計算廣告學 | 點擊率 | 深度學習DeepLearning |