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