推薦系統,深度論文剖析GBDT+LR

今天咱們來剖析一篇經典的論文:Practial Lessons from Predicting Clicks on Ads at Facebook。從這篇paper的名稱當中咱們能夠看得出來,這篇paper的做者是Facebook的廣告團隊。這是一篇將GBDT與LR模型結合應用在廣告點擊率預測的方法,雖然距今已經有好幾年了,可是文中的方法仍然沒有徹底過期,至今依然有一些小公司還在使用。web

這篇paper很是很是經典,能夠說是推薦、廣告領域必讀的文章,說是業內的常識也不爲過。這篇文章的質量很高,內容也比較基礎,很是適合做爲你們的入門paper。算法

本文有點長,建議先馬後看。網絡

簡介

paper開頭的部分簡單介紹了一下當時互聯網行業當中廣告的地位以及當時Facebook的規模,當時Facebook有着7.5億的日活(日活躍用戶daily active users),超過一百萬有效的廣告商,所以對於Facebook來講選擇合適有效的廣告投放給用戶的重要性是很是巨大的。在此基礎上引出了Facebook的創新性作法,即將GBDT與邏輯迴歸模型進行組合,在真實的數據場景當中得到了超過3%的收益。數據結構

在2007年的時候Google和Yahoo就提出了在線競價的廣告收費機制,可是Facebook和搜索引擎的場景不同,在搜索引擎的場景當中,用戶會有明確的搜索意圖。引擎會先根據用戶的搜索意圖去篩選廣告,因此候選的廣告集不會很大。可是Facebook不存在這樣的強意圖信息,因此Facebook候選的廣告數量要大得多,所以對於系統的壓力以及要求也要更高。架構

可是本文(paper)並不會討論系統相關的內容,僅僅關注最後一部分排序模型的作法。雖然paper裏沒說,可是咱們看得出來,Google和Yahoo這類搜索引擎當中的廣告是搜索廣告,而Facebook當中的這些廣告是推薦廣告。後者和前者最大的區別就是召回廣告的邏輯不同,有點相似於推薦系統和搜索系統的區別。編輯器

這其中的核心是用戶意圖,雖然用戶登陸Facebook的時候沒有強意圖,可是根據用戶以前的瀏覽行爲以及習慣,咱們是能夠提取出一些弱意圖的。好比用戶在哪類商品上停留的時間最長,點擊什麼樣的內容的次數最多,還有相似協同過濾的把用戶的行爲抽象成向量的作法。其實這裏面的內容不少,也很是有價值,可見Facebook在寫論文的時候是留了一手的。post

具體作法

說完了廢話咱們來看具體的作法,具體的作法不少同窗可能都有所耳聞也就是GBDT+LR的作法。提及來一句話好像就說完了,可是裏面的細節不少。好比爲何要用GBDT,爲何GBDT可以起做用?這裏面生效的機制是什麼?paper裏寫的內容只是表面,這些細節的思考和分析纔是關鍵。由於paper裏的作法並非普適的,可是其中蘊含的道理每每是通用的。性能

首先來講說模型評估,paper當中提供了兩種新的評估模型的方法。一種是Normalized Entropy,另一種是Calibration。咱們先從模型評估提及。flex

Normalized Entropy

這個指標在實際場景當中算是蠻經常使用的,常常在各類大神的代碼和paper當中看到。直譯過來是歸一化熵的意思,意思有點變了,能夠理解成歸一化以後的交叉熵。它是由樣本的交叉熵均值和背景CTR的交叉熵的比值計算獲得的。搜索引擎

背景CTR指的是訓練樣本集樣本的經驗CTR,能夠理解成平均的點擊率。可是這裏要注意,不是正負樣本的比例。由於咱們在訓練模型以前都會作採樣,好比按照正負樣本比1:3採樣,這裏的背景CTR應該定爲採樣以前的比例。咱們假設這個比例是p,那麼咱們能夠寫出NE的公式:

這裏的取值是,也就是點擊是+1,沒有點擊是-1。這個是paper裏面的公式,在實際應用當中,咱們通常吧click寫成1,impression(沒有click)寫成是0。

Calibration

Calibration翻譯過來是校準刻度的意思,可是這裏我以爲應該理解成和基準線的誤差。這個指標是模型預測的平均CTR和背景CTR的比值,這個比值越接近1,說明咱們的模型的基準誤差越小,越接近真實的狀況。

這個公式能夠寫成:

AUC

AUC是老生常談了,也是咱們工業界最經常使用的指標,幾乎沒有之一。AUC咱們在以前的文章當中介紹過,它表示的Aera-Under-ROC,也就是ROC曲線圍成的面積。ROC曲線是TPR(true postive rate)和FPR(false positive rate)組成的曲線。這個曲線面積越接大代表模型區分正負樣本的能力越強,在CTR排序場景當中,其實模型可否預測準確並非最重要的,把正樣本篩選出來的能力纔是最重要的,這也是AUC如此重要的緣由。

可是AUC也不是沒有缺點,paper當中列舉了一個缺點。好比說假如咱們把模型預測的CTR所有x2,而後再給全部的預測結果乘上0.5來校準,這樣AUC依然不會有變化。可是若是咱們看NE的話,會發現NE上升了。

組合模型

終於到了重頭戲了,雖然這篇paper當中講了不少其餘方面的內容,可是咱們都知道GBDT+LR纔是它的重點。GBDT和LR咱們都很熟悉,可是它們兩個怎麼combine在一塊兒呢?

其實這個問題自己就是錯的,所謂GBDT+LR並非兩個模型的結合,而是一種特徵的轉化。也就是說這個問題咱們須要從特徵的角度去思考而不是從模型。

paper當中先講了兩種經常使用的處理特徵的方法,第一種是叫作bin,也就是分桶的意思。好比說收入,這是一個連續性特徵。若是咱們把它放入模型,模型學到的就是它的一個權重,也就說它是線性起做用的。然而在實際的場景當中,可能這徹底不是線性的。好比有錢人喜歡的品牌和窮人可能徹底不一樣,咱們但願模型可以學到非線性的效果。一種比較好的辦法就是人爲將這個特徵進行分桶,好比根據收入分紅年收入3萬如下的,3萬到10萬的,10萬到50萬的,和50萬以上的。落到哪一個桶裏,哪一個桶的值標爲1,不然標爲0。

第二種方法叫作特徵組合,這個也很好理解,好比性別是一個類別,是不是高收入羣體是個類別。那咱們排列組合一下,就能夠獲得男_低收入,男_高收入,女_低收入和女_高收入這四個類別。若是是連續性特徵,可使用像是kd-tree這類的數據結構進行離散化。咱們把類別特徵兩兩交叉就能夠獲得更多的特徵,但這些特徵並不必定都是有用的,有些可能沒用,還有些可能有用可是數據很稀疏。因此雖然這樣能夠產生大量特徵,可是須要一一手動篩選,不少是無效的

因爲手動篩選特徵的工做量實在是太大,收益也不高,因此工程師就開始思考一個問題:有沒有辦法能夠自動篩選特徵呢?如今咱們都知道可讓神經網絡來作自動的特徵交叉和篩選,可是當時神經網絡尚未興起,因此仍是隻能手動進行。爲了解決這個問題,當時的工程師們想到了GBDT。

這纔是會有GBDT+LR的緣由,咱們來看這張圖:

咱們來簡單回顧一下GBDT的模型,首先GBDT是由多棵樹組成的森林模型。對於每個樣本,它在預測的時候都會落到每一棵子樹的其中一個葉子節點上。這樣咱們就可使用GBDT來進行特徵的映射,咱們來看個例子:

在上圖這個例子當中,GBDT一共有3棵子樹,第一棵子樹有3個葉子節點。咱們的樣本落到了第一個,因此第一棵子樹對應的one-hot結果是[1, 0, 0],第二棵子樹也有3個節點,樣本落到了第二個節點當中,因此one-hot的結果是[0, 1, 0],同理能夠獲得第三棵子樹的結果是[0, 0, 1, 0]。

這樣咱們最後把這些樹的向量合併在一塊兒,就獲得了一個新的向量:[1, 0, 0, 0, 1, 0, 0, 0, 1, 0],這個向量就是咱們LR模型的輸入

咱們來分析一下細節,首先明確一點,GBDT只是用來進行了特徵轉化和處理,它的預測結果並不重要。經過使用GBDT咱們同時完成了剛纔提到的兩種操做,既把連續性特徵轉換成了離散型特徵,也自動完成了特徵的交叉。由於對於每一棵子樹而言,其實本質上是一棵CART算法實現的決策樹,也就是說從樹根到葉子節點的鏈路表明了一種潛在的規則。因此咱們能夠近似當作使用了GBDT代替人工進行了規則的提取以及特徵的處理。

結果

最後咱們來看下結果,原paper當中進行了分別進行了三組實驗,分別是僅有LR、僅有GBDT和GBDT+LR進行對比。衡量的標準是各自的NE,以NE最大的Trees-only做爲參考,能夠發現GBDT+LR組的NE降低了3.4%。

咱們貼上paper當中的結果:

怎麼說呢,這個結果挺取巧的,由於對比的是NE,也就是說交叉熵降低了。可是AUC的狀況不知道,paper當中沒有說。而且這個降低是以NE最大的結果做爲參考的,有一點點人爲誇大了的感受。固然這也是paper的經常使用手段,咱們內心有數就好。

數據的實時性

除了模型和特徵的創新以外,這篇paper還探討了數據時效性的做用。

爲了驗證數據新鮮程度和模型表現之間的關係,paper選擇了一條的數據用來訓練了trees-only和GBDT+LR這兩個模型,而後用這兩個模型分別去預測以後1天到6天的數據,將總體的狀況繪製成圖表:

在這張圖當中,橫軸是預測數據距離訓練數據的天數,縱軸是模型的NE。NE越低表示模型的效果越好,從上圖咱們能夠發現第六天的結果和第0天的NE要相差大約1%。這也就意味着單純是維持數據的新鮮度,咱們就能夠得到1%的提高。這也是爲何各大公司要作online-learning的緣由。

online learning

在接下來的內容當中,paper還爲咱們介紹了一些online learning的細節性問題。其中有一些已通過時了,或者是普適性不強,我挑選了幾個比較典型的有表明性的列舉一下。

時間窗口

在咱們蒐集訓練數據的過程中,點擊是比較明確的,由於點擊有一個具體的行爲,可是impression(曝光)不是。由於用戶沒點擊這並非一個行爲,因此咱們沒辦法肯定用戶究竟是不想點仍是等一會再點。比較常規的作法是維護一個定時窗口,規定一個時間,若是用戶看到了廣告在規定時間內沒有點擊,那麼就認爲這是一個非點擊事件

可是咱們很容易發現,這麼作是有問題的,由於用戶可能反應遲鈍,或者是暫時還沒反應過來致使沒有點擊。就可能出現時間已通過了,用戶點擊了的狀況。在這種狀況下impression已經被記錄爲一個負樣本了,那麼點擊產生的正樣本就找不到對應的impression了。咱們能夠計算一個比例,有多少點擊能夠找獲得impression,這個比例稱爲click coverage,點擊率的覆蓋率。

那是否是窗口時間越長越好呢?其實也不是,由於窗口過長可能會致使把一些不是點擊的認爲是點擊。舉個例子,好比說一個商品,用戶第一次瀏覽的時候以爲不滿意,因此沒有點。過了一會,用戶回過來看的時候又改變了主意,發生了點擊。那麼按照道理,咱們應該把第一次沒有點的行爲視做是負樣本,把第二次的行爲認爲是正樣本。若是咱們時間窗口設置得很長,就會被認爲是一個點擊樣本。因此時間窗口到底應該設置得多長,這是須要調整的一個參數,不能夠拍腦殼決定。

架構

streaming是業內經常使用的一種數據處理手段,稱爲流式處理。能夠簡單理解成隊列,也就是queue。可是當發生click的時候咱們須要找到對應的impression樣本,將它改爲正樣本,因此咱們還須要查找的功能。也就是說咱們還須要一個hashmap來記錄隊列當中的節點。

當咱們蒐集到了足夠數據,或者是蒐集了規定時間的樣本數據以後,咱們會把窗口內的數據用來訓練模型。當模型完成訓練以後,會被推送到排序系統當中,實時更新排序須要調用的模型文件,從而達到在線實時訓練的目的。咱們來看下它的架構圖:

Ranker是排序系統,對候選的廣告進行排序以後展現給用戶,而且將這些廣告的特徵數據push給online joiner,也就是特徵處理系統。當用戶對廣告進行點擊以後,點擊的數據也會被傳入Joiner當中。Joiner會將用戶的點擊數據和Ranker傳輸來的數據進行關聯,關聯以後把數據傳給Trainer系統進行模型的訓練。

這裏還涉及到一個細節,就是在joiner當中咱們怎麼關聯呢?由於一個用戶可能會有屢次觀看廣告的數據,同一個廣告也可能刷新觀看屢次。因此直接拿用戶id或者是廣告的id進行關聯是不行的,咱們還須要一個和時間有關的id。這個id叫作requestid,當用戶每次刷新頁面的時候,requestid都會刷新,這樣咱們就能夠保證即便用戶刷新網頁,咱們也能夠正確地將數據關聯上。

特徵分析

最後,paper當中還附上了對特徵的一些分析。雖然咱們不知道它們到底都用了一些什麼樣的特徵,可是這些分析的內容對咱們依然有借鑑意義。

行爲特徵or上下文特徵

在CTR預估的場景當中,特徵主要能夠分爲兩種,一種是上下文特徵,一種是用戶歷史行爲特徵。所謂的上下文特徵,實際上是一個很大的概念。像是展現的廣告的信息,用戶自己的信息,以及當時的時間、頁面內的內容、用戶所在的地點等等這些當下的和場景有關的信息均可以被認爲是上下文信息。歷史行爲特徵也很好理解,也就是用戶以前在平臺內產生的行爲。

paper當中着重分析了用戶行爲特徵的重要性,其中的作法是將特徵按照重要性倒排,而後計算在topK重要的特徵當中用戶歷史行爲特徵的佔比。在LR模型當中,特徵的重要性就等價於對應位置的權重,獲得的結果以下圖:

從上圖的結果咱們能夠看到,用戶的歷史行爲特徵在總體當中佔據到了很是大的權重。top20的feature當中,只有2個是上下文特徵。這也很符合咱們的認知,咱們投放的內容的質量遠遠不如用戶喜歡什麼重要。而用戶歷史上產生過行爲的數據很是好地能夠體現用戶喜愛的狀況。

重要性分析

除了分析了特徵的重要性以外,paper當中還實驗了只使用某一種類型的特徵進行預測,對比模型的性能。實驗的結果以下:

上圖當中紅柱展現的是隻使用上下文特徵的訓練結果,深藍色是隻使用用戶行爲特徵的訓練結果。從這個結果上咱們能夠明顯地看到,只使用行爲特徵訓練出來的模型性能要比使用上下文特徵的好至少3.5個點,這已是很是大的差距了。因此咱們也能夠得出結論,相比於上下文特徵,用戶的行爲特徵更加有用。

除此以外,paper當中還探討了negative down sampling(負採樣)和subsampling(二次採樣)對於模型性能的影響。其中二次採樣證實訓練數據量和模型效果整體呈正比,也就是說訓練數據量越大,模型的效果越好。而負採樣一樣對於提高模型的效果有所幫助,這也是目前廣告和推薦場景下的常規手段。

今天的文章就到這裏,衷心祝願你們天天都有所收穫。若是還喜歡今天的內容的話,請來一個三連支持吧~(點贊、關注、轉發

原文連接,求個關注

本文使用 mdnice 排版

相關文章
相關標籤/搜索