關於CTR廣告預估的分享
今天我想分享的是CTR廣告預估
之前一段時間做了kaggle上的CTR及其類似的專案
一般來說,做CTR問題,用到的演算法基本有LR,Random Forest,GBDT,FM以及FFM
這次我主要想分享這幾種演算法以及做資料處理時遇到的問題和收穫
在工業實際運用中,由於模型替換,資料分佈不一致,解決性不一致等限制,用到最多的還是LR,正如師兄所說,最簡單的,也是最難的。
CTR的核心問題主要是點選率
*廣告排序
– ECPM=CTR*Bid
– 排序時Bid已知,但CTR未知
*扣費
– CPCi = (CTRi+1*CPCi+1)/CTRi
– 當前廣告的扣費依賴當前及後一條廣告的CTR
所以,計算每條廣告的CTR是排序和扣費的核心
資料樣本過大
我們現在做的比賽樣本都比較小,幾個G上下,在自己的PC上還是能湊和的,但是在實際運用中,樣本往往會很大,往往達到幾百G,所以一般有兩種方法可以來處理:
1。下采樣:直到樣本大小達到我們能夠訓練的程度。注意在取樣時儘量讓樣本達到均衡的狀態如:正樣本取樣率多一點,負樣本取樣率少一些
2。藉助工具:Spark MLlib
http://
spark。apache。org/mllib/
資料維度過大
降維即可,方法如下:
1。可以把使用者名稱做一個聚類
2。可以將時間分段,達到降維的效果
tip:在處理大資料的時候,如果用pandas,不出意外,記憶體肯定會爆掉,所以推薦使用LIBSVM,這是臺灣大學的一位教授開發的一款簡單快捷的SVM模式識別與迴歸軟體包,這款軟體在資料處理(比如One-Hot Encoding後)能有效減少所需記憶體
從FM到FFM
FM和FFM模型是最近幾年提出的模型,因其在資料量比較大並且特徵稀疏的情況下,仍然能夠得到優秀的效能和效果的特性,屢次在CTR預估比賽中獲得不錯的戰績。
FM:有三個庫,臺大的LIBMF;原作者的LIBFM;還有上交的svdfeature
FFM:LIBFFM
關於這兩個演算法,網上已經有很多優秀的資料了,在這裡我主要講一下自己的理解
FM:
首先透過觀察大量的樣本資料可以發現,某些特徵經過關聯之後,與label之間的相關性就會提高。例如,“男人”和“遊戲”、“女人”與“化妝品”這樣的關聯特徵,對使用者的點選有著正向的影響。這種關聯特徵與label的正向相關性在實際問題中是普遍存在的,所以引入兩個特徵的組合是非常有意義的。
然而,在經過One-Hot Encoding之後,大部分樣本資料特徵是比較稀疏的,大多數樣本的維度都是零值,導致樣本資料的稀疏性。
其次,之前提過,需要引入兩個特徵的組合,但這也會導致特徵空間大。舉個栗子:如果類別有100維,那組合後的維度會達到100*100=10000,而且在組合中,絕大多數是零值,從而導致的結果有:1。太費電腦了2。模型結果不準。
為了解決此問題,我們將所有二次項引數Wij可以組成一個對稱陣W(W=(V^T)*V),V的第j列便是第j維特徵的隱向量。通俗來說,還是上面的例子,100維的類別組合後是10000個引數,但是如果我引入一個隱向量j:8,如下[100*8]*[8*100],結果是一樣的,而且[8*100]只不過是[100*8]的轉置,就可以大大減小引數個數和訓練的複雜度。
FFM:
然而,還是有人覺得FM的組合太硬了,可以有更靈活的組合方式,所以FFM應運而生。
在FFM中增加了“域”這個引數,比如說,“情人節”和“玫瑰”往往是有聯絡的,但是“情人節”和“春節”又有啥聯絡呢,所以它們之間的組合就是一種可恥的浪費,為了避免這種浪費,我們把“情人節”和“春節”歸到一個名叫“節日”的域當中,接下我們分別對特徵和域進行編號i、j,最後我們對不同域的不同特徵進行組合,來找出它們之間的聯絡,而且FFM不會帶來稀疏性的問題。
模型融合:
在實際運用中,我們常常會有將不同的演算法進行分散式處理,最後在進行模型的融合,舉個栗子:在kaggle的avazu比賽中rank2就分別用GBDT,FM,VM以及RF進行預測,根據各個模型最終的準確率給予不同的權重,最後將模型融合起來,達到了不錯的效果。
不多就這樣了,希望本文能夠幫到你!~!
最後打個小廣告,我的公眾號,喜歡寫點學習中的小心得,不介意可以關注下!~!