參考文獻:https://www.zhihu.com/question/34819617
id 類特征 會極大提高模型的個性化能力和實際效果。而且可以對抗熱度穿透現象。 假設一個最簡單的問題,預估廣告的點擊率CTR。為了便於討論,假設你只有一個特征,就是每次展現廣告在過去一個時間窗內的歷史點擊率ctr,現在目標是預測下一次點擊的ctr。簡單起見,不妨假設系統中只有兩條候選廣告。 顯而易見,預測分數是和ctr正相關的。如果你使用的是離散LR,那么在分段之后,顯然ctr越高的分段上權重越大。這個模型實際跑起來就是最簡單的“熱門廣告”的效果。 現在你加入了一個新的特征,叫做設備id(更理想的情況當然是用戶id)。那么你會發現,對於不同的用戶id,也許能學出來一些權重。但是模型打分的排序應該基本是不變的。那么你會問:那這特征加進來有蛋用?
當然有,假設最極端的情況,整個廣告系統只有2個設備,一個設備屬於普通用戶,一個設備屬於一個惡意的刷子(他專門用腳本點擊某個廣告以使得這條廣告有更高幾率被浮現)。那么由於普通用戶他看到廣告后實際點擊率是比刷子低的。那么模型就學到了:導致廣告更高點擊率的原因其實是用戶id。那么經過機器學習之后,刷子這個id的權重就高了,而ctr的權重就低了。那么相對來講,盡管每個人看到的排序是一樣的,但是其中刷子的刷分行為效果就被大大降低了。
所以你在這里看到了第一個有趣的現象:直接加入id類特征,盡管並不能實現完全的個性化,但是可以把每個用戶的行為模式區分開,從而提高了其他特征的泛化能力。
再進一步地想:每個人對廣告的喜好是一樣的,這科學嗎?那我希望模型對每個人的排序效果都不一樣,這樣廣告系統就更加個性化了呀! 於是你又增加了一個特征,叫做 設備id x 歷史ctr。那么因為有了這個組合特征,LR就能學習到組合的信息。他實際的效果,就相當於對每個設備id建立了一個只有一個歷史ctr作為特征的LR模型。那么這個模型,想必是比原始的模型效果更好的了。 所以到這里你應該能發現加入id類特征的價值了:
- 可以使得在學習過程中,每個人的信號更合理地影響整體模型,使得模型泛化能力更好
- 可以使得模型能夠對每個id有更細粒度的排序能力,使得模型的個性化效果更好。
1. id類特征上的信號是極其稀疏的,所以這意味着我們需要更大量的數據。但是其實這並沒有想象中的難,計算廣告、推薦系統這種機器學習場景中,單個id上收集的數據其實非常多。但是一定要通過正則的方法來限制以使得id類特征不過擬合。
2. id類特征在預測中的命中率可能並不高,但這其實也不是問題。因為一個特征就是一個體系,一個體系化的特征是通過層次化的特征設計來達到命中率和個性化的綜合。比如說 用戶id->用戶GPS坐標+用戶喜好Tag+用戶最近行為->用戶年齡、用戶性別。通過分層的,由最細粒度到最粗粒度的特征搭配來保證特征命中率
3. 組合。單獨的id類特征是意義並沒有那么高,有意義的是不同層次的交叉組合。這取決於業務理解和特征工程手法。
模型和算法。實際上,LR是適合使用ID類特征的,原因在於LR適合接受超高維度的特征輸入。對於XGBoost、DNN,這么高維度的特征進來,在工程和算法上都有挑戰。然而其實針對這種超高維度特征灌入Tree、NN模型的方法,並不難想到,就是Embedding。