標籤:

機器學習中如何利用id類特徵?

像用戶id這類特徵,我們採取獨熱編碼的形式利用它,但是往往它的維度很高啊,1000萬個用戶1000萬維特徵,需要做降維處理?還有我們為什麼要利用這類id類特徵?


謝邀:

使用id類做特徵在推薦系統、計算廣告、反欺詐風控模型里都有成功的案例。所以不存在目前排名第一的答主所說的有沒有用的問題,我個人認為他的一些觀點可能有些過時了。

事實是有用的。

問題是為什麼用(用了有啥好處),以及怎麼用。

一. 為什麼用

會極大提高模型的個性化能力和實際效果。而且可以對抗熱度穿透現象。

假設一個最簡單的問題,預估廣告的點擊率CTR。為了便於討論,假設你只有一個特徵,就是每次展現廣告在過去一個時間窗內的歷史點擊率ctr,現在目標是預測下一次點擊的ctr。簡單起見,不妨假設系統中只有兩條候選廣告。

顯而易見,預測分數是和ctr正相關的。如果你使用的是離散LR,那麼在分段之後,顯然ctr越高的分段上權重越大。這個模型實際跑起來就是最簡單的「熱門廣告」的效果。

現在你加入了一個新的特徵,叫做設備id(更理想的情況當然是用戶id)。那麼你會發現,對於不同的用戶id,也許能學出來一些權重。但是模型打分的排序應該基本是不變的。那麼你會問:那這特徵加進來有蛋用?

當然有,假設最極端的情況,整個廣告系統只有2個設備,一個設備屬於普通用戶,一個設備屬於一個惡意的刷子(他專門用腳本點擊某個廣告以使得這條廣告有更高几率被浮現)。那麼由於普通用戶他看到廣告後實際點擊率是比刷子低的。那麼模型就學到了:導致廣告更高點擊率的原因其實是用戶id。那麼經過機器學習之後,刷子這個id的權重就高了,而ctr的權重就低了。那麼相對來講,儘管每個人看到的排序是一樣的,但是其中刷子的刷分行為效果就被大大降低了。

所以你在這裡看到了第一個有趣的現象:直接加入id類特徵,儘管並不能實現完全的個性化,但是可以把每個用戶的行為模式區分開,從而提高了其他特徵的泛化能力。

再進一步地想:每個人對廣告的喜好是一樣的,這科學嗎?那我希望模型對每個人的排序效果都不一樣,這樣廣告系統就更加個性化了呀!

於是你又增加了一個特徵,叫做 設備id x 歷史ctr。那麼因為有了這個組合特徵,LR就能學習到組合的信息。他實際的效果,就相當於對每個設備id建立了一個只有一個歷史ctr作為特徵的LR模型。那麼這個模型,想必是比原始的模型效果更好的了。

所以到這裡你應該能發現加入id類特徵的價值了:

1. 可以使得在學習過程中,每個人的信號更合理地影響整體模型,使得模型泛化能力更好

2. 可以使得模型能夠對每個id有更細粒度的排序能力,使得模型的個性化效果更好。

二. 怎麼用

1. id類特徵上的信號是極其稀疏的,所以這意味著我們需要更大量的數據。但是其實這並沒有想像中的難,計算廣告、推薦系統這種機器學習場景中,單個id上收集的數據其實非常多。但是一定要通過正則的方法來限制以使得id類特徵不過擬合。

2. id類特徵在預測中的命中率可能並不高,但這其實也不是問題。因為一個特徵就是一個體系,一個體系化的特徵是通過層次化的特徵設計來達到命中率和個性化的綜合。比如說 用戶id-&>用戶GPS坐標+用戶喜好Tag+用戶最近行為-&>用戶年齡、用戶性別。通過分層的,由最細粒度到最粗粒度的特徵搭配來保證特徵命中率

3. 組合。單獨的id類特徵是意義並沒有那麼高,有意義的是不同層次的交叉組合。這取決於業務理解和特徵工程手法。

4. 模型和演算法。實際上,LR是適合使用ID類特徵的,原因在於LR適合接受超高維度的特徵輸入。對於XGBoost、DNN,這麼高維度的特徵進來,在工程和演算法上都有挑戰。然而其實針對這種超高維度特徵灌入Tree、NN模型的方法,並不難想到,就是Embedding。具體的技術不方便多說,可以關注我們的公司http://www.4paradigm.com


用one-hot encode處理ID是有這樣的應用的,而且還不少,典型的比如CTR預估。

如果決定這樣用,一般是不需要降維的。這種處理特徵的方式一般配合LR使用,完全有能力應對超高維度的數據而不會過擬合,並且數據維度可以隨著訓練過程擴展。

使用的原因就是好用而且速度快唄。


先確定有沒有用,沒有用的特徵果斷捨棄。

如果你對上一個問題的答案是「有用」,那麼你就知道應當如何用了。

這種用法肯定不是直接one-hot編碼,因為這樣編碼後每維特徵只會被激活一次,完全沒有泛化能力。

舉幾個例子:

  • 如果id是按用戶的註冊時間順序發放的數字:
    • 如果用戶的註冊時間(或者說使用一個網站的年限)對當前任務沒有用,則捨棄;
    • 如果其它特徵中已經有「註冊時間」或者「使用年限」,則這樣的特徵比id更好,同樣捨棄id;
    • 如果沒有其它特徵可以表示註冊時間或使用年限,則用id作為一個Interval scale的特徵(雖然它本身只是Ordinal scale的)。
  • 如果id是身份證號碼:
    • 從身份證號碼中可以提取出地域(Nominal scale)、出生日期(Interval scale)或年齡(Ratio scale)、性別(Nominal scale)等,擇其有用者保留。
  • 如果id是郵箱:
    • 郵箱的前綴基本上一定無用,後綴可以作為一個Nominal scale特徵進行one-hot編碼,若有用則保留。


一般來說ID類特徵本身沒有作用,比如userid和itemid都是根據設備號或者順序去分配。但是當ID特徵交互後,或者按照順序組合起來後就有意義。

比如,

1)userid和itemid交互後,也就是用戶對物品的評分矩陣,這時候就可以使用itemcf或svd等等;

2)把不同用戶的itemid的點擊序列作為訓練樣本,使用word2vec,對itemid進行embeding。


推薦閱讀:

TAG:機器學習 |