Binary classification - 聊聊评价指标的那些事儿【实战篇】
分類問題就像披著羊皮的狼,看起來天真無害用起來天雷滾滾。比如在建模前你思考過下面的問題么?
- 你的分類模型輸出的概率只是用來做樣本間的相對排序,還是概率本身?
- 你的訓練數據本身分布如何是否存在Imbalanced Sample?
要是您都想到了拜拜?。要是有1各您感興趣的問題,那就接著往下看吧。本來是想先回顧一下各個分類問題中可能用到的metric,但是又覺得讀的人可能覺得無聊,就分成了兩章。要是有的指標斷片了就來這里回憶一下: 回憶篇
問題1 Rank or Probability?
分類問題可以根據對輸出形式的要求分成兩類
有人會問,上述兩種需求究竟對解決一個二分類問題有什么影響? 答案是損失函數/評價指標
讓我們來看一個直觀的例子,下圖我們嘗試用LightGBM解決一個二分類問題,我們選擇的擬合指標是最大化AUC。
X軸是預測概率,Y軸是真實概率,藍線是LGB的預測結果,綠線對應真實概率=預測概率。為什么模型的AUC高達98.93%(這里還有ImbalancedSample的影響,讓我們先忽略這一點),但是預測概率和真實概率卻差到了姥姥家。
讓我們對預測概率再做一層處理,黃線可以簡單理解為我們對LGB的預測結果做了一層映射 \(\hat{p} \to f(\hat{p})\),這時校準后的預測概率和真實概率基本一致了。但是有趣的是校準后的預測概率AUC = 98.94%和原始預測基本沒差別?!
Duang Duang Duang!敲黑板!AUC是對相對概率排序的檢驗!其實只要用心(我學AUC的時候一定沒用心>_<)看一下AUC的計算方式就會發現,AUC只關心給定各個閾值,把樣本按照預測概率分成0/1,并計算正負樣本預測的準確率。
舉個最夏天的例子,兩個瓜一個甜一個不甜,我們訓練一個西瓜模型來預測它們甜(1)/不甜(0)。
模型1: 甜的瓜預測概率是0.8,不甜的瓜預測概率是0.1,
模型2: 甜的瓜預測概率是0.51,不甜的瓜預測概率是0.49
兩個模型的AUC是相同的,因為它們都完美對兩個瓜進行了分類。
所以當使用最大化AUC作為損失函數時,當正負樣本的預測準確率不再提高,模型就會停止學習。這時模型的預測概率并不是對真實概率的擬合。那如何才能得到對真實概率的預測? 答案是logloss/cros-entropy
\[ \begin{align} L &= \sum_{i=1}^N y_i * log(p_i) + (1-y_i) *log(1-p_i)\\ \end{align} \]
我們可以從兩個角度來理解為什么logloss是對真實概率的估計
從極大似然估計的角度
logloss可以由極大似然函數取對數得到,最小化logloss對應的最大化似然函數。\(p_i\)是對\(p(y_i=1)\)的估計
\[ argmax_p \prod_{i=1}^N {p_i}^{y_i} * {(1-p_i)}^{1-y_i} \]
從信息論的角度
不熟悉信息論的同學看這里 Intro to Information Theory
logloss也叫cross-entropy(交叉熵),用來衡量兩個分布的相似程度。
交叉熵本身可以分解為P本身的信息熵+分布P和分布q之間的距離。這里P是樣本的真實分布信息,信息熵一定。所以最小化交叉熵就變成了最小化分布p和q之間的距離,也就是樣本分布和模型估計間的距離,如下
\[ \begin{align} crossentropy &= H(p,q)\\ &= -\sum_{c=1}^C p(c) * log(q(c))\\ & = - \sum_{c=1}^C p(c) * log(p(c)) + \sum_{c=1}^C p(c)[log(p(c) - log(q(c)))] \\ &= H(p) + KL(p||q)\\ \end{align} \]
乍一看會覺得交叉熵和logloss長的不像一家人。因為在訓練模型時分布p是從訓練樣本的分布中抽象得到的。二分類問題中C=2, 讓我們把上述交叉熵再推一步
\[ \begin{align} H(p,q) &= p *log(q) + (1-p) *log(1-q) \\ p& = \sum_{i=1}^N I(y_i=1)/N \\ H(p,q) &= \frac{1}{N} \sum_i I(y_i=1) *log(q)+ I(y_i=0) *log(1-q) \\ \end{align} \]
所以下次解決分類問題,如果你的目標是計算對真實概率的估計的話,別選錯指標喲�
興趣卡片- 預測概率校準
其實黃線用了Isotonic Regression來校準預測概率。是一種事后將預測概率根據真實概率進行校準的方法。感興趣的可以看一下Reference里面的材料1,2。原理并不復雜,但在分析特定算法,尤其是boosting,bagging類的集合算法為什么使用loggloss對概率估計依舊會有偏的部分蠻有趣的
問題2 Imbalanced Sample ?
正負樣本分布不均大概是分類問題中最常遇到的問題。正確解決Imbalane問題需要注意的并不只是評價指標,往往還要注意采樣和訓練集測試集的劃分。但這里我們只討論在解決樣本分布不均的問題時,我們應該選擇什么指標來評價模型表現。讓我們挨個來剔除不好用的指標。
舉個極端的例子,100個樣本里只有1個正樣本
Accuracy
這種情況下即便我們全部預測為負,我們的準確率依舊高達99%。所以Accuracy只適用于正負樣本均勻分布的情況,因為它把正負樣本的預測準確率柔和在一起看了。
AUC
AUC是fpr和tpr(recall)組成的ROC的曲線下面積。還記得我們在【回憶篇】里面說過fpr,tpr是分別衡量在正負樣本上的準確率的。
而fpr和tpr之間的trade-off,在正樣本占比很小的情況下,這種trad-off會被樣本量更大的一方主導。所以當正樣本占比很小的時候,AUC往往會看起來過于優秀。
但就像硬幣的正反面一樣,從另一個角度看這也是AUC的優點,就是AUC本身不會很大的受到樣本實際分布的影響,相同的模型相同的樣本,你把正樣本downsample /upsample 1倍,AUC不會有很大的改變。
下圖來自An introduction to ROC analysis, 上面的AUC和PR是正負樣本1:1的預測表現,下面是1:10的表現。我們會發現AUC基本沒有變化,但是precision-recall發生了劇烈變化。
AP/AUCPR
AP是recall和precision組成的PR的曲線下面積。這里recall和precision分別從真實分布和預測分布兩個角度衡量了對正樣本的預測準確率。說到這里已經有人反應過來了。是的這一對trade-off指標都是針對正樣本的,在計算中沒有用到True negative.所以當你的數據集存在Imbalance的時候,AP一般會是更好的選擇。
...你還遇到過啥問題嘞?歡迎留言
Reference
轉載于:https://www.cnblogs.com/gogoSandy/p/11123688.html
總結
以上是生活随笔為你收集整理的Binary classification - 聊聊评价指标的那些事儿【实战篇】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle函数 trunc(x[,y
- 下一篇: oracle自动选择索引