比如我們要開個網站賣書,使用LR模型預估一下用戶點擊某本書的概率。
1 為什么選用LR
- 離線訓練和在線預測非常快
- 內存占用少
- 效果跟xgboost、深度模型差不多
- 模型簡單,方便調參
- 模型易於解釋,排查問題方便
第4點和第5點非常重要,工作實踐中大多數時間都是在排查問題,根據badcase調參數。
2 特征選擇
用戶側特征:uid、性別、年齡、城市、like_words、等等
商品側特征:itemid、價格、出版社、key_words、等等
匹配特征:like_words和key_words的交集、等等
上下文特征:瀏覽時間、入網方式、客戶端、等等
2.1 盡量不用統計特征
有些統計特征對預測點擊率非常有用,比如:這本書歷史上的點擊率、用戶平均每個月買幾本書、圖書的好評率/銷量是多少。但是不建議使用這些統計特征,原因有二:
- 在構造樣本時統計類特征很容易出錯,因為統計類特征是動態變化的。比如圖書銷量,你要統計每一次特征的瀏覽發生之前該圖書的銷量,那才是用戶當時看到的銷量。這種統計方法說起來也不復雜,但實操過程中很容易出錯。
- LR僅利用大規模離散特征就能取得不錯的效果。用戶和圖書歷史的點擊率通過uid和itemid這兩個特征就可以學習到,當然這兩個特征必須要one-hot。
2.2 一定要找到影響點擊率的主要特征
什么是“主要特征”?如果該特征取不同的值可能會導致點擊率有十倍百倍的差異,且該特征的不同取值在樣本中的占比都比較大。按照這個定義,你可能會發現like_words和key_words的交集並不是主要特征,而圖書的展現位置才是,第2頁的點擊率跟第一頁的點擊率可能會差10倍之多。
如果不把主要特征加進來,模型可能就是失效的。
2.3 可以使用替代特征
如果某些比較好的特征甚至是主要特征,剛好是統計類特征,怎么辦?盡量找到表態特征替代它。舉例:
用戶過去1個月登錄過幾次 --> 用戶的app版本號。這兩個特征都可以把比較活躍和非常不活躍的用戶區分開。
用戶下單頻率 --> 用戶的會員等級。這兩個特征都可以把經常購物和不經常購物的用戶區分開。
4 特征的形式
LR模型適合使用大規模離散特征,xgboost適合使用小規模統計類的連續特征。在使用時LR,連續特征只需要進行簡單的離散化操作,比如直接用round,或者先取對數再round。
4.1 one-hot
把所有特征都離散化之后,再進行one-hot,這樣id類的特征會變成高維稀疏特征,比如你有1億個用戶,那么光uid就對應1億個特征。訓練模型時只需要針對那些非 0 的維度更新相應的參數就可以了,模型訓練的 時間復雜度只跟 X 的非 0 維度數有關。同樣,模型存儲時只存儲有過更新的參 數即可,內存開銷與 X 的總維度沒有關系。
4.2 特征哈希
one-hot 形式得知道總共有多少種取值,才 能對各個取值編號,在線實時訓練模型時我們不可能事先取得所有的樣本,也 就無法窮舉離散特征的所有取值。一種解決辦法是將特征哈希到一個固定的值 域,比如全國的城市數大概在 210 量級,可以把城市名哈希成 [1,214] 上的一個 整數,城市就用 214 維的 one-hot 向量來表示,不同城市被哈希為同一個數字的 概率幾乎為 0,且哈希之后的值直接對應 one-hot 向量中 1 元素的下標。
更簡單的方法是把所有特征都hash到同一個很大(比如2^64)的空間,即把uid、年齡、城市、itemid等等全部使用同一個hash函數進行映射,當然需要把特征名和特征值拼接起來再做hash。由於hash后的空間很大,所以不同特征之間沖突的概率很低。
4.3 特征組合
LR是線性模型,表達能力有限。模型不足,特征來補。通過人工組合特征來使LR具有非線性表達能力。比如“性別_男_手機_ios”可能是個有用的特征,通常兩個特征組合就可以了,超過3階的人工特征組合都沒有什么收益,這也是為什么xgboost的深度不建議超過5的原因。特征組合會導致特征維度極具膨脹,所以不建議高維特征(比如uid)跟其他特征進行組合,不建議高階組合。
其實樹模型學習的就是特征組合,所以可以用xgboost來代替人工的特征組合。
5 調參
這里的調參,指的是上線后根據發現的badcase來調整參數。
在CTR項目中一個好的模型主要在學習的就是item的熱度,試想一下你打算在電商網站上買一本機器學習相關的書,你大概率會點擊那些非常熱門的圖書,在大多數推薦場景中熱度高於個性化因素。
使用FTRL進行訓練的好處在於:學習率是動態調整的,且不同特征上的學習率是不同的。這一點在我的書里面有詳細的解釋。
有些場景下商品的熱度變化得比較快,模型需要及時感知到這種變化,itemid對應的學習率就需要調得大一些。
正則化的目的是防止模型去擬合少數的樣本。在你的系統中如果點擊率很低,則歷史樣本需要很多得到的點擊率才比較可信,此時需要加大itemid上的正則系數。