1. 程式人生 > 實用技巧 >整合 ClickHouse資料庫,實現高效能資料查詢分析

整合 ClickHouse資料庫,實現高效能資料查詢分析

1、FFM理論

在CTR預估中,經常會遇到one-hot型別的變數,one-hot型別變數會導致嚴重的資料特徵稀疏的情況,為了解決這一問題,在上一講中,我們介紹了FM演算法。這一講我們介紹一種在FM基礎上發展出來的演算法-FFM(Field-aware Factorization Machine)。

FFM模型中引入了類別的概念,即field。還是拿上一講中的資料來講,先看下圖:
在這裡插入圖片描述

圖1、點選資料

在上面的廣告點選案例中,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”這三個特徵都是代表日期的,可以放到同一個field中。同理,Country也可以放到一個field中。簡單來說,同一個categorical特徵經過One-Hot編碼生成的數值特徵都可以放到同一個field,包括使用者國籍,廣告型別,日期等等。

為了使用FFM方法,所有的特徵必須轉換成“field_id:feat_id:value”格式,field_id代表特徵所屬field的編號,feat_id是特徵編號,value是特徵的值。數值型的特徵比較容易處理,只需分配單獨的field編號,如使用者評論得分、商品的歷史CTR/CVR等。categorical特徵需要經過One-Hot編碼成數值型,編碼產生的所有特徵同屬於一個field,而特徵的值只能是0或1,如使用者的性別、年齡段,商品的品類id等。除此之外,還有第三類特徵,如使用者瀏覽/購買品類,有多個品類id且用一個數值衡量使用者瀏覽或購買每個品類商品的數量。這類特徵按照categorical特徵處理,不同的只是特徵的值不是0或1,而是代表使用者瀏覽或購買數量的數值。按前述方法得到field_id之後,再對轉換後特徵順序編號,得到feat_id,特徵的值也可以按照之前的方法獲得。

在FFM中,每一維特徵 x i x_{i} xi ,針對其它特徵的每一種field f i f_{i} fi ,都會學習一個隱向量 x i , f j x_{i,f_{j} } xi,fj 。因此,隱向量不僅與特徵相關,也與field相關。也就是說,“Day=26/11/15”這個特徵與“Country”特徵和“Ad_type"特徵進行關聯的時候使用不同的隱向量,這與“Country”和“Ad_type”的內在差異相符,也是FFM中“field-aware”的由來。

假設樣本的n個特徵屬於 f個field,那麼FFM的二次項有nf個隱向量。而在FM模型中,每一維特徵的隱向量只有一個。FM可以看作FFM的特例,是把所有特徵都歸屬到一個field時的FFM模型。根據FFM的field敏感特性,可以匯出其模型方程。

y ( x ) = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , f j , v j , f i > x i x j y(x)=w_{0}+ \sum_{i=1}^n w_{i} x_{i}+ \sum_{i=1}^{n} \sum_{j=i+1}^n <v_{i, f_{j} }, v_{j, f_{i} }> x_{i} x_{j} y(x)=w0+i=1nwixi+i=1nj=i+1n<vi,fj,vj,fi>xixj

可以看到,如果隱向量的長度為k,那麼FFM的二次引數有nfk 個,遠多於FM模型的nk個。此外,由於隱向量與field相關,FFM二次項並不能夠化簡,其預測複雜度是 O(kn^2)。

下面以一個例子簡單說明FFM的特徵組合方式。輸入記錄如下:
在這裡插入圖片描述
圖2、通常資料

這條記錄可以編碼成5個特徵,其中“Genre=Comedy”和“Genre=Drama”屬於同一個field,“Price”是數值型,不用One-Hot編碼轉換。為了方便說明FFM的樣本格式,我們將所有的特徵和對應的field對映成整數編號。
在這裡插入圖片描述
圖3、FFM格式

那麼,FFM的組合特徵有10項,如下圖所示。
在這裡插入圖片描述
圖4、FFM的組合特徵

其中,紅色是field編號,藍色是特徵編號。

2、FFM實現細節

這裡講得只是一種FFM的實現方式,並不是唯一的。

2.1 損失函式

FFM將問題定義為分類問題,使用的是logistic loss,同時加入了正則項
m i n x ∑ i = 1 L l o g ( 1 + e x p { − y i ϕ ( W X i ) } ) + λ 2 ∥ W ∥ 2 \underset{x}{min} \sum_{i=1}^L log(1+exp\left\{-y_{i}\phi (W X_{i} ) \right\})+\frac{\lambda }{2} \left\|W\right\|^2 xmini=1Llog(1+exp{yiϕ(WXi)})+2λW2

什麼,這是logisitc loss?第一眼看到我是懵逼的,邏輯迴歸的損失函式我很熟悉啊,不是長這樣的啊?其實是我目光太短淺了。邏輯迴歸其實是有兩種表述方式的損失函式的,取決於你將類別定義為0和1還是1和-1。大家可以參考下下面的文章:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/6340129.html。當我們將類別設定為1和-1的時候,邏輯迴歸的損失函式就是上面的樣子。

2.2 梯度下降

梯度下降方法有很多種,根據為提高效率分別衍生了批量梯度下降,隨機梯度下降及小批量梯度下降,根據需求選擇即可

參考文獻

論文:Field-aware Factorization Machines for CTR Prediction

推薦系統遇上深度學習(二)–FFM模型理論和實踐

FM系列演算法解讀(FM+FFM+DeepFM)

C++版的FFM模型:libFFM

深入FFM原理與實踐

推薦好文: 深度學習在CTR預估中的應用