1. 程式人生 > >廣告點選率常用模型的優點和缺點

廣告點選率常用模型的優點和缺點

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了也是蠻有意思,哈哈。由於資料驅動的模式學習到了人工特徵工程難以學到的隱含特徵,所以模型的表達能力會有明顯提升,線上效果會碾壓一般的模型。但是,由於模型學習的複雜性,很難直觀的解釋特徵與效果的關係。另外,網路結構,超引數的調參也是個技術與藝術的結合。簡單點說,回報是跟付出正相關的。