使用混淆矩陣對分類模型進行評估(Confusion matrix)

2021-02-19 藍鯨的商業分析筆記

我們在前面的文章中介紹過很多分類算法,如決策樹,樸素貝葉斯,邏輯回歸等。通過這些算法獲得的模型表現如何?能否準確的對數據進行分類和預測?本篇文章我們介紹一種對分類模型進行效果評估的方法:混淆矩陣(Confusion matrix)。 

混淆矩陣是對有監督學習分類算法準確率進行評估的工具。通過將模型預測的數據與測試數據進行對比,使用準確率,覆蓋率和命中率等指標對模型的分類效果進行度量。

我們通過一個示例來說明混淆矩陣的使用方法,下面是一組用戶貸款信息的數據,其中包括用戶的城市,性別,來源渠道等信息,以及用戶最終是否還款。我們使用邏輯回歸算法通過這組數據對新用戶是否還款進行分類預測,並使用混沌矩陣對預測模型的準確率進行評估。

首先我們將用戶貸款信息的數據分為兩組,第一組為訓練集,佔所有數據的70%,我們通過訓練集的數據計算參數並生成模型。第二組數據為測試集,佔所有數據的30%。我們使用測試集的數據對模型的分類結果進行測試,並使用混淆矩陣對測試結果進行評估。由於本篇文章的重點是介紹混淆矩陣,因此算法方面的內容只會簡單介紹。詳細方法和步驟請參考之前的文章。 

在使用訓練集數據生成邏輯回歸模型之前,我們先使用「互信息」計算出貸款數據中每個類別與最終還款結果的相關度。具體的計算方法請參考之前的文章《決策樹分類和預測算法的原理及實現》。通過下面表中的「互信息」數據排名可以發現,金額和年齡類別與用戶最終是否還款相關度較高。因此我們使用金額和年齡兩個類別來生成模型。

 

通過對數據進行清洗和整理,我們獲得了下面這個表,其中包含年齡,金額和用戶最終是否還款的狀態信息。0代表用戶已還款,1代表用戶未還款。

 

對上面的數據使用邏輯回歸算法,獲得下面的分類模型。具體計算方法和步驟請參考之前的文章《邏輯回歸算法的原理及實現(LR)》以下是邏輯回歸模型。 

將變量替換為用戶還款預測的場景中,就是下面的這個模型。接下來,我們將使用這個模型對測試集數據的狀態(未還款)進行分類預測,並將分類預測的結果與測試集數據中真實的狀態進行對比。使用混淆模型對模型預測的效果進行評估。 

首先我們列出測試集中的狀態,就是下表中的歷史數據。其中顯示了每個用戶的還款狀態。然後,我們根據邏輯回歸模型和測試集中的金額和年齡信息計算出每一條數據未還款的概率。並根據概率值判斷模型的預測結果,也就是這條數據最終是否還款。由於我們將未還款標記為1,因此概率值越高表示此條數據屬於未還款的概率越高。這裡我們使用P=0.5作為判斷還款狀態的依據。因為0.5是一個中間值,對兩種結果都沒有任何的傾向性。不過這裡需要說明的是P=0.5這個值是可以依據實際情況手動進行調整的。在P=0.5的情況下,下表中模型概率大於0.5的數據被分類為未還款。


完成對模型預測結果的分類後,我們使用混淆矩陣對預測的結果進行評估。下表是混淆矩陣,其中列是歷史數據,也就是測試集。行是模型預測,也就是根據預測概率的分類結果。歷史數據和模型預測都分為Positive(正)和Negative(負)兩類。模型的準確率數據就是根據Positive(正)和Negative(負)相互交叉的4組數據計算得出。下面我們將分別介紹混淆矩陣中每一個數據的含有和計算方法。


Positive表示我們感興趣的值,也就是為1的值。Negative表示另外一個值,為0的值。歷史數據中Positive表示為1的值,對於前面示例來說就是測試集中的未還款。Negative則表示已還款。模型預測中的Positive表示通過預測分類為未還款,Negative表示已還款。

True Positive簡稱TP,表示測試集中是Positive,模型預測結果是Positive的數據條目。

False Positive簡稱FP,表示測試集中是Negative,模型預測結果是Positive的數據條目。

False Negative簡稱FN,表示測試集中是Positive,模型預測結果是Negative的數據條目。

True Negative簡稱TN,表示測試集中是Negative,模型預測結果是Negative的數據條目。


將混淆矩陣代入到我們的模型預測場景中,Positive對應的是未還款,也就是我們標記為1的狀態。Negative對應的是已還款,標記為0的狀態。歷史數據的Positive表示測試集中的未還款數據,Negative表示已還款數據。模型預測中的Positive表示模型預測為已還款的數據,Negative表示為模型預測為已還款的數據。

True Positive簡稱TP,表示測試集中是未還款,模型預測結果是未還款的數據條目。

False Positive簡稱FP,表示測試集中是已還款,模型預測結果卻是未還款的數據條目。這裡犯了第一類錯誤「取偽」。

False Negative簡稱FN,表示測試集中是未還款,模型預測結果卻是已還款的數據條目。這裡犯了第二類錯誤」棄真」。

True Negative簡稱TN,表示測試集中是已還款,模型預測結果是已還款的數據條目。

為了方便計算和說明計算過程,我們使用a,b,c,d來代替TP,FP,FN和TN。以下為簡化後的混淆矩陣,及指標的計算方法。下面我們分別說明每個指標的計算公式。



準確率

準確率是模型正確預測未還款(Positive)和已還款(Negative)條目的比率,在P值=0.5的情況下,如果測試集的狀態是未還款(Positive),模型也預測是未還款(Positive)(P>0.5)則說明模型對這條數據的預測是正確的。已還款(Negative)數據也是同理。模型對未還款(Positive)和已還款(Negative)預測正確的數量與所有預測條目的比率就是準確率。以下為具體的計算公式。



誤分類率

誤分類率與準確率正好相反,是指模型錯誤預測未還款(Positive)和已還款(Negative)條目的比率,在P值=0.5的情況下,如果測試集的狀態是未還款(Positive),模型預測是已還款(p<0.5)則說明模型對這條數據的預測是錯誤的。已還款(Negative)數據也是同理。模型對未還款(Positive)和已還款預(Negative)測錯誤的數量與所有預測條目的比率就是誤分類率。還有一種計算方法就是1-準確率。以下為具體的計算公式。



命中率

命中率是模型預測的正確未還款(Positive)數量與模型預測的未還款(Positive)總量的比率。例如在P值=0.5的情況下,模型一共預測了100個未還款(Positive)條目,其中65個在測試集中是未還款(Positive)狀態,另外35個在測試集中是已還款(Negative)狀態。那麼覆蓋率就是65/(65+35)=65%。

 

負例命中率

負例命中率是模型預測的正確已還款(Negative)數量與模型預測的已還款(Negative)總量的比率。例如在P值=0.5的情況下,模型一共預測了100個已還款(Negative)條目,其中75個在測試集中是已還款(Negative)狀態,另外25個在測試集中是未還款(Positive)狀態。那麼負例覆蓋率就是75/(75+25)=75%.

 

覆蓋率

覆蓋率是模型預測的正確未還款(Positive)數量與測試集中未還款(Positive)總數的比率。簡單的說就是模型的預測結果覆蓋真實情況的比率。例如在P值=0.5的情況下,模型一共預測了55個未還款(Positive)條目,而測試集中一共有100個未還款(Positive)條目,55個被模型正確預測,45個沒有被模型正確預測,那麼覆蓋率就是55/(45+55)=55%

 

負例覆蓋率

負例覆蓋率與覆蓋率類似,是指模型預測的正確已還款(Negative)數量與測試集中已還款(Negative)總數的比率。例如在P值=0.5的情況下,模型一共預測了45個已還款條目,而測試集中一共有100個已還款條目,45個被模型正確預測,55個沒有被模型正確預測,那麼負例覆蓋率就是45/(45+55)=45%

 

在了解了混淆模型中的指標含義及計算方法後,我們對用戶還款模型的預測效果進行評估。在P值=0.5的情況下,所有大於0.5的值被標記為未還款。通過與訓練集中的歷史數據進行對比,所有預測數據被分為a,b,c,d四類。

第一條數據歷史數據為未還款(Positive),模型預測為未還款(Positive),屬於a類。

第二條數據歷史數據為已還款(Negative),模型預測為已還款(Negative),屬於d類。

第三條數據歷史數據為未還款(Positive),模型預測為已還款(Negative),屬於c類。

… …


對所有歷史數據和模型預測結果進行對比和分類後,我們獲得了混淆矩陣的數據表。在P值=0.5的前提下,覆蓋率為0.55,說明所有真實的未還款數據中有55%被模型正確預測,負例覆蓋率為0.97,說明所有真實的已還款數據中有97%被正確預測。命中率0.79,說明模型預測的所有未還款數據中有79%是正確的。負例命中率是0.91,說明模型預測的所有已還款數據中有91%是正確的。模型對於未還款和已還款的整體預測準確率為0.90。


單從模型整體準確率來看90%是個不錯的結果。但我們的感興趣的是那些未還款的用戶,也就是說我們希望預測出哪些用戶最終不會還款。從這個角度來看,測試集中所有真實的未還款數據只有0.55被模型準確預測出來。覆蓋率僅為55%,這個結果並不能讓人滿意。同時模型做出的所有未還款預測中命中率79%也並不高。模型還需要進一步調整和優化。

 END 


相關焦點

  • 模型評估之混淆矩陣(confusion_matrix)含義及Python代碼實現
    在前面的文章中我們講到了回歸模型和分類模型的評估指標,區分了準確率和精確率的區別,並且比較了精確率和召回率內在的聯繫。本篇文章我們再來學習另外一個評估方法,即混淆矩陣(confusion_matrix)。
  • 直播案例 | 使用KNN對新聞主題進行自動分類
    本案例旨在用新聞主題分類這一簡單任務演示機器學習的一般流程。具體地,我們使用了一個搜狐新聞數據集。使用 Python 的 jieba 分詞工具對中文新聞進行了分詞處理。然後使用 Scikit-learn 工具的 K近鄰算法構建 KNN 模型。最後對新聞分類的效果進行了簡單的分析。
  • 過來,我這裡有個「混淆矩陣」跟你談一談.
    我們可以對一百張圖片進行學習分類,其中包含 火星(40張),地球(40張),冰激凌(20張)三個種類;在算法學習過程中需要對每次的疊代分類結果進行精度評估,用到混淆矩陣這一工具。如下圖,每次疊代後列出當前各類別分類狀態的混淆矩陣。
  • 一文讀懂二元分類模型評估指標
    推薦閱讀時間:10min~12min文章內容:解讀二元分類模型各種評估指標在分類模型中,有很多關於模型性能的評估指標(evaluation metric),比如 accuracy、precision、recall、f1-score、roc、auc、prc 等等。這裡慢慢梳理下這些指標的含義以及用途。
  • 機器學習中分類任務的常用評估指標和python代碼實現
    假設您的任務是訓練ML模型,以將數據點分類為一定數量的預定義類。一旦完成分類模型的構建,下一個任務就是評估其性能。
  • 機器學習第十篇:如何評價模型效果評估
    這一篇就針對機器學習算法的效果評估指標進行介紹。混淆矩陣混淆矩陣(confusion_matrix)是用矩陣的形式來表示分類情況,對角線元素表示預測標籤等於真實標籤的點的數量,是分類結果的一個絕對量,而不是比值,而非對角線元素是分類器誤標記的那些元素
  • 機器學習基本功 | 從 Confusion Matrix 開始說起
    我們可以把結果畫這麼一個表:這個表就稱為 confusion matrix 。上面的 TP, FP, FN, TN 分別對應,ROC 和 ROC_AUC這個概念同樣和 confusion matrix 有關係。
  • 機器學習中分類問題常用評價指標總結
    是一種衡量二分類模型的評價指標,表示預測的正樣本排在負樣本前面的概率。後面會給出PR曲線和ROC曲線的實例進行說明。         多於兩個類別的問題,稱為多分類問題。在多分類的混淆矩陣中,正確分類的樣本分布在矩陣左上至右下的對角線上1. accuracy,即分類正確的樣本數(對角線上)與總樣本數的比值,預測的是全局樣本 2. 針對多分類問題中每一個類別,我們可以單獨計算各自的precision、 recall和F1值(後面給出了手動計算各個類別p、r、f1的實例)3.
  • 直播案例 | 使用感知機、邏輯回歸、支持向量機進行中文新聞主題分類
    進一步地,我們使用一份中文新聞數據集,利用 Sklearn.linear_model 模塊的 SGDClassifier 類分別構建感知機、邏輯回歸和線性支持向量機模型。最後,使用混淆矩陣對新聞主題分類的效果進行了評估。1 生成數據集首先使用 sklearn 中的 datasets 模塊生成一個隨機的二分類數據集。
  • 【翻譯】Sklearn 與 TensorFlow 機器學習實用指南 —— 第3章 分類(上)
    >>> sgd_clf.predict([some_digit])array([ True], dtype=bool)分類器猜測這個數字代表 5(True)。看起來在這個例子當中,它猜對了。現在讓我們評估這個模型的性能。對性能的評估評估一個分類器,通常比評估一個回歸器更加玄學。
  • 深度學習多種模型評估指標介紹 - 附sklearn實現
    8、常用分類指標confusion_matrixSklearn中confusion_matrix函數混淆矩陣是機器學習中總結分類模型預測結果,混淆矩陣是展示了真實數據的正負類別和模型預測的分類的正負的類別(可以是多分類
  • 使用python+sklearn實現度量和評分
    在此章節上沒有討論該方法的使用,但每個估計器的文檔章節中都對此方法進行了討論。評分參數:使用交叉驗證(例如 model_selection.cross_val_score和 model_selection.GridSearchCV)的模型評估工具依賴於一個內部評分策略。這在「評分參數:定義模型評估規則」的章節中進行了討論。
  • 萬字長文總結機器學習的模型評估與調參|附代碼下載
    「管道工作流」這個概念可能有點陌生,其實可以理解為一個容器,然後把我們需要進行的操作都封裝在這個管道裡面進行操作,比如數據標準化、特徵降維、主成分分析、模型預測等等,下面還是以一個實例來講解。k折交叉驗證步驟:Step 1:使用不重複抽樣將原始數據隨機分為k份;Step 2:其中k-1份數據用於模型訓練,剩下的那1份數據用於測試模型;Step 3:重複Step 2 k次,得到k個模型和他的評估結果。
  • 使用Python+PCA+SVM算法實現人臉識別模型
    因此我們開源使用另一種減少特徵數量(減少數據維數)的方法,通過提取重要信息並刪除不重要的信息來創建新的特徵,這樣,我們的信息就不會丟失,但起到減少特徵的作用,而我們模型的過擬合機率也會減少。支持向量機支持向量機(SVM)是一種用於兩組分類問題的有監督機器學習模型,在為每個類別提供一組帶標籤的訓練數據後,他們能夠對新的測試數據進行分類。支持向量機基於最大化間隔的平面對數據進行分類,決策邊界是直的。
  • Machine Learning-模型評估與調參(完整版)
    「管道工作流」這個概念可能有點陌生,其實可以理解為一個容器,然後把我們需要進行的操作都封裝在這個管道裡面進行操作,比如數據標準化、特徵降維、主成分分析、模型預測等等,下面還是以一個實例來講解。1.1 數據導入與預處理本次我們導入一個二分類數據集 Breast Cancer Wisconsin,它包含569個樣本。
  • [算法]機器學習分類模型評估指標
    有些應用場景更關注整樣本的準確率,比如:欺詐檢測,只關注欺詐用戶是否檢測出來,本身欺詐用戶在整個用戶都是百分之幾,所以只關注模型在正樣本上是否表現好,這種情況下使用ROC來進行判斷,模型還是面積大的為好,