Binary classification - 聊聊評價指標的那些事兒【實戰篇】

分類問題就像披着羊皮的狼,看起來天真無害用起來天雷滾滾。好比在建模前你思考過下面的問題麼?html

  • 你的分類模型輸出的機率只是用來作樣本間的相對排序,仍是機率自己?
  • 你的訓練數據自己分佈如何是否存在Imbalanced Sample?

要是您都想到了拜拜👋。要是有1各您感興趣的問題,那就接着往下看吧。原本是想先回顧一下各個分類問題中可能用到的metric,可是又以爲讀的人可能以爲無聊,就分紅了兩章。要是有的指標斷片了就來這裏回憶一下: 回憶篇算法

問題1 Rank or Probability?

分類問題能夠根據對輸出形式的要求分紅兩類app

  1. 一種咱們只關心排序。好比電商場景下,用戶是否會回購某商品,咱們更關心用戶回購商品A的機率是否高於用戶回購商品B的機率,而後把回購機率更高的商品放在推薦列表前面。這時分類問題實際上是用來排序的。--樣本間的相對排序比較比絕對機率更重要
  2. 另外一種咱們關心機率。好比如今你們都在談增加,咱們想知道一個用戶明天在app活躍的機率,只知道用戶A比用戶B活躍的機率高並不夠,咱們須要明確知道用戶A活躍的機率,到底是90%仍是50%,這樣才能對高/低於特定機率的用戶進行必定(促活/喚醒)操做。這時分類問題是對真實機率的估計 --樣本的絕對機率須要接近真實機率,而且天極穩定

有人會問,上述兩種需求究竟對解決一個二分類問題有什麼影響? 答案是損失函數/評價指標ide

讓咱們來看一個直觀的例子,下圖咱們嘗試用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,並計算正負樣本預測的準確率。spa

舉個最夏天的例子,兩個瓜一個甜一個不甜,咱們訓練一個西瓜模型來預測它們甜(1)/不甜(0)。
模型1: 甜的瓜預測機率是0.8,不甜的瓜預測機率是0.1,
模型2: 甜的瓜預測機率是0.51,不甜的瓜預測機率是0.49
兩個模型的AUC是相同的,由於它們都完美對兩個瓜進行了分類。orm

因此當使用最大化AUC做爲損失函數時,當正負樣本的預測準確率再也不提升,模型就會中止學習。這時模型的預測機率並非對真實機率的擬合。那如何才能獲得對真實機率的預測? 答案是logloss/cros-entropyhtm

\[ \begin{align} L &= \sum_{i=1}^N y_i * log(p_i) + (1-y_i) *log(1-p_i)\\ \end{align} \]

咱們能夠從兩個角度來理解爲何logloss是對真實機率的估計

  1. 從極大似然估計的角度
    logloss能夠由極大似然函數取對數獲得,最小化logloss對應的最大化似然函數。\(p_i\)是對\(p(y_i=1)\)的估計
    \[ argmax_p \prod_{i=1}^N {p_i}^{y_i} * {(1-p_i)}^{1-y_i} \]

  2. 從信息論的角度
    不熟悉信息論的同窗看這裏 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

  1. https://www.kaggle.com/residentmaio/notes-on-classification-probability-calibration/
  2. Pedro G. Fonseca and Hugo D. Lopes. Calibration of Machine Learning Classifiers for Probability of Default Modelling
  3. https://en.wikipedia.org/wiki/Confusion_matrix
  4. Tom Fawcett,An introduction to ROC analysis
相關文章
相關標籤/搜索