AI分類模型評估指標:混淆矩陣、KS、AUC
分類模型的評估指標有混淆矩陣、KS、AUC等指標,而回歸模型的評估指標又有許多。那么,怎么理解這些指標呢?這篇文章里,作者針對相關指標做了解析,一起來看看吧。
上文介紹了模型構建的5個環節,在模型驗證環節,提到了評估模型性能的指標,其中分類模型的評估指標有混淆矩陣、KS、AUC等指標,而回歸模型的評估指標有MSE、RMSE、MAE等指標。
今天我們就來詳細了解一下分類模型的評估指標。
一、混淆矩陣
混淆矩陣是分類模型評估最基礎的指標,我們可以通過混淆矩陣直觀的看出分類模型預測準確和不準確的結果數量,進而簡單計算出找到了多少比例的壞人(召回率)、找到的壞人里面真正壞人的比例(精確率)、模型判斷正確的比例(準確率)等,而AUC、KS等高階指標的計算也依賴于混淆矩陣的數據。
那么到底什么是混淆矩陣呢?
還是以前文的薅羊毛項目為例,當然薅羊毛項目是多分類模型,我們這里簡化成二分類,便于理解。
我們選取了100名測試用戶信息,其中有30個薅羊毛用戶,我們稱之為“壞人”,70個正常的“好人”。模型預測結果分數的范圍是0到100分,技術同學給的參考閾值為60分,即60分以上的為“壞人”,60分以下的為“好人”。
輸入到模型后得到了100個預測結果,假設模型預測出了40個壞人,在這40個壞人中,有25個預測對了,15個預測錯了。
接下來,我們就可以把真實值和模型預測值,通過閾值得到的分類,填入到下表的混淆矩陣中:
混淆矩陣中,Positive表示正例,就是我們想要找出來的那個分類,Negative表示負例。結合薅羊毛項目,我們要找的“壞人”就對應了混淆矩陣的正例,“好人”對應了負例。
上表中得到了以下4種情況:
- TP(true positive):true表示模型預測結果是正確的,positive表示模型預測結果為正例(壞人),實際也是正例(壞人),那么TP值就是預測正確的壞人數=25人
- FP(false positive):false表示模型預測結果是錯誤的,positive表示模型預測結果為正例(壞人),實際上是負例(好人),那么FP值就是被誤判為壞人的好人數=15人(被誤傷、被誤判)
- FN(false negative):false表示模型預測結果是錯誤的,negative表示模型預測結果為負例(好人),實際上是正例(壞人),那么FN值就是被誤判為好人的壞人數=總壞人數30-預測正確壞人數25=5人(漏網之魚)
- TN(true negative):true表示模型預測結果是正確的,negative表示模型預測結果為負例(好人),實際也是負例(好人),那么TN值就是預測正確的好人數=總好人數70-被誤傷的好人數15=55人
所以,T和F代表模型預測結果的對錯,P和N代表模型預測結果是正例還是負例。
理論上,我們期望模型的TP值盡可能大,同時FP值盡可能小,就是盡可能多的找出真壞人,同時盡可能少的誤傷好人。
以上就是混淆矩陣的簡單介紹,我們會發現混淆矩陣中都是具體的數值,而數值是無法直接評估模型的好壞的,所以我們會在此基礎上,延伸出以比率來形容模型好壞的多項指標。
二、混淆矩陣的評估指標:準確率、精確率、召回率、F1
- 為了更直觀的評估模型,我們基于混淆矩陣延伸出了以下指標:
準確率(Accuracy):表示從全局的角度,模型分類正確的比率。模型正確分類人員(TP+TN)占全部人員(TP+TN+FP+FN)的比例,準確率=(25+55)/(25+55+15+5)=80% - 精確率(Precision):表示模型預測精度的指標。模型找出的總壞人數(TP+FP)中,真壞人數(TP)所占的比例,精確率=25/(25+15)=62.5%
- 召回率(Recall):也叫查全率,是判斷模型預測廣度的指標。模型找出的真壞人數(TP)占實際總壞人數(TP+FN)的比例,召回率=25/(25+5)=83.33%
準確率可以從全局的角度描述模型正確分類的能力,但在樣本數據不均衡的情況下,無法區分TP和TN的實際貢獻分別是多少,全局的準確率并沒有很強的“說服力”。
精確率用來描述模型識別的精確度,在掃臉、指紋識別等確定性要求較高的場景下,“寧缺毋濫”,可以側重考慮精確率的指標。
召回率用來描述模型識別的廣度,在薅羊毛項目的場景下,我們就要求“寧可錯殺一千,不可放過一個”,追求“除惡務盡”。
需要注意的是,精確率和召回率大概率是成反比的,想提升精確率,那么召回率就可能受影響,反之亦然。所以我們要結合具體的業務場景,找到兩個指標的平衡點。
而F1值就是用來綜合反映精確率和召回率的指標,F1=(2 x 精確率 x 召回率)/ (精確率 + 召回率),該值越大,說明精確率和召回率的綜合表現越好。
三、構建KS和AUC的基礎指標:TPR、FPR
KS和AUC是分類模型中常用的兩個綜合性指標,計算它們依然需要依賴混淆矩陣的基礎指標:TPR和FPR。
- TPR(True Positive Rate):也叫真正率、真陽率、靈敏度(Sensitivity),用來評估模型正確預測的能力。也就是模型找到真壞人(TP)占實際總壞人數(TP+FN)的比例,即 TP/(TP+FN),細心的朋友可能會注意到,這個公式就是召回率的公式,所以TPR也可以叫做召回率。
- FPR(False Positive Rate):也叫假正率、假陽率,用來評估模型誤傷好人的比率。也就是被模型誤傷的好人(FP)占實際總好人數(FP+TN)的比例,即FP/(FP+TN),也可以叫做誤傷率,更好理解一些。
四、繪制ROC曲線&計算AUC指標
構建模型的目的,肯定是期望盡可能多的找出真壞人,同時盡可能少的誤傷好人,也就是TPR越高越好、FPR越低越好。
ROC曲線就是用來表達TPR和FPR之間關系的曲線,接下來我們來看一下ROC曲線的繪制過程。
剛才得到混淆矩陣數據的時候,技術同學給了一個參考的閾值60分,我們根據閾值計算出了混淆矩陣的各項指標。
假設我們沒有確定的閾值,我們可以每10分進行分段(0、10、20、…100),逐一作為閾值,來分別計算TPR和FPR。那么情況大概有以下三類
- 閾值為0分時,即所有人的分數都超過閾值,所有人都被判斷為好人,此時沒有找到任何壞人,即TPR為0;沒有任何好人被誤判為壞人,所以FPR為0
- 閾值為100分時,所有人都被判斷為壞人,此時所有壞人全部落網,即TPR=1;所有好人全部被誤判為壞人,即FPR=1
- 閾值為0到100分之間的分數時,每一個閾值都會得到對應的TPR和FPR值,比如TPR=0.7,FPR=0.4
我們依次把閾值依次定位0、10、20,一直到100,就會得到一串TPR和FPR數據的集合,然后我們把FPR作為橫軸,TPR作為縱軸,把這些點在坐標系中連起來,就可以得到一條ROC曲線:
圖中藍色的曲線就是ROC曲線,圖中的虛線是隨機線,隨機線上每個點TPR和FPR的值都是一樣的,和瞎猜的效果差不多,所以我們以隨機線為基準,ROC曲線越貼近于隨機線說明效果越差,越貼近于左上方,說明效果越好,因為這意味著TPR更大,FPR更小。
我們可以把兩個ROC曲線放在一個坐標系內做比較,確實可以看出來哪個模型更好,但是圖像化的比較方式依然不夠直觀,所以我們需要想辦法將ROC曲線轉化成一個數字,方便溝通和比較。
這個值就是AUC指標,AUC指標其實就是ROC曲線右下方和橫坐標軸閉合起來的面積大小,這個面積越大,意味著越靠近左上方,召回率越大且誤傷率越小,效果也越好。
五、KS指標
KS曲線與ROC曲線非常相像,二者區別如下:
- ROC曲線的橫軸與縱軸分別是混淆矩陣中的FPR與TPR。而線上的每一個點,都是在不同閾值下得到的FPR與TPR的集合
- KS曲線就是把ROC曲線由原先的一條曲線拆解成了兩條曲線,原先ROC的橫軸(FPR)與縱軸(TPR)都在KS中變成了縱軸,而橫軸變成了不同的閾值
這樣我們就可以得到如下的KS曲線:
我們簡單了解一下縱軸的兩個指標:
- 靈敏度(Sensitivity),前面提到過,也就是TPR,對應圖中的黃色曲線
- 特異性(Specificity),也稱為真反例率(True Negative Rate,TNR),是真反例占所有實際為反例的比例,其計算公式為: Specificity = TN / (TN + FP),而FPR=FP/(FP+TN),所以FPR=1-Specificity,對應圖中的藍色曲線
總的來說,KS曲線是兩條線,其橫軸是閾值,縱軸是TPR與FPR。兩條曲線之間之間相距最遠的地方對應的閾值,就是最能劃分模型的閾值。
而KS值是MAX(TPR – FPR),即兩曲線相距最遠的距離。
不同的產品,合適的KS值范圍都不一樣,需要結合實際情況去摸索。
一旦確定合適的KS值范圍之后,如果模型的KS值過低,說明模型欠擬合,基本不可用,但KS值非常高也不一定是好事情,我們可能需要分析原因,判斷是否是因為數據問題導致的異常情況。
總結
本文介紹了分類模型常用的評估指標,讓大家對模型評估有了一個初步的概念。
下篇文章,我會詳細介紹回歸模型的評估指標,敬請期待。
本文由 @AI小當家 原創發布于人人都是產品經理,未經許可,禁止轉載
題圖來自 Unsplash,基于 CC0 協議
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
有一點沒懂,如何確定閾值?
閾值是自己根據業務情況定的,比如你們可以自己定50分,那么模型預測結果為55分時,判斷為positive,但是如果你們定的60分為閾值,那同樣的預測結果就判斷為negative了。閾值到底定多少應該可以通過計算不同閾值對模型結果準確度的影響來反推出最合理的閾值。應該是這個意思。
現實中你可以直接知道這個人是好人還是壞人,但是在系統中系統不知道,系統只會判斷。
根據算法對一個人的特征打分,0-100分,此時你要告訴系統究竟多少分是好人和壞人的分界線,但是你也不知道,你需要一套判斷依據定一個最優解。
判斷依據就是召回率(準確率)盡量高并且誤殺率盡量小,這就是AUC(算法沒看懂)。
你先拿0進去試(高于0分就是壞人),計算AUC1;再拿0.1去試,計算AUC1;再拿0.2去試,計算AUC3……..找出一個最大的AUC,對應的投入的值就是閾值。