精準營銷:剖析廣告點擊率預估系統

引文

點擊率預估系統最早是由谷歌實現,並應用在其搜索廣告系統。在看到這一大殺器為谷歌帶來滾滾財源之後,其他公司也紛紛效仿。直到今日,大大小小的「互聯網廣告公司」,都宣稱自己掌握了基於人工智慧的精準定向,實際上大多講的就是這個點擊率預估系統。而點擊率預估的應用場景也從最開始的搜索廣告,擴展到展示廣告、信息流廣告等等廣告形態,甚至於在商品推薦系統中都能看到其蹤影。

點擊率預估系統的核心是機器學習演算法,不過我們也應該知道,演算法所處理的對象往往是抽象的,是優雅的,而現實中的任務卻是具體的,充滿缺陷的。那麼如何用抽象的演算法來解決具體的業務問題,是本文所要介紹的內容。本文會分成日誌系統、特徵工程、模型選擇與訓練、在線服務四個部分,主要介紹點擊率預估系統的數據流程以及系統框架。而模型與演算法原理、模型調優、在線學習這些主題,本文只做簡要介紹或不涉及。

1. 日誌系統

點擊率預估用到的是監督學習演算法,所以我們需要由日誌來提供如下表形式的數據。

這裡面的每一行,都是一次廣告展示的完整記錄。其記錄了這次廣告展示所對應的廣告、用戶、上下文三類特徵,以及用戶對這次廣告展示的行為反饋,即是否點擊了廣告。

但是實際上,用戶訪問一個網站或App而觸發廣告請求時,在伺服器會生成一條日誌,廣告曝光、點擊的上報又各自產生了相應的日誌。對於這些各自獨立的日誌,我們要把他們關聯起來,把廣告的請求、展示、點擊三個事件串起來,才能形成上述提到的記錄形式。為實現這一點,對每個廣告請求,我們要為其生成唯一的id,並在後續的曝光和點擊上報時,將這一id一起上報,再通過這一id來關聯日誌。具體的日誌關聯過程,可以採取離線批處理(如MapReduce),也可以採用流式處理(如Spark Streaming),這個根據業務情況酌情選擇。前面提到,處理之後的記錄包含廣告、用戶、上下文三類特徵,那麼在列印日誌時,特別是請求日誌,需要注意將相關信息列印完備。

2. 特徵工程

點擊率預估演算法處理是數字形式的輸入,所以在日誌處理完之後,需要通過特徵工程來將文本形式的信息轉換成數字形式的信息,即建立索引。建立索引有兩種常見做法,一是對特徵簡單計數,一是對特徵取值做哈希處理。如果採用簡單計數,需要將所有特徵都枚舉出來,這在日誌量和特徵空間龐大的時候會是一個問題。而採用哈希處理則相對簡單,而且有一些團隊通過哈希碰撞的方式來縮小特徵空間,降低訓練難度,不過這個做法是否不影響預測性能是因業務而異的。如果接入的是線性模型,那麼在建索引時還需要對分類類型特徵做one-hot編碼。

在建索引之前,還有很多事情要做。有一些特徵並不會在日誌中出現,比如統計數據,這些特徵需要通過各種id去做關聯。日誌中往往會存在一些異常值,比如說有一些刷單數據,或是特徵取值明顯偏離正常範圍,我們需要對這些數據做過濾。而對於實值特徵,往往會做歸一化或是離散化(如果使用線性模型),以免由於實值特徵取值範圍嚴重偏離[0,1]區間,而給模型訓練和預測帶來困難。樣本中的特徵還有可能獲取不到觀測值,或者是觀測值出現次數過少,對於這些情況,可以賦予預設值。而有些特徵的覆蓋率太低,則可以選擇放棄。如果想要為線性模型引入非線性,則需要做交叉特徵設計,這是一件很依賴領域知識的事情。總之,特徵工程這件事情,花樣很多。

我們知道,廣告的點擊率一般是顯著低於50%的,會存在樣本不平衡的問題。那麼對於這個問題,我們可以採用負例欠採樣的處理方式。通過觀察不同欠採樣比例下的模型預測性能,可以獲取最佳的採樣比例。欠採樣方法有可能導致丟失一些負例的信息,對於這個問題,可以嘗試[1]所提出的Easy Ensemble,就是對負例進行N次不重複的隨機採樣,並分別與所有正例組成N個訓練集,分別訓練出N個模型,然後對預測值做平均。這個做法簡單有效,不過對於在線服務來說,N個模型就意味著N倍的計算量,需要權衡這個做法的收益。

3. 模型選擇與訓練

點擊率預估演算法,最經典的莫過於LR(Logistic Regression,邏輯回歸),作為一個線性模型,他的特點是易實現,易解釋,還有Google背書提出FTRL(FollowThe [Proximally] Regularized Leader)優化演算法,再說他能夠給「特徵工程師」提供存在感:)。

近年來的趨勢是FM(FactorizationMachine)/FFM(Field-aware Factorization Machine),DNN(深度神經網路)。FM演算法為各個特徵生成一個Embedding Vector,並且通過不同特徵對應的Embedding的內積來表達交叉特徵,這對於訓練樣本稀疏的交叉特徵有明顯更好的學習能力。FFM則是對FM的一小步改進,他為每個特徵生成的Embedding不只有一個,而是根據不同的互作用field生成不同的Embedding,這裡的field指的是一個特徵在one-hot編碼之前所屬的分類類型特徵[2]。FFM演算法因為在Kaggle比賽中連續兩次取勝而引起關注,有趣的是,第一次比賽中台大的團隊使用了FFM並取勝之後,第二次比賽各個團隊也都紛紛使用該演算法。FFM在在線服務中的嘗試以及效果的提升也已有相關報道[3,4]。至於DNN,按Bing團隊的說法:在各種使用DNN的嘗試中,其帶來的效果提升都是marginal的,而其對計算機資源的消耗則大幅增加,而且在線效果並不穩定[5]。當然了,有些公司確實在點擊率預估的生產環境中使用了DNN,甚至提供了雲服務,對於他們是否也碰到前面所述的問題,是否有從DNN中獲得不那麼marginal的提升,我很感興趣。

接下來聊聊模型集成。通過模型集成來降低預測的偏差或方差,是機器學習中的通用做法。集成方法有stacking、cascading、boosting等等,而大名鼎鼎的GBDT就是boosting的產物,這裡要聊的模型集成都跟GBDT有關係。前面提到Kaggle比賽的獲勝者用了FFM,其實他們使用了模型集成,具體做法是GBDT+FFM,將GBDT的輸出接入到FFM的輸入特徵,這個做法很可能是受啟發於Facebook提出的GBDT+LR。Facebook提出這個方法,是基於這樣的考慮:在特徵工程中往往需要做兩件事情,一是將實值特徵打散,一是生成交叉特徵,而他們注意到GBDT恰好可以自動完成這兩件事情[6]。這個集成模型是一個cascading的做法。我最近注意到另外一個很有意思的做法,則是基於boosting的。這個做法本質上也是GBDT,但是與通常的GBDT不同的是,其第一個分類器不是決策樹,而是用其他模型來代替,比如LR、NN、DNN等等,然後在這個基礎上再用決策樹做boosting。這個做法從Bing的實驗結果來看效果的提升是非常明顯的[5]。

講了這麼多的模型,那麼我從零開始搭建系統,應該選哪一個呢?我個人比較信賴所謂「AK-47」原則,就是在實現一個東西的時候,應該首先選擇簡單有效的方式。那麼基於這個原則我們應該首先考慮單模型,即LR、GBDT、FM/FFM等模型。而在這裡面,我個人傾向於選擇FFM,這個模型把我們從交叉特徵的藝術創造中解放出來,其有效性已有多方背書,還可以online-training。要說有什麼缺點,一個是容易過擬合,一個是相對LR、FM消耗更多資源。對付第一個問題用early-stopping,而第二個問題,在這個DNN都可以上的年代,多消耗點資源就消耗吧。當然,最好把LR、GBDT這些也弄上做baseline,再說這裡面很多說不準,效果這東西得試試才知道。

聊完模型,來聊聊訓練。訓練時,我們需要為模型的性能確定指標,通過性能指標來選擇最合適的模型。最常用的是AUC(Area Under ROC Curve),指的是ROC(Receiver Operating Characteristic)曲線下的面積,衡量的是對於不同廣告的排序質量,這也恰恰是大多廣告點擊率系統最關心的。除此之外還有LogLoss、RIG(衡量點擊率預估值的準確率)、Utility(衡量模型帶來的收益提升)等等指標,可以根據業務需求酌情選取。不同的模型都有各自的超參數需要去做調優,這裡不做展開。

4. 在線服務

在線服務有三個關鍵環節,分別是分流實驗、特徵轉換和pCTR(predicted click through rate,預估點擊率)計算,這裡分段簡要介紹。

點擊率預估系統往往需要做線上實驗來驗證模型的效果,所以在線服務首先需要一個實驗層來對流量進行配置,將流量分發給不同的模型,並且跟蹤不同模型的實時效果。需要注意的是,良好的離線效果並不意味著線上效果就一定好。

特徵轉換對應的是離線處理時的特徵工程環節,是為了將廣告請求的數據轉換成模型的輸入特徵。在特徵轉換的過程中,往往從廣告請求中拿到的特徵並不全,還需要去做進一步的關聯。互聯網廣告一般對實時性要求比較高,而pCTR計算環節已經是計算密集的,為了提高響應速度,在特徵轉換環節應該減少甚至避免IO帶來的延遲,所以這些關聯信息最好提前載入到應用內存或者緩存中,並通過定時任務進行更新。

通過特徵轉換得到的輸入特徵,會交給pCTR計算模塊去做最後的計算,這個模塊載入了訓練好的模型。模型的訓練都會以一定的頻率進行(甚至是一直在進行,即所謂在線學習),而訓練好的模型也都會以一定的頻率更新到線上,以便計算模塊及時利用到較新的信息。那麼計算模塊應該妥當設計,使其能夠對模型進行熱更新而不影響服務。模型本身由於採樣的問題,或是模型自身的局限,還會帶來預測值的整體偏差,這個偏差對於需要進行競價的業務會產生影響,這種情況下計算模塊還需要對預測值進行校準。

寫在最後

與點擊率預估類似的還有轉化率預估,這兩者是相通的,區別在於預測目標不一樣。

點擊率預估是一個很大的話題,本文也只是對這個話題的一點介紹,篇幅所限,很多問題只是浮光掠影而過,作者後面會選擇其中一些主題再行展開成文。由於本人經驗所限,文中所述難免存在錯誤或紕漏,各位看官不吝批評指正。

[1] Liu et al., (2008). ExploratoryUndersampling for Class-Imbalance Learning.

[2] Juan et al., (2016). Field-awareFactorization Machines for CTR Prediction.

[3] Juan et al., (2017). Field-awareFactorization Machines in a Real-world Online Advertising System.

[4] del2z et al., (2016). 深入FFM原理與實踐.

[5] Ling et al., (2017). Model Ensemble forClick Prediction in Bing Search Ads.

[6] He et al., (2014). Practical Lessons fromPredicting Clicks on Ads at Facebook.

歡迎關注微信公眾號 機器決策


推薦閱讀:

李彥宏有什麼改變?
互聯網公司哪家運營最強?特色在哪?
有人說互聯網門戶已死,對此你怎麼看?
怎麼評價劉強東?
小米是如何做互聯網+的?

TAG:機器學習 | 互聯網 | 計算廣告學 |