樣本極不均衡情況下的無效擬合問題
樣本極度不均衡,有時會出現一種無效擬合現象。簡單來說,就是模型會嘗試忽視少數類的誤差。但是總體也擬合的很好,in or out of samples的評測,auc等指標很高。
但是如果你的業務重視少數類,那麼這種擬合對你是無效的。
比如對廣告點擊率預估業務來說,絕大部分情況下都是不點擊,大概100個不點擊才有一個點擊,那如果模型把所有廣告都預測成不點擊,顯然我們的準確度也有100/101 = 0.999... ...
不過這種預測,意味著所有廣告都不用出了,公司收入為0,只好把演算法工程師捉來祭天... ...
怎麼判斷演算法出現了預測偏差問題呢? 核心關注下面幾個線索:
1)樣本不均衡;
2)in or out of samples的評測,max auc 或auc有提升;
3)預測值分布出現左偏現象(假設正樣本是1,負樣本是0)
去年12月,當我們在廣告模型中成功加入了一個新特徵後,演算法出現了這種嚴重的預測偏差。具體表現如下:
1) AUC 大幅提升;
AUC提升了4個點
2)logloss 降低;
從0.022降低到0.018
3)實際效果大幅下降,ctr、cpm都下降20%以上;
根據logloss降低,我們能推導出ctr預測出現了分布左偏現象。根據logloss計算公式:
logloss降低說明預測值肯定更低了(因為正樣本是少數類)。再從實際表現看,我們的預測效果很差,所以不是ctr分布的左移,而是出現了左偏現象(左移並不會帶來效果下降)。
以上線索,我們猜測這是一個擬合偏差問題,並且通過線上測試快速驗證了這點。對正樣本(少數類)做了最簡單upsample,線上對比效果如下:
ctr和cpm提升,效果有修正,也驗證了我們的猜測。
解決方案
有如下手段:
1) 對少數類進行上採樣;上採樣各種方法
2) 對大數類進行下採樣;也是有各種方法
3)做bagging 或者 boosting
4) 改造loss函數(加入class weight)
我們採用了第4種方法,因為簡單,簡單就是最吼的。。。 而且相對採樣,速度更快,效果也更好更穩定。
對Logistic Regression 改造如下:
在線上評測,收斂沒有問題,同時auc也沒有下降,而cpm和ctr取得了5%以上正向收益。
回頭來看評估指標
對不均衡樣本,光看auc、logloss、oe等評估值是不夠的,還需要引入apr、gauc等評估指標。這個下篇來講。
推薦閱讀:
※機器學習基礎與實踐(一)----數據清洗
※打開機器學習的黑盒——卷積神經網路原理介紹
※機器學習與數據挖掘網上資源
※2-2 Cost Function
※機器學習不僅僅是模型