- 什么是點擊率預估?
ctr的主要任務是預測用戶點擊某個廣告的概率,一般是一個二分類問題,通常需要面對海量的樣本和特征,所以算法的效率和性能都比較關鍵。 - 評估指標是什么?
以kaggle上的一個比賽為例(https://www.kaggle.com/c/outbrain-click-prediction/overview/evaluation),該比賽的任務是給定 display_id和ad_id,判斷用戶點擊這個ad_id的概率(display_id應該是與用戶相關的),該任務采用的評估指標是 MAP@12(mean average precision),具體的公式如下所示:
其中|U|是總的display_id的數目,|n|是預測的ad_id的數目,k是cutoff,p(1)表示取每個display_id里得分最高的ad_id看准確率,所以p(k)就表示取每個display_id中概率最高的前k個ad_id作為候選,判斷其中有沒有用戶真實點擊的ad_id,並計算准確率。
常用算法比較:
-
lr
優點:簡單,高效
缺點:線性模型,無法自動處理特征間的交叉關系,需要手動做特征工程 -
fm
在lr的基礎上加入了自動對特征間的交叉關系建模的二階特征,避免了手動特征工程的繁瑣,每個特征都需要學習一個k的隱空間向量,特征兩兩之間的交叉項系數等於對應特征隱空間向量的內積。 -
ffm
由於ctr預估中的特征通常都是離散的,所以通常需要對特征做one-hot編碼,所以可以對one-hot的編碼特征進行分組(分為多個field),由同一個原始特征編碼出來的one-hot特征屬於同一個field。假設有k個field,之前在fm中每個特征都只需要學習一個隱空間向量,這就意味着這個特征在與其他不同field特征相交叉時用的是同一個隱空間向量進行內積。ffm的做法是對每個特征都學習k個隱空間向量,這樣每個特征在與其他各個不同field的特征交叉時能自適應得學習到最優的隱空間向量,ffm的參數明顯比fm多,所以ffm模型的表達能力比fm強。 -
ftrl
其實ftrl本質上與上述的lr,fm和ffm並不在一個層級上,fm和ffm都是一種建模算法,而ftrl本質上是一種優化算法,ftrl也可以用來優化fm和ffm。不過最常用的是用ftrl來優化lr來獲得稀疏解。在各類機器學習訓練任務中,為了避免過擬合,通常會在目標函數上增加L2范數的正則項以提高泛化性,另一種常用的正則項是L1范數,其能起到特征選擇的作用。對於添加了L2范數的損失函數,一般的sgd優化算法就能較好得優化,對於L1范數,雖然其也是凸函數,但是由於L1范數在零點不可導,sgd在優化時通常會用次梯度代替梯度。但是使用次梯度在優化很難獲得稀疏解(為什么?),而這催生了一些針對求解稀疏解的在線最優化算法。
如:截斷梯度法,FOBOS算法,RDA算法以及FTRL算法。它們本質上都是優化算法,可以作用於大部分使用了稀疏正則項的目標函數中。這類算法主要適用的場景時高維高數據量的場景,解的稀疏性一方面起到了特征選擇的作用,另一方面能夠加速預測時間。
ftrl算法是基於多個算法發展而來,我從頭捋一遍(參考馮揚的《在線最優化求解》,具體細節可以看那篇文章):-
L1正則化法
梯度下降時對L1范數用的是次梯度進行更新,而這會導致求得的系數沒有稀疏性。 -
簡單截斷法
每隔K步(t mod K = 0 )都對梯度進行一次截斷,其他步(t mod K !=0)按照一般的梯度下降更新參數(不考慮L1范數) -
截斷梯度法(TG)
截斷梯度法與簡單截斷法比較像,也是每隔K步進行截斷,其他步是常規更新參數,與簡單截斷法不同的是,TG采用的截斷函數不同
-
FOBOS,RDA和FTRL算法
這里這要對比這幾種算法的優缺點:
總結一下就是:FOBOS的優點是限制了W的變化不能離已迭代得到的解太遠,缺點是產生的解相比RDA求得的解稀疏性不足,且其每次判斷是否對每個維度進行截斷時只考慮了當次迭代該維度的梯度變化,而RDA則考慮了過去所有迭代該維度梯度變化的平均值,避免了由於當此迭代該維度訓練不足引起的梯度截斷。RDA的缺點是只限制了W的變化不能離0點太遠,而FTRL則結合了FOBOS和RDA的優點。 -
ftrl中,每個維度的學習率是單獨考慮的(per-coordinate learning rates)
-
-
DeepFM
說到deepfm,就要說到神經網絡相關算法在ctr方面的進展。為了便於理解,我們從最開始的 矩陣分解算法說起
(一個deepfm講得比較好的博客:https://blog.csdn.net/w55100/article/details/90295932 )
- Deep Interest Network
- Behavior Sequence Transformer for E-commerce
Recommendation in Alibaba - Deep Session Interest Network for Click-Through Rate Prediction
算法性能比較:
只用了 movielen100k 中的u1.base 作為訓練和驗證,采用5-fold交叉驗證方法評估各個算法在驗證集的上mse。u1.base 涉及用戶 900+,涉及電影 1600+, 數據量為8w。沒有經過特別復雜的調參工作
算法 | validation mse |
---|---|
fm | 1.18 |
ffm | 1.20 |
ftrl | 1.14 |
deepfm | 1.56 |
xgboost | 1.22 |
lightgbm | 1.23 |
分析:
fm 和 ffm在只有兩個field的時候效果理論上是一致的,這里的結果來看也基本一致。比較令人驚訝的是ftrl竟然是效果最好的,比二階的算法效果都好,可能是因為ftrl針對每個特征都會單獨學習一個學習率。
總結:
ctr算法可以分類兩大類,一類走的是傳統機器學習算法的路線,另一類是走的神經網絡的路徑(因為不夠深,暫且不叫他深度學習,哈哈)。
傳統算法是主流也非常有效:lr/gbdt/fm/ffm/
神經網絡也在發展中:wide&deep/deepfm