文章連接: https://quinonero.net/Publications/predicting-clicks-facebook.pdf算法
Facebook日活躍度7.5億,活躍廣告主1百萬學習
特徵工程最重要:user和ad的歷史信息賽過其餘特徵測試
輕微提高模型效果:數據新鮮度、學習率、數據採樣ui
增長一個重要特徵和選擇正確的模型更關鍵編碼
按點擊收費廣告效果依賴於點擊率預估。相比於搜索廣告使用搜索query,Facebook更依賴人口和興趣特徵。spa
本文發現決策樹和邏輯迴歸的混合模型比其餘方法好3%。.net
線性分類兩個要素:特徵變換、數據新鮮度3d
在線學習orm
延時、可擴展性blog
劃分訓練數據和測試數據模擬在線數據流。
評估指標使用預測精度:歸一化熵(Normalized Entropy,NE)和校訂度(calibration)
NE = 預測log loss/平均歷史ctr;越低效果越好。使用背景ctr(即平均歷史ctr)是爲了評估相對歷史ctr更不敏感。
calibration = 平均估計ctr/歷史ctr = 指望點擊數/實際點擊數。
不用AUC是由於它度量排序效果且沒有校訂度概念。NE反映了預測精度且隱藏反映校訂度。
使用決策樹作特徵變換
更新的數據獲得更好效果
SGD:
Bayesian online learning scheme for probit regression (BOPR)的似然和先驗:
更新算法:
—— decision tree feature transforms
連續特徵:離散化分桶
類別特徵:笛卡爾積
每一個GBDT輸出做爲編碼某種規則的特徵,再用線性分類器:
有GBDT特徵變換相對於沒有,NE降低3.4%。通常的特徵工程只能降低千分之二左右。
使用GBDT特徵變換先出減小特徵數,代價僅僅減小不多的效果。
—— data freshness
周級別更新改成天級別更新,NE降低1%。所以須要天級別更新。
線性分類器部分能夠實時更新
—— online linear classifer
#1,#2,#3 每一個特徵有獨立的學習率
#4,#5 全部特徵共享一個學習率
效果排名:#1,#2=#5,#4,#3。
#1是LR,獨立學習率。
#5全局統一學習率的問題主要由於不一樣特徵有取值的樣本的個數差距大。樣本少的特徵權重衰減過快。
#3雖然緩解此問題可是仍然差,由於學習率衰減太快致使過早結束訓練。
LR和BOPR效果接近,可是LR模型比BOPR小一半。不過BOPR有Bayes形式,更適合explore/exploit方法。
—— online data joiner
結合requestID拼接點擊和展現,HashQueue存impression,HashMap存click。展現須要等待點擊事件,等待時間窗須要仔細調,太小點擊拼接不上、過大須要更多存儲且時效性差。
有點擊沒法拼接意味着歷史ctr低於真實值,所以須要校訂。
須要作保護機制,好比click數據流卡住,trainer須要斷開與joiner的鏈接。
—— number of boosting trees
#leaves per tree <= 12
500 trees取得大部分提高
並且爲了計算和存儲效率,數的棵數不要太多。
—— boosting feature importance
通常少許特徵貢獻大部分提高。top10特徵貢獻一半特徵重要度,last300貢獻<1%重要度。
幾個特徵舉例
contextual: local time of day, day of week, device, current page
historical: cumulative number of clicks on an ad, avg ctr of the ad in last week, avg ctr of the user
—— historical features
historical比contextual更有用:top10重要度都是historical特徵。
contextual特徵更適合處理冷啓動問題。
contextual特徵更依賴數據新鮮度,固然部分由於historical特徵已經包含長期累積的用戶行爲
億級別以上樣本量
—— uniform subsampling
更多數據效果更好。不過10%數據只有1%效果損失。
—— negative down sampling
類別不均衡須要負例下采樣,目前最佳採樣率是0.025
—— model re-calibration
由於負採樣因此須要ctr校訂。