日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Facebook经典CTR预估模型

發布時間:2024/1/23 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Facebook经典CTR预估模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里是「王喆的機器學習筆記」的第九篇文章,今天我們重讀一篇經典的CTR預估領域的論文,Facebook在2014發表的“Practical Lessons from Predicting Clicks on Ads at Facebook”。

在這篇文章中,Facebook提出了經典的GBDT(Gradient Boosting Decision Trees)+LR(Logistics Regression)的CTR模型結構,可以說開啟了特征工程模型化、自動化的新階段。此外其在五年前就采用的online learningonline data joinernegative down sampling等技術時至今日也有極強的工程意義。下面我們就一起回顧一下這篇當時紅極一時,現在仍常看常新的論文吧。

用戶場景

文章的用戶場景是一個標準的點擊率預估的場景,需要強調的只有一點,因為我們需要利用CTR計算精準的出價、ROI等重要的后續預估值,因此CTR模型的預估值需要是一個具有物理意義的精準的CTR,而不是僅僅輸出廣告排序的高低關系。所以文中不僅把CTR calibration作為重要的評價指標,更是在最后介紹了模型校正的相關方法。

模型結構

計算廣告方向的同學應該都對GBDT+LR這個模型有所了解,這一點也無益是這篇文章最大的貢獻。雖然文章其他部分的價值絲毫不遜于該模型,但再次回顧該模型,清楚知道其技術細節還是必要的。

簡而言之,文章提出了一種利用GBDT自動進行特征篩選和組合,進而生成新的feature vector,再把該feature vector當作logistic regression的模型輸入,預測CTR的模型結構。

GBDT+LR模型結構

這里需要強調的是,用GBDT構建特征工程,和利用LR預測CTR兩步是獨立訓練的。所以自然不存在如何將LR的梯度回傳到GBDT這類復雜的問題,而利用LR預測CTR的過程是顯然的,在此不再贅述,我們著重講一講如何利用GBDT構建新的特征向量。

大家知道,GBDT是由多棵回歸樹組成的樹林,后一棵樹利用前面樹林的結果與真實結果的殘差做為擬合目標。每棵樹生成的過程是一棵標準的回歸樹生成過程,因此每個節點的分裂是一個自然的特征選擇的過程,而多層節點的結構自然進行了有效的特征組合,也就非常高效的解決了過去非常棘手的特征選擇和特征組合的問題。

我們利用訓練集訓練好GBDT模型,之后就可以利用該模型構建特征工程。具體過程是這樣的,一個樣本在輸入GBDT的某一子樹后,會根據每個節點的規則最終落入某一葉子節點,那么我們把該葉子節點置為1,其他葉子節點置為0,所有葉子節點組成的向量即形成了該棵樹的特征向量,把GBDT所有子樹的特征向量concatenate起來,即形成了后續LR輸入的特征向量。

舉例來說,比如GBDT由三顆子樹構成,每個子樹有4個葉子節點,一個訓練樣本進來后,先后落到了“子樹1”的第3個葉節點中,那么特征向量就是[0,0,1,0],“子樹2”的第1個葉節點,特征向量為[1,0,0,0],“子樹3”的第4個葉節點,特征向量為[0,0,0,1],最后concatenate所有特征向量,形成的最終的特征向量為[0,0,1,0,1,0,0,0,0,0,0,1],我們再把該向量作為LR的輸入,預測CTR。

引入了GBDT+LR的模型后,相比單純的LR和GBDT,提升效果是非常顯著的。從下表中可以看到,混合模型比單純的LR或Trees模型在loss上減少了3%。

LR+Trees模型的Loss對比

為了確定最優的GBDT子樹規模,facebook繪出了子樹規模和loss的關系曲線如下:

GBDT子樹數量與loss的關系

可以看到,在規模超過500棵子樹后,增加子樹規模對于loss下降的貢獻就微乎其微了。特別是最后1000棵子樹僅貢獻了0.1%的loss下降,最終facebook選擇了600作為其子樹規模。

該模型的優勢我們上面已經提到,即可以自動進行特征組合和特征篩選,但在實踐過程中,模型的缺陷也比較明顯,相比FTRL,FM,NN等能夠通過梯度下降訓練的模型來說,GBDT缺乏online learning的能力,因此我們往往只能相隔一天甚至幾天才能夠update GBDT模型,勢必影響模型的實效性,那么Facebook是如何解決模型更新的問題的呢?

模型的實效性問題和更新策略

雖然我們的直覺是模型的訓練時間和serving時間之間的間隔越短,模型的效果越好,但為了證明這一點,facebook的工程師還是做了一組實效性的實驗,在結束模型的訓練之后,觀察了其后6天的模型loss(這里采用normalized entropy作為loss)

模型更新延遲與loss的關系

可以看出,模型的loss在第0天之后有所上升,特別是第2天過后顯著上升。因此daily update的模型相比weekly update的模型效果肯定是有大幅提升的。

但囿于facebook巨大的數據量以及GBDT較難實施并行化的原因,GBDT的更新時間往往超過24小時,所以為了兼顧data freshness和客觀的工程要求,facebook采取了下面的模型更新方法:

The boosted decision trees can be trained daily or every couple of days, but the linear classifier can be trained in near real-time by using some flavor of online learning.

就是說GBDT的部分幾天更新一次,而LR的部分進行準實時的更新,這無疑是很好的工程實踐經驗。時至今日,我們已經開始使用大量不同的embedding方法進行特征編碼,facebook當時的做法也對我們現在的工程實踐有重要的參考價值。因為大量深度學習embedding方法的更新計算開銷也非常大,但對實效性要求并不高,我們也完全可以低頻更新embedding,高頻或實時更新基于embedding特征的LR,NN等預測模型。

facebook的實時數據流架構

為了實現模型的準實時訓練,facebook專門介紹了其基于Scribe的數據流架構,文中稱其為online data joiner。

該模塊最重要的作用是準實時的把來自不同數據流的數據整合起來形成sample features,并最終與click數據進行join,形成完整的labeled sample。在整個過程中,我認為最應該注意的有三點:

  • waiting window的設定:waiting window指的是在impression發生后,我們要等待多久才能夠判定一個impression是否有click。如果waiting window過大,數據實時性受影響,如果waiting window過小,會有一部分click來不及join到impression,導致樣本CTR與真實值不符。這是一個工程調優的問題,需要有針對性的找到跟實際業務匹配的合適的waiting window。除此之外,無論怎樣我們都會漏掉一部分click,這就要求我們階段性的全量retrain我們的模型,避免online learning誤差的積累。
  • 分布式的架構與全局統一的action id:為了實現分布式架構下impression記錄和click記錄的join,facebook除了為每個action建立全局統一的request id外,還建立了HashQueue緩存impressions。hashQueue緩存的impression,如果在窗口過期時還沒有匹配到click就會當作negative sample,這里說的窗口與上面提到的waiting window相匹配。facebook使用scribe實現了這一過程,更多公司使用Kafka完成大數據緩存和流處理。
  • 數據流保護機制:facebook專門提到了online data joiner的保護機制,因為一旦data joiner失效,比如click stream無法join impression stream,那么所有的樣本都會成為負樣本,由于模型實時進行online learning和serving,模型準確度將立刻受到錯誤樣本數據的影響,進而直接影響廣告投放和公司利潤,后果是非常嚴重的。為此,facebook專門設立了異常檢測機制,一旦發現實時樣本數據流的分布發生變化,將立即切斷online learning的過程,防止預測模型受到影響。
  • 降采樣和模型校正

    對于巨型互聯網公司來說,為了控制數據規模,降低訓練開銷,降采樣幾乎是通用的手段,facebook實踐了兩種降采樣的方法,uniform subsampling和 negative down sampling

    uniform subsampling是對所有樣本進行無差別的隨機抽樣,為選取最優的采樣頻率,facebook試驗了0.001,0.01, 0.1, 0.5 和1五個采樣頻率,loss的比較如下:

    可以看到當采樣率是10%時,相比全量數據訓練的模型,僅損失了不到1%的效果。

    另一種方法?negative down sampling?保留全量正樣本,對負樣本進行降采樣。除了提高訓練效率外,負采樣還直接解決了正負樣本不均衡的問題,facebook經驗性的選擇了從0.0001到0.1的一組負采樣頻率,試驗效果如下:

    大家可以看到,當負采樣頻率在0.025時,loss不僅優于更低的采樣頻率訓練出來的模型,居然也優于負采樣頻率在0.1時訓練出的模型,雖然原文沒有作出進一步的解釋,但推測最可能的原因是解決了數據不均衡問題帶來的效果提升。

    負采樣帶來的問題是CTR預估值的漂移,比如真實CTR是0.1%,進行0.01的負采樣之后,CTR將會攀升到10%左右。而為了進行準確的競價以及ROI預估等,CTR預估模型是要提供準確的有物理意義的CTR值的,因此在進行負采樣后需要進行CTR的校正,使CTR模型的預估值的期望回到0.1%。校正的公式如下:

    其中q是校正后的CTR,p是模型的預估CTR,w是負采樣頻率。大家可以利用簡單的轉換關系就可以得出上述公式,有興趣的同學可以手動推導一下。

    ?

    至此,我們介紹完了facebook這篇經典的CTR預估論文,可以看到雖然五年過去了,我們仍能從中汲取不少模型改造和工程實現的經驗,就我個人來言,最值得學習的有下面三點:

  • 特征工程模型化。五年前在很多從業者還在通過調參經驗嘗試各種特征組合的時候,利用模型進行特征自動組合和篩選是相當創新的思路,也幾乎是從那時起,各種深度學習和embedding的思想開始爆發,一脈相承的發揚著特征工程模型化的思路。
  • 模型復雜性和實效性的權衡。對GBDT和LR采用不同的更新頻率是非常工程化和有價值的實踐經驗,也是對組合模型各部分優點最大化的解決方案。
  • 有想法要用數據去驗證。這其實是我讀完這批文章最大的感觸,在做算法工程師的過程中,我們其實是有很多直覺上的結論,比如data freshness的影響有多大,GBDT應該設置多少顆子樹,到底是應該用負采樣還是uniform采樣,針對這些問題,facebook告訴你的是,用數據說話,無論是多么小的一個選擇,都應該用數據去支撐,這才是一位工程師嚴謹的工作態度。
  • 最后慣例提出兩個問題供大家討論:

  • 如果采用random forest替代GBDT,有哪些優點和缺點?
  • GBDT+LR這個模型結構,是否能夠有效處理大量ID類特征,為什么?如果希望處理大量ID類特征,我們應該如何改進這個模型?
  • 歡迎大家關注我的微信公眾號?王喆的機器學習筆記wangzhenotes)一起交流,水平有限,歡迎大家拍磚、吐槽、討論。感覺文章有價值的同學也歡迎點贊鼓勵,謝謝。

    參考資料:

  • Practical Lessons from Predicting Clicks on Ads at Facebook
  • Computational Advertising Paper List
  • 總結

    以上是生活随笔為你收集整理的Facebook经典CTR预估模型的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。