久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    HuJiangtang: sas分類模型的混淆矩陣性能評估

     kieojk 2016-07-03

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

    1. 這些評估指標,都是可以用白話(plain English, 普通話)解釋清楚的;
    2. 它們是可以手算出來的,看到各種軟件包輸出結果,并不是一個無法探究的“黑箱”;
    3. 它們是相關的。你了解一個,就很容易了解另外一個。

    本文從混淆矩陣(Confusion Matrix,或分類矩陣,Classification Matrix)開始,它最簡單,而且是大多數(shù)指標的基礎。

    數(shù)據(jù)

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

    Train data
    good_bad    Frequency     Percent
    -------------------------------------------
    bad               154              25.67
    good             446              74.33
    
    Valid data
    good_bad    Frequency     Percent
    --------------------------------------------
    bad               146              36.50
    good             254              63.50

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

    約定

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

    模型

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

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

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

    Analysis of Maximum Likelihood Estimates
    
    Standard     Wald
    Parameter    DF    Estimate       Error     Chi-Square    Pr > ChiSq
    
    Intercept     1      0.6032      0.4466        1.8242        0.1768
    checking      1     -0.6536      0.0931       49.3333        <.0001
    history         1     -0.4083      0.0980       17.3597        <.0001
    duration      1      0.0248     0.00907        7.4820        0.0062
    savings        1     -0.2017      0.0745        7.3308        0.0068
    property      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)

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

    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;

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

    good_bad       p       good_bad_predicted
    bad       0.61624       bad
    bad       0.03607       good
    good      0.12437      good
    good      0.21680      good
    good      0.34833      good
    good      0.69602      bad
    bad       0.68873       bad
    good      0.48351      good
    good      0.03288      good
    good      0.06789      good
    good      0.61195      bad
    good      0.15306      good

    Confusion Matrix, 混淆矩陣

    一個完美的分類模型就是,如果一個客戶實際上(Actual)屬于類別good,也預測成(Predicted)good,處于類別bad,也就預測成bad。但從上面我們看到,一些實際上是good的客戶,根據(jù)我們的模型,卻預測他為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

    其中,

    1. a是正確預測到的負例的數(shù)量, True Negative(TN,0->0)
    2. b是把負例預測成正例的數(shù)量, False Positive(FP, 0->1)
    3. c是把正例預測成負例的數(shù)量, False Negative(FN, 1->0)
    4. d是正確預測到的正例的數(shù)量, True Positive(TP, 1->1)
    5. a+b是實際上負例的數(shù)量,Actual Negative
    6. c+d是實際上正例的個數(shù),Actual Positive
    7. a+c是預測的負例個數(shù),Predicted Negative
    8. b+d是預測的正例個數(shù),Predicted Positive

    以上似乎一下子引入了許多概念,其實不必像咋一看那么復雜,有必要過一下這里的概念。實際的數(shù)據(jù)中,客戶有兩種可能{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得到以上數(shù)字:

    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

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

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

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

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

    誤分類率=錯誤預測的正反例數(shù)/總數(shù)

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

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

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

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

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

    命中率=正確預測到的正例數(shù)/預測正例總數(shù)

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

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

    3.Specificity VS. PV-

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

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

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

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

    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;

    PV

    其中,準確率=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;

    數(shù)據(jù)valid_roc中有幾個我們感興趣的變量:

    • _PROB_:閾值,比如以上我們選定的0.5
    • _SENSIT_:sensitivity(覆蓋率,true positive rate)
    • _1MSPEC_ :1-Specificity,為什么提供1-Specificity而不是Specificity,下文有講究。
    _PROB_ _SENSIT_ _1MSPEC_
    
    0.54866 0.26712 0.07087
    
    0.54390 0.27397 0.07874
    
    0.53939 0.28767 0.08661
    
    0.52937 0.30137 0.09055
    
    0.51633 0.31507 0.09449
    
    0.50583 0.32877 0.09843
    
    0.48368 0.36301 0.10236
    
    0.47445 0.36986 0.10630

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

    下期預告:ROC

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

    參考資料:

    1. Mithat Gonen. 2007. Analyzing Receiver Operating Characteristic Curves with SAS. Cary, NC: SAS Institute Inc.
    2. Dan Kelly, etc. 2007. Predictive Modeling Using Logistic Regression Course Notes. Cary, NC: SAS Institute Inc.
    3. Confusion Matrix, see http://www2.cs./~dbd/cs831/notes/confusion_matrix/confusion_matrix.html


      本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国语精品自产拍在线观看网站| 精品一区二区免费不卡| 精品久久久久中文字幕日本| 99中文字幕国产精品| 亚洲高清国产拍精品5G| 精品无码一区二区三区在线| 国产性一交一乱一伦一色一情| 综合色一色综合久久网| 情侣黄网站免费看| 香港日本三级亚洲三级| 国产精品久久久久久AV| 国产破外女出血视频| 色综合久久久久综合体桃花网| 成人亚欧欧美激情在线观看| 色伦专区97中文字幕| 国产超碰无码最新上传| 性做久久久久久久久| 久久99亚洲含羞草影院| 午夜无码区在线观看亚洲| 亚洲欧美日韩在线码| 99久久99久久加热有精品| 最新国产AV最新国产在钱| 日韩人妻无码一区二区三区 | 国模吧无码一区二区三区| 国产亚洲精品AA片在线爽| 日本边添边摸边做边爱的视频| 亚洲精品成人福利网站| 中文字幕无码AV激情不卡 | 国产成人综合在线女婷五月99播放| 天码AV无码一区二区三区四区| 黄色A级国产免费大片视频| 亚洲av无码成人精品区一区 | 九九电影网午夜理论片| 福利一区二区在线播放| 国产乱妇乱子在线视频| 国产情侣激情在线对白| 日韩av综合免费在线| 成人免费A级毛片无码片2022| 人人妻人人狠人人爽| 免费吃奶摸下激烈视频青青网| 99RE8这里有精品热视频|