日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵

發布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

跑完分類模型(Logistic回歸、決策樹、神經網絡等),我們經常面對一大堆模型評估的報表和指標,如Confusion Matrix、ROC、Lift、Gini、K-S之類(這個單子可以列很長),往往讓很多在業務中需要解釋它們的朋友頭大:“這個模型的Lift是4,表明模型運作良好。——啊,怎么還要解釋ROC,ROC如何如何,表明模型表現良好……”如果不明白這些評估指標的背后的直覺,就很可能陷入這樣的機械解釋中,不敢多說一句,就怕哪里說錯。本文就試圖用一個統一的例子(SAS Logistic回歸),從實際應用而不是理論研究的角度,對以上提到的各個評估指標逐一點評,并力圖表明:

  • 這些評估指標,都是可以用白話(plain English, 普通話)解釋清楚的;
  • 它們是可以手算出來的,看到各種軟件包輸出結果,并不是一個無法探究的“黑箱”;
  • 它們是相關的。你了解一個,就很容易了解另外一個。
  • 本文從混淆矩陣(Confusion Matrix,或分類矩陣,Classification Matrix)開始,它最簡單,而且是大多數指標的基礎。

    數據

    本文使用一個在信用評分領域非常有名的免費數據集,German Credit Dataset,你可以在UCI Machine Learning Repository找到(下載;數據描述)。另外,你還可以在SAS系統的Enterprise Miner的演示數據集中找到該數據的一個版本(dmagecr.sas7bdat)。以下把這個數據分為兩部分,訓練數據train和驗證數據valid,所有的評估指標都是在valid數據中計算(純粹為了演示評估指標,在train數據里計算也未嘗不可),我們感興趣的二分變量是good_bad,取值為{good, bad}:

    Train datagood_bad??? Frequency???? Percent-------------------------------------------bad?????????????? 154????????????? 25.67good???????????? 446????????????? 74.33Valid datagood_bad??? Frequency???? Percent--------------------------------------------bad?????????????? 146????????????? 36.50good???????????? 254????????????? 63.50

    信用評分指幫助貸款機構發放消費信貸的一整套決策模型及其支持技術。一般地,信用評分技術將客戶分為好客戶與壞客戶兩類,比如說,好客戶(good)能夠按期還本付息(履約),違約的就是壞客戶(bad)。具體做法是根據歷史上每個類別(履約、違約)的若干樣本,從已知的數據中考察借款人的哪些特征對其拖欠或違約行為有影響,從而測量借款人的違約風險,為信貸決策提供依據。Logistic回歸是信用評分領域運用最成熟最廣泛的統計技術。

    約定

    在我們的示例數據中,要考察的二分變量是good_bad,我們把感興趣的那個取值bad(我們想計算違約的概率),稱作正例(Positive, 1),另外那個取值(good)稱作負例(Negative, 0)。在SAS的Logistic回歸中,默認按二分類取值的升序排列取第一個為positive,所以默認的就是求bad的概率。(若需要求good的概率,需要特別指定)。

    模型

    如果沒有特別說明,以下所有的SAS代碼都在SAS 9.1.3 SP4系統中調試并運行成功(在生成ROC曲線時,我還會提到SAS9.2的新功能)。

    proc logistic data=train;model good_bad=checking history duration savings property;run;

    這個數據很整齊,能做出很漂亮的模型,以下就直接貼出參數估計的結果:

    Analysis of Maximum Likelihood EstimatesStandard???? WaldParameter??? DF??? Estimate?????? Error???? Chi-Square??? Pr > ChiSqIntercept???? 1????? 0.6032????? 0.4466??????? 1.8242??????? 0.1768checking????? 1???? -0.6536????? 0.0931?????? 49.3333??????? <.0001history???????? 1???? -0.4083????? 0.0980?????? 17.3597??????? <.0001duration????? 1????? 0.0248???? 0.00907??????? 7.4820??????? 0.0062savings??????? 1???? -0.2017????? 0.0745??????? 7.3308??????? 0.0068property????? 1????? 0.3157????? 0.1052??????? 9.0163??????? 0.0027

    回歸方程就是:

    logit[p(bad)]=log(p/1-p) =0.6032-0.6536*checking-0.4083*history+0.0248*duration -0.2017*savings+0.3157*property

    用下面的公式就可以求出正例的概率(bad的概率):

    p=exp(logit)/(exp(logit)+1)

    上式求出的是概率值,如何根據概率值把各個客戶歸類,還需要一個閾值,比如,這里我們簡單地規定,違約概率超過0.5的就歸為bad,其余為good。把上述公式代入valid數據中,

    data valid_p;set valid;logit=0.6032-0.6536*checking-0.4083*history+0.0248*duration-0.2017*savings+0.3157*property;p=exp(logit)/(exp(logit)+1);if p<0.5 then good_bad_predicted='good';else good_bad_predicted='bad';keep good_bad p good_bad_predicted;run;

    從下面的局部的數據valid_p可以看到,一些實際上是good的客戶,根據我們的模型(閾值p取0.5),卻預測他為bad(套用我們假設檢驗的黑話,這就犯了“棄真”的錯誤),對一些原本是bad的客戶,卻預測他為good(“取偽”錯誤),當然,對更多的客戶,good還預測成good,bad還預測成bad:

    good_bad?????? p?????? good_bad_predictedbad?????? 0.61624?????? badbad?????? 0.03607?????? goodgood????? 0.12437????? goodgood????? 0.21680????? goodgood????? 0.34833????? goodgood????? 0.69602????? badbad?????? 0.68873?????? badgood????? 0.48351????? goodgood????? 0.03288????? goodgood????? 0.06789????? goodgood????? 0.61195????? badgood????? 0.15306????? good

    Confusion Matrix, 混淆矩陣

    一個完美的分類模型就是,如果一個客戶實際上(Actual)屬于類別good,也預測成(Predicted)good,處于類別bad,也就預測成bad。但從上面我們看到,一些實際上是good的客戶,根據我們的模型,卻預測他為bad,對一些原本是bad的客戶,卻預測他為good。我們需要知道,這個模型到底預測對了多少,預測錯了多少,混淆矩陣就把所有這些信息,都歸到一個表里:

    預測 1 0實 1 d, True Positive c, False Negative c+d, Actual Positive際 0 b, False Positive a, True Negative a+b, Actual Negative b+d, Predicted Positive a+c, Predicted Negative

    其中,

  • a是正確預測到的負例的數量, True Negative(TN,0->0)
  • b是把負例預測成正例的數量, False Positive(FP, 0->1)
  • c是把正例預測成負例的數量, False Negative(FN, 1->0)
  • d是正確預測到的正例的數量, True Positive(TP, 1->1)
  • a+b是實際上負例的數量,Actual Negative
  • c+d是實際上正例的個數,Actual Positive
  • a+c是預測的負例個數,Predicted Negative
  • b+d是預測的正例個數,Predicted Positive
  • 以上似乎一下子引入了許多概念,其實不必像咋一看那么復雜,有必要過一下這里的概念。實際的數據中,客戶有兩種可能{good, bad},模型預測同樣這兩種可能,可能匹配可能不匹配。匹配的好說,0->0(讀作,實際是Negative,預測成Negative),或者 1->1(讀作,實際是Positive,預測成Positive),這就是True Negative(其中Negative是指預測成Negative)和True Positive(其中Positive是指預測成Positive)的情況。

    同樣,犯錯也有兩種情況。實際是Positive,預測成Negative (1->0) ,這就是False Negative;實際是Negative,預測成Positive (0->1) ,這就是False Positive;

    我們可以通過SAS的proc freq得到以上數字:

    proc freq data=valid_p;tables good_bad*good_bad_predicted/nopercent nocol norow;run;

    對照上表,結果如下:

    預測 1 0實 1,bad d, True Positive,48 c, False Negative,98 c+d, Actual Positive,146際 0,good b, False Positive,25 a, True Negative,229 a+b, Actual Negative,254 b+d, Predicted Positive,73 a+c, Predicted Negative,327 400

    根據上表,以下就有幾組常用的評估指標(每個指標分中英文兩行):

    1. 準確(分類)率VS.誤分類率

    準確(分類)率=正確預測的正反例數/總數

    Accuracy=true positive and true negative/total cases= a+d/a+b+c+d=(48+229)/(48+98+25+229)=69.25%

    誤分類率=錯誤預測的正反例數/總數

    Error rate=false positive and false negative/total cases=b+c/a+b+c+d=1-Accuracy=30.75%

    2. (正例的)覆蓋率VS. (正例的)命中率

    覆蓋率=正確預測到的正例數/實際正例總數,

    Recall(True Positive Rate,or Sensitivity)=true positive/total actual positive=d/c+d=48/(48+98)=32.88%

    /*注:覆蓋率(Recall)這個詞比較直觀,在數據挖掘領域常用。因為感興趣的是正例(positive),比如在信用卡欺詐建模中,我們感興趣的是有高欺詐傾向的客戶,那么我們最高興看到的就是,用模型正確預測出來的欺詐客戶(True Positive)cover到了大多數的實際上的欺詐客戶,覆蓋率,自然就是一個非常重要的指標。這個覆蓋率又稱Sensitivity, 這是生物統計學里的標準詞匯,SAS系統也接受了(誰有直觀解釋?)。 以后提到這個概念,就表示為, Sensitivity(覆蓋率,True Positive Rate)。 */

    命中率=正確預測到的正例數/預測正例總數

    Precision(Positive Predicted Value,PV+)=true positive/ total predicted positive=d/b+d=48/(48+25)=65.75%

    /*注:這是一個跟覆蓋率相對應的指標。對所有的客戶,你的模型預測,有b+d個正例,其實只有其中的d個才擊中了目標(命中率)。在數據庫營銷里,你預測到b+d個客戶是正例,就給他們郵寄傳單發郵件,但只有其中d個會給你反饋(這d個客戶才是真正會響應的正例),這樣,命中率就是一個非常有價值的指標。 以后提到這個概念,就表示為PV+(命中率,Positive Predicted Value)*。/

    3.Specificity VS. PV-

    負例的覆蓋率=正確預測到的負例個數/實際負例總數

    Specificity(True Negative Rate)=true negative/total actual negative=a/a+b=229/(25+229)=90.16%

    /*注:Specificity跟Sensitivity(覆蓋率,True Positive Rate)類似,或者可以稱為“負例的覆蓋率”,也是生物統計用語。以后提到這個概念,就表示為Specificity(負例的覆蓋率,True Negative Rate) 。*/

    負例的命中率=正確預測到的負例個數/預測負例總數

    Negative predicted value(PV-)=true negative/total predicted negative=a/a+c=229/(98+229)=70.03%

    /*注:PV-跟PV+(命中率,Positive Predicted value)類似,或者可以稱為“負例的命中率”。 以后提到這個概念,就表示為PV-(負例的命中率,Negative Predicted Value)。*/

    以上6個指標,可以方便地由上面的提到的proc freq得到:

    proc freq data=valid_p;tables good_bad*good_bad_predicted ;run;

    其中,準確率=12.00%+57.25%=69.25% ,覆蓋率=32.88% ,命中率=65.75% ,Specificity=90.16%,PV-=70.03% 。

    或者,我們可以通過SAS logistic回歸的打分程序(score)得到一系列的Sensitivity和Specificity,

    proc logistic data=train;model good_bad=checking history duration savings property;score data=valid outroc=valid_roc;run;

    數據valid_roc中有幾個我們感興趣的變量:

    • _PROB_:閾值,比如以上我們選定的0.5
    • _SENSIT_:sensitivity(覆蓋率,true positive rate)
    • _1MSPEC_ :1-Specificity,為什么提供1-Specificity而不是Specificity,下文有講究。
    _PROB_ _SENSIT_ _1MSPEC_0.54866 0.26712 0.070870.54390 0.27397 0.078740.53939 0.28767 0.086610.52937 0.30137 0.090550.51633 0.31507 0.094490.50583 0.32877 0.098430.48368 0.36301 0.102360.47445 0.36986 0.10630

    如果閾值選定為0.50583,sensitivity(覆蓋率,true positive rate)就為0.32877,Specificity就是1-0.098425=0.901575,與以上我們通過列聯表計算出來的差不多(閾值0.5)。

    下期預告:ROC

    以上我們用列聯表求覆蓋率等指標,需要指定一個閾值(threshold)。同樣,我們在valid_roc數據中,看到針對不同的閾值,而產生的相應的覆蓋率。我們還可以看到,隨著閾值的減小(更多的客戶就會被歸為正例),sensitivity和1-Specificity也相應增加(也即Specificity相應減少)。把基于不同的閾值而產生的一系列sensitivity和Specificity描繪到直角坐標上,就能更清楚地看到它們的對應關系。由于sensitivity和Specificity的方向剛好相反,我們把sensitivity和1-Specificity描繪到同一個圖中,它們的對應關系,就是傳說中的ROC曲線,全稱是receiver operating characteristic curve,中文叫“接受者操作特性曲線”。欲知后事如何,且聽下回分解。

    參考資料:

  • Mithat Gonen. 2007. Analyzing Receiver Operating Characteristic Curves with SAS. Cary, NC: SAS Institute Inc.
  • Dan Kelly, etc. 2007. Predictive Modeling Using Logistic Regression Course Notes. Cary, NC: SAS Institute Inc.
  • Confusion Matrix, see http://www2.cs.uregina.ca/~dbd/cs831/notes/confusion_matrix/confusion_matrix.html
  • from: http://cos.name/2008/12/measure-classification-model-performance-confusion-matrix/#more-567

    總結

    以上是生活随笔為你收集整理的分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。