
R語言與分類算法的績效評估
關(guān)于分類算法我們之前也討論過了KNN、決策樹、naivebayes、SVM、ANN、logistic回歸。關(guān)于這么多的分類算法,我們自然需要考慮誰的表現(xiàn)更加的優(yōu)秀。
既然要對分類算法進(jìn)行評價,那么我們自然得有評價依據(jù)。到目前為止,我們討論分類的有效性都是基于分類成功率來說的,但是這個指標(biāo)科學(xué)嗎?我們不妨考慮這么一個事實(shí):一個樣本集合里有95個正例,5個反例,分類器C1利用似然的思想將所有的實(shí)例均分成正例,分類成功率為95%;分類器C2成功分出了80個正例,3個反例,分類成功率僅83%。我們可以說分類器C2不如C1嗎?這就充分表明了,分類成功率掩蓋了樣本是如何被分錯的事實(shí)。
那么我們怎么來充分反映分類的好壞呢?一個普遍使用的辦法就是報(bào)告分類矩陣(又稱混淆矩陣),他可以幫助我們更好地理解分類情況,許多的分類評價指標(biāo)都是基于分類矩陣發(fā)展起來的。
一、考察數(shù)據(jù)與考察方法
當(dāng)然,分類器在一個數(shù)據(jù)集上的好壞說明不了任何問題。以一個數(shù)據(jù)集的表現(xiàn)來評價分類器性能對分類器而言是極端不公正的也是極端不科學(xué)的。但是我們這里因?yàn)槠拗?,也只能通過一個數(shù)據(jù)集來看看分類的好壞。我們使用一個在信用評分領(lǐng)域里大名鼎鼎的免費(fèi)數(shù)據(jù)集,German Credit Dataset,你可以在UCI Machine LearningRepository找到(下載;數(shù)據(jù)描述)。
我們把這個數(shù)據(jù)分為兩部分,訓(xùn)練數(shù)據(jù)train和測試數(shù)據(jù)test,我們感興趣的二分變量是good_bad,取值為{good, bad}。
信用評分指幫助貸款機(jī)構(gòu)發(fā)放消費(fèi)信貸的一整套決策模型及其支持技術(shù)。一般地,信用評分技術(shù)將客戶分為好客戶與壞客戶兩類,比如說,好客戶(good)能夠按期還本付息(履約),違約的就是壞客戶(bad)。具體做法是根據(jù)歷史上每個類別(履約、違約)的若干樣本,從已知的數(shù)據(jù)中考察借款人的哪些特征對其拖欠或違約行為有影響,從而測量借款人的違約風(fēng)險(xiǎn),為信貸決策提供依據(jù)。
二、分類矩陣
一個完美的分類模型就是,如果一個客戶實(shí)際上(Actual)屬于類別good,也預(yù)測成(Predicted)good,處于類別bad,也就預(yù)測成bad。但從上面我們看到,一些實(shí)際上是good的客戶,根據(jù)我們的模型,卻預(yù)測他為bad,對一些原本是bad的客戶,卻預(yù)測他為good。我們需要知道,這個模型到底預(yù)測對了多少,預(yù)測錯了多少,分類矩陣就把所有這些信息,都?xì)w到一個表里:
真實(shí)結(jié)果
+1-1
預(yù)測結(jié)果+1真正例(TP)偽正例(FP)
-1偽反例(FN)真反例(TN)
FP和FN就是我們常說的第一類錯誤與第二類錯誤,以這四個基本指標(biāo)可以衍生出多個分類器評價指標(biāo)。
我們來看看KNN、決策樹、naivebayes、SVM、ANN、logistic回歸這6
種基分類器的分類矩陣。
好了,分類矩陣全部算出來了,現(xiàn)在我們需要考慮的便是應(yīng)該定義怎樣的評價指標(biāo)了。
三、具體的靜態(tài)分類指標(biāo)
常見的分類指標(biāo)大致有如下幾個:
真實(shí)結(jié)果
+1-1
預(yù)測結(jié)果+1真正例(TP)偽正例(FP)
-1偽反例(FN)真反例(TN)
使用這些評價標(biāo)準(zhǔn)可以對分類器進(jìn)行評估,尤其是其中的準(zhǔn)確度或錯誤率,是比較常用的分類器性能評價標(biāo)準(zhǔn)。(在某些如推薦或信息獲取領(lǐng)域還會組合使用precision-recall作為評價指標(biāo))但是,所有這些性能評價標(biāo)準(zhǔn)都只在一個操作點(diǎn)有效,這個操作點(diǎn)即是選擇使得錯誤概率最小的點(diǎn)(我們這里選擇的是R中默認(rèn)的分類,與最優(yōu)閾值下的分類還是有很大差別的)。而且,其中大部分評價標(biāo)準(zhǔn)都有一個共同的弱點(diǎn),即它們對于類別分布的改變顯得不夠穩(wěn)健。當(dāng)測試集中正例和反例的比例改變時,它們可能不再具有良好的性能,有時甚至不能被接受。
構(gòu)造一個高正確率(precision)或者高召回率(recall)的分類器不難,但是要保證兩者同時成立卻是很難的。顯然如果任何樣本都判為正例,那么召回率很高但是正確率很難保證。構(gòu)造一個同時使正確率和召回率最大的分類器也是具有挑戰(zhàn)性的。
我們來看看各種方法的各個指標(biāo)情況:(上面是訓(xùn)練集下面是測試集的數(shù)據(jù))
methodFP ratespecificityrecallprecisionaccuracyF-score
logistic35.10%64.90%76.87%83.71%73.29%64.35%
Test36.36%63.64%76.55%84.73%73.00%64.86%
ANN50.61%49.39%87.93%79.74%76.13%70.11%
Test58.18%41.82%86.21%79.62%74.00%68.64%
SVM57.96%42.04%77.12%75.09%66.38%57.91%
Test58.18%41.82%80.00%78.38%69.50%62.70%
naive bayes44.49%55.51%84.32%81.11%75.50%68.39%
Test60.00%40.00%82.76%78.43%71.00%64.91%
C4.537.55%62.45%86.31%83.89%79.00%72.40%
Test60.00%40.00%82.76%78.43%71.00%64.91%
CART78.37%21.63%98.20%73.95%74.75%72.62%
Test85.45%14.55%96.55%74.87%74.00%72.28%
KNN21.63%78.37%95.14%90.88%90.00%86.46%
Test54.55%45.45%82.07%79.87%72.00%65.55%
將各個指標(biāo)按降序排列看看哪個方法更好:
可以看到,對于這組非平衡數(shù)據(jù),CART分類的結(jié)果是很棒的(主要考慮測試集),ANN也有不錯的表現(xiàn),相比之下,在平衡數(shù)據(jù)里表現(xiàn)不俗的SVM反而表現(xiàn)很差,我們再來看看在業(yè)界應(yīng)用很多的logistic回歸的表現(xiàn):從recall的角度(預(yù)測為正例的真實(shí)正例占所有的真實(shí)正例的比例)來看,logistic回歸并不占優(yōu),也就是利用這個模型銀行決定發(fā)放貸款的人群僅占了值得給予貸款的人群的一小部分;再來看precision,從這個角度(預(yù)測為正例的比例在真正正例的比例)來看,logistic表現(xiàn)很好,也就是銀行估計(jì)你不會違約那么你違約發(fā)生的可能性真心不大,所以就可靠性來說,這個做法有一定的合理性;再看整個預(yù)測的準(zhǔn)確性,logistic表現(xiàn)也很好(測試集角度)。可能由于ANN的隱藏結(jié)點(diǎn)個數(shù)的選擇,CART的剪枝不太好把握,所以銀行選擇logistic模型作為貸款評估是有一定道理的?,F(xiàn)代分類器很多都不是簡單地給出一個0或1 的分類判定,而是給出一個分類的傾向程度,比如貝葉斯分類器輸出的分類概率。對于這些分類器,當(dāng)你取不同閾值,就可以得到不同的分類結(jié)果及分類器評價指標(biāo)。我們還可以看到,隨著閾值的減小(更多的客戶就會被歸為正例),recall和1-Specificity也相應(yīng)增加(也即Specificity相應(yīng)減少)。那么我們要動態(tài)的評價,一個合理的辦法就是把基于不同的閾值而產(chǎn)生的一系列recall和Specificity描繪到直角坐標(biāo)上,就能更清楚地看到它們的對應(yīng)關(guān)系。由于recally和Specificity的方向剛好相反,我們把sensitivity和1-Specificity描繪到同一個圖中,它們的對應(yīng)關(guān)系,就得到了傳說中的ROC曲線,全稱是receiver operating characteristic curve,中文叫“接受者操作特性曲線”。
四、ROC曲線與AUC
受試者工作特征曲線 (receiver operatingcharacteristic curve,簡稱ROC曲線),又稱為感受性曲線(sensitivity curve)。得此名的原因在于曲線上各點(diǎn)反映著相同的感受性,它們都是對同一信號刺激的反應(yīng),只不過是在幾種不同的判定標(biāo)準(zhǔn)下所得的結(jié)果而已。接受者操作特性曲線就是以虛報(bào)概率為橫軸,擊中概率為縱軸所組成的坐標(biāo)圖,和被試在特定刺激條件下由于采用不同的判斷標(biāo)準(zhǔn)得出的不同結(jié)果畫出的曲線。
(摘自:百度百科)
要分析ROC曲線,就得回到分類矩陣上,我們再來看看分類矩陣:
ROC繪制的就是在不同的閾值p下,TPR和FPR的點(diǎn)圖。所以ROC曲線的點(diǎn)是由不同的p造成的。所以你繪圖的時候,就用不同的p就行。
上圖便是利用logistic模型測算違約率的模型的ROC曲線(訓(xùn)練集),我們可以看到在ROC曲線上會報(bào)告兩條線:一條實(shí)線,代表閾值變化時分類模型給出的TPR與FPR的變化情況;一條虛線,代表隨機(jī)猜測的TPR與FPR的變化情況。如果實(shí)線在虛線之上,那么恭喜你,你的預(yù)測模型比胡亂猜測要優(yōu)秀的。如果在虛線之下,那么你還是放棄你的猜測辦法好了。
顯然,一個理想的模型會盡可能的處于左上角,這意味著兩類錯誤的都很低。這就告訴我們,可以計(jì)算ROC實(shí)線上的每一個點(diǎn)與(0,1)的距離,距離最小的那個點(diǎn)對應(yīng)最佳閾值。我們分類時就應(yīng)該這么去設(shè)置閾值,而非單純的設(shè)置0.5,上圖我們可以看出閾值取0.4時比0.5會好一些,我們來看看是不是這樣的:
當(dāng)閾值為0.4時的分類矩陣:
訓(xùn)練集 good bad 測試集 good bad
good45394 good11423
bad102151 bad3132
我們還可以利用R算出最優(yōu)閾值0.4408,此時的分類矩陣(訓(xùn)練集最優(yōu))
訓(xùn)練集 good bad 測試集 good bad
good45187 good11422
bad104158 bad3133
與0.5時的分類矩陣相比:
訓(xùn)練集goodbad測試集goodbad
good44286good11120
bad133159bad3435
可以看到分類效果還是有所改善的。
名稱訓(xùn)練集測試集
閾值0.50.40.440.50.40.44
FP rate35.10%38.37%35.51%36.36%41.82%40.00%
specificity64.90%61.63%64.49%63.64%58.18%60.00%
recall76.87%81.62%81.26%76.55%78.62%82.29%
precision83.71%82.82%83.83%84.73%83.21%86.75%
accuracy73.29%75.50%76.13%73.00%73.00%76.96%
F-score64.35%67.60%68.12%64.86%65.42%71.38%
關(guān)于ROC下的最優(yōu)閾值,簡單理解下的話,保證TPR同時代價FPR要盡量的小,那么我們建立max(TPR+(1-FPR))的模型,然后選合適的閾值p_0。這就說明用ROC比用一些靜態(tài)指標(biāo)是要好很多的。而且ROC有一個更大的優(yōu)點(diǎn),就是可以基于成本效益來判決分類器好壞,比如說銀行處在擴(kuò)張的階段,它吸納一個偽客戶的后果遠(yuǎn)比放棄一個真客戶的后果要輕,于是我們比較分類器就應(yīng)該在控制棄真錯誤的基礎(chǔ)上比較誰犯的取偽錯誤更少來評價。在這樣的指導(dǎo)思想下,我們可以判斷下圖的A與B誰更優(yōu)秀。這是靜態(tài)指標(biāo)肯定做不到的。
ROC曲線是根據(jù)與45度線的偏離來判斷模型好壞。圖示的好處是直觀,不足就是不夠精確。到底好在哪里,好了多少?一個自然的想法就是對曲線下的面積進(jìn)行比較,這就傳說中的AUC(Area Under the ROC Curve,ROC曲線下的面積),不過也不是新東西,只是ROC的一個派生而已?;氐较惹澳菑圧OC曲線圖。45度線下的面積是0.5,ROC曲線與它偏離越大,ROC曲線就越向左上方靠攏,它下面的面積(AUC)也就應(yīng)該越大。我們就可以根據(jù)AUC的值與0.5相比,來評估一個分類模型的預(yù)測效果(我們這里logistic分類器訓(xùn)練集的auc約為0.78)。但是AUC僅僅給出的是分類器的平均性能值,這是不能代替對整條曲線的觀察的。
我們現(xiàn)在來說說ROC曲線的做法。為了畫出ROC曲線,分類器必須提供每個樣例被判為正例或者反例的可信度的值(在一些文獻(xiàn)中稱之為score)。如naive Bayes提供了一個可能性,logistic回歸中輸入到sigmoid函數(shù)中的數(shù)值或者sigmoid函數(shù)的輸出值,SVM中輸?shù)絪ign函數(shù)里的數(shù)值都可以看做分類器預(yù)測強(qiáng)度的衡量值。為了畫出ROC曲線,首先要將分類樣例按照其預(yù)測強(qiáng)度排序,先從排名最低的開始,所有排名更低的都被判為反例,所有排名更高的都被判為正例,這就得到了對應(yīng)的點(diǎn)(1,1)。然后,將其移到排名次低的樣例中去,如果該樣例是正例,那么修改TPR,否則修改FPR;依次做下去,可以得到ROC。
上述過程聽起來不是那么的明白,不妨閱讀以下下列代碼,就會發(fā)現(xiàn)一切是那么的一目了然。(以logistic模型考慮客戶分類為例)
reg1<-glm(good_bad~checking+history+duration+savings+property,data=trainset,family="binomial")
reg2<-step(reg1)
summary(reg2)
p<-predict(reg2,trainset)
TPR<-rep(0,length(p))
FPR<-rep(0,length(p))
for(i in 1:length(p)){
p0<-p[order(p)[i]];
label.true<-ifelse(trainset[,6]=="good",1,0)
label.pred<-1*(p>p0)
TPR[i]<-sum(label.pred*label.true)/sum(label.true)
FPR[i]<-sum(label.pred*(1-label.true))/sum(1-label.true)
}
plot(FPR,TPR,type="l",col=2)
points(c(0,1),c(0,1),type="l",lty=2)
得到如下圖形(與之前R給出的ROC相比是不是幾乎一樣的):
運(yùn)行下列代碼還可以得到近似的AUC:
pos.label<-p[trainset[,6]=="good"]
neg.label<-p[trainset[,6]=="bad"]
mean(sample(pos.label,500000,replace=T) > sample(neg.label,500000,replace=T))
aucs<-replicate(1000,mean(sample(pos.label,1000,replace=T) > sample(neg.label,1000,replace=T)))
這里我解釋一下為什么這么算。首先我們回到ROC曲線的定義上,我們可以清楚的看到曲線下方的點(diǎn)都是正例得分超過反例的點(diǎn)。這也再次說明了AUC給出了分類器的平均性能值。于是,利用蒙特卡羅的辦法就可以輕松地得到面積。aucs<-replicate(1000,mean(sample(pos.label,1000,replace=T)> sample(neg.label,1000,replace=T)))代碼是為了利用bootstrap的辦法來看看模擬計(jì)算的好壞而寫的,可以忽略不看。
(tips:蒙特卡羅算面積的一個很直觀的解釋.假設(shè)你要計(jì)算上圖的面積,我們可以將這個圖片用1*1的紙張打印出來,倒1000顆豆子到紙上(假定豆子全在紙上),那么大數(shù)定律告訴我們,落在曲線下方的豆子數(shù)/總豆子數(shù)可以看做任取一點(diǎn)那一點(diǎn)落在曲線下方的概率=曲線下方的面積/總面積,總面積已知,故求出曲線下方的面積)
我們將logistic回歸,人工神經(jīng)網(wǎng)絡(luò)(ANN)、支持向量機(jī)(SVM)、樸素貝葉斯(naivebayes)的ROC曲線繪制如下(訓(xùn)練數(shù)據(jù)集):
在看看測試數(shù)據(jù)集的ROC曲線:
從上圖我們可以很容易理解為何業(yè)界人士那么喜歡logistic回歸作為信用評分的標(biāo)準(zhǔn)了吧,它不僅簡單而且好用。
為了精確的比較,我們還是來報(bào)告一下AUC:
LogisticANNSVMBayes
訓(xùn)練集0.781950.797820.606070.77650
測試集0.760750.690720.674980.73241
除了ANN可能是我設(shè)計(jì)的不是那么的合理(隱藏結(jié)點(diǎn)取5有些magic number的味道)導(dǎo)致其AUC可能超過logistic而沒有超過外,其他的都能看到logistic在AUC指標(biāo)下表現(xiàn)不俗。但是我們從整個ROC曲線來看。Logistic的優(yōu)勢在于logistic很好的控制住了FPR,所以在兩類錯誤代價不一致時,如何選取還得仔細(xì)分析。正如同我們前面說的數(shù)據(jù)分析是一門藝術(shù)而不是一門技術(shù),具體問題還需具體分析。
五、ROC的延續(xù)
ROC曲線的所有內(nèi)容都是分類矩陣提供的,我們可以運(yùn)用ROC類似的辦法來定義一些新的曲線來衡量分類器性能的好壞。我們這里還是先回顧一下分類矩陣:
1、PR曲線
我們之前在評述靜態(tài)分類指標(biāo)時就說過,在某些如推薦或信息獲取領(lǐng)域還會組合使用precision-recall作為評價指標(biāo)。那么我們不妨來看看precision與recall展示到二維空間后評估了什么?合理的解釋又是什么?Precision-Recall曲線,這個東西應(yīng)該是來源于信息檢索中對相關(guān)性的評價,用我們的例子來講,Precision 就是我們決定發(fā)放貸款的人群中有多少是會按時還款的,Recall就是所有值得發(fā)放貸款的人有多少被銀行挑選出來給予服務(wù)了。放到檢索中來說,Precision 就是檢索出來的條目中(比如網(wǎng)頁)有多少是準(zhǔn)確的,Recall就是所有準(zhǔn)確的條目有多少被檢索出來了。這也就是為什么IR中很多算法的評估都用到Precision和Recall來評估好壞。
我們來看看logistic回歸在測試集上PR曲線的表現(xiàn):
Logistic回歸在訓(xùn)練集上的表現(xiàn):
與ROC曲線的做法類似,我們這里不再詳述PR曲線的做法,我們直接上代碼:
reg1<-glm(good_bad~checking+history+duration+savings+property,data=trainset,family="binomial")
reg2<-step(reg1)
summary(reg2)
p<-predict(reg2,testset)
Precision<-rep(0,length(p))
Recall<-rep(0,length(p))
label.true<-ifelse(testset[,6]=="good",1,0)
for(i in 1:length(p)){
p0<-p[order(p)[i]]
label.pred<-1*(p>=p0)
Recall[i]<-sum(label.pred*label.true)/sum(label.true)
Precision[i]<-ifelse(is.nan(sum(label.pred*label.true)/sum(label.pred)),1,
sum(label.pred*label.true)/sum(label.pred))
}
plot(Recall, Precision, col=4,lwd=5, type="l",xlab="Recall",ylab="Precision", main="PR Curve")
我們來看看PR意義下不同分類器的績效(左訓(xùn)練集右測試集):
2、lift曲線
我們再一次回到分類矩陣:
考慮lift曲線,意味著我們需要重新加入一個指標(biāo):lift。為了敘述的簡便,在說lift之前我們引入指標(biāo):depth、k。Depth=proportionallocated to class 1=(TP+FP)/(P+N),表示預(yù)測成正例的樣例占總樣例的比例。
K=P/(P+N),表示總樣例中正例所占的比例。
Precision表明如果采用了分類器,正例的識別比例;而k表明如果不用分類器,用隨機(jī)的方式抽取出正例的比例。這二者相比自然就解決了如果使用者用分類器分類會使得正類產(chǎn)生的比例會增加多少的問題。這就自然而然的定義了提升值lift:Lift=precision/K,意味著與不利用模型相比,模型的預(yù)測能力“變好”了多少。顯然,lift(提升指數(shù))越大,模型的運(yùn)行效果越好。如果這個模型的預(yù)測能力跟似然的.
結(jié)果一樣(lift等于1),這個模型就沒有任何“提升”了。光有l(wèi)ift一個指標(biāo)是不夠的,那么還有一個指標(biāo)是什么呢?depth(有的書稱為RPP:
正類預(yù)測比例,Rate of positive predictions的縮寫)。之所以選擇depth是因?yàn)殡S著閾值的減小,更多的客戶就會被歸為正例,也就是depth(預(yù)測成正例的比例)變大。當(dāng)閾值設(shè)定得足夠的小,那么幾乎所有的觀測值都會被歸為正例(depth幾乎為1)——這時分類的效果就跟似然的結(jié)果差不多了,相對應(yīng)的lift值就接近于1。
lift曲線是數(shù)據(jù)挖掘分類器最常用的方式之一,與ROC曲線不同的是lift考慮分類器的準(zhǔn)確性,也就是使用分類器獲得的正類數(shù)量和不使用分類器隨機(jī)獲取正類數(shù)量的比例。
那么在一個合理的depth范圍內(nèi),我們要尋找最大的提升。這就是比較模型的依據(jù)。我們先來看看logistic回歸模型的lift圖:
一個常用的利用lift圖作為模型比較依據(jù)的辦法:lift圖把驗(yàn)證數(shù)據(jù)集中的觀測數(shù)據(jù)根據(jù)它們的分?jǐn)?shù)以升序或降序排列,分?jǐn)?shù)是基于訓(xùn)練數(shù)據(jù)集估計(jì)的響應(yīng)事件(成功)的概率。把這些分?jǐn)?shù)再細(xì)分成10分位點(diǎn),然后對驗(yàn)證數(shù)據(jù)集中的每個10分位點(diǎn)計(jì)算和圖示成功的預(yù)測概率。如果這些成功的預(yù)測概率與估計(jì)概率具有相同的順序(升序或降序),那么模型就是有效的。 我們以下圖為例:
圖中可看出分?jǐn)?shù)以降序排列,所以曲線減少越多表明模型越好。因此模型classification tree看起來比另一個更好,特別是在第3個10分位點(diǎn),它具有較好的成功率。
用每個曲線的值除以基本線,可得到性能的相對指標(biāo),稱為lift,它測量一個模型的價值。
對于模型classification tree,在第3個10分位點(diǎn)的lift值為2.77(即2.27%/1.0%),這意味著使用模型classification tree的成功率是隨機(jī)選擇(基本線)的3倍。
我們來看看lift意義下不同分類器的績效(左訓(xùn)練集右測試集):
當(dāng)然這里有必要指出的是lift這個指標(biāo)就是作為單純的靜態(tài)指標(biāo)也是很常用的,而且可以這么說lift作為靜態(tài)指標(biāo)比作為這樣的動態(tài)指標(biāo)更常用,畢竟比起用哪一類模型我們更關(guān)心確定的那一個模型的好壞。通常來說lift大于2就說明分類效果可以了。但是對于有偏數(shù)據(jù)來說,似然估計(jì)的準(zhǔn)確率已經(jīng)很高了,希望lift達(dá)到2或者更高基本不太現(xiàn)實(shí)。
3、Gains曲線
有了lift的基礎(chǔ),我們要說的增益曲線就變得異常簡單了,lift曲線不是以lift作為評價指標(biāo)嘛,我們換成precision作為評價指標(biāo),畫precision-depth曲線就是傳說中的gains曲線了。
4、Lorenz曲線
既然gains曲線選擇了precision作為縱軸,那我們選recall可不可以呢?當(dāng)然可以,傳說中的lorenz曲線就是他了。lorenz曲線的橫軸就是lift曲線中涉及到的深度depth,也就是:將樣本的預(yù)測為1的概率從大到小排序后,取前百分之幾。通常會簡化成十分位點(diǎn),0%,10%,20%,...,90%,100%。而曲線的縱軸其實(shí)就是相對應(yīng)的TPR。形象地說,就是我們面對著一堆人(1000個),這堆人里面有20個壞人,我們的目標(biāo)就是抓壞人。通過模型計(jì)算,我們把這堆人按照可能是壞人的概率從大到小地排了隊(duì),然后我們抓取前一百名,在這前一百名里面,可能就有13個壞人了(因?yàn)檫@一百個人的是壞人的概率比較高嘛),也就是說我們只抓取10%的樣本,但是抓到了65%的目標(biāo)。從lift的角度也可以很好地理解這種提升效果,而lorenz則更形象地展示了這種投入產(chǎn)出比的含義。
以上提到的ROC、Lift、Gains、Lorenz,都是基于混淆矩陣及其派生出來的幾個指標(biāo)。
如果愿意,你隨意組合幾個指標(biāo),展示到二維空間,就是一種跟ROC平行的評估圖。
六、R實(shí)現(xiàn)
R提供了各種各樣的函數(shù)來實(shí)現(xiàn)分類的績效評估。我們?yōu)榱吮3中形牡囊回炐?,我們使用鳶尾花數(shù)據(jù)(僅考慮后兩種花的分類)SVM模型來說說R是如何實(shí)現(xiàn)績效評估的。
有些指標(biāo)在另一群人的眼中是這樣的:
Sensitivity(覆蓋率,True Positive Rate)=正確預(yù)測到的正例數(shù)/實(shí)際正例總數(shù)PV+ (命中率,Precision,Positive Predicted Value) =正確預(yù)測到的正例數(shù)/預(yù)測正例總數(shù)Specificity (負(fù)例的覆蓋率,True Negative Rate) =正確預(yù)測到的負(fù)例個數(shù)/實(shí)際負(fù)例總數(shù)
我們來看看最熟悉的分類矩陣(data僅為鳶尾花的51到150行的數(shù)據(jù)):
library(e1071)
m1 <- svm(Species~.,data=data,cross=10,type="C-classification",kernel="sigmoid")
pred1<-predict(m1,data)
table(pred1,data[,5])
之后是ROC圖:
library(ROCR)
pred<-predict(m1,data,decision.values = TRUE)
p<--attr(pred,"decision.values")
pred <- prediction(p, data[,5])
perf <- performance(pred,"tpr","fpr")
plot(perf,colorize=TRUE)
grid(5, 5, lwd = 1)
points(c(0,1), c(0,1), type="l", lty=2, lwd=2, col="grey")
函數(shù)筆記:ROCR包提供了ROC圖的繪制函數(shù),他的主要函數(shù)有:
prediction(predictions, labels, label.ordering = NULL)
參數(shù)說明:
Predictions:是評價的得分向量
Labels:真實(shí)的分類向量
performance(prediction.obj, measure, x.measure="cutoff", ...)
參數(shù)說明:
Prediction.obj:由prediction生成的對象
Measure:各種評價指標(biāo),如recall、precision、actual等,詳見幫助文檔,x.measure類似
計(jì)算AUC:
auc.tmp <- performance(pred,"auc")
auc <- as.numeric(auc.tmp@y.values)
auc <- round(auc, 4)
計(jì)算ROC意義下的最佳閾值:
library(Daim)
roc1<-roc(-p,data[,5],"versicolor")
summary(roc1)
函數(shù)筆記:Daim包的roc函數(shù)提供了roc曲線的繪制,最佳cutoff點(diǎn)的求解,auc求解等功能。
roc(x, labels, labpos, thres=NULL, ...)
參數(shù)說明:
X:評價得分向量
Labels:實(shí)際分類向量
Thres:正例名稱
Tips:你可以嘗試plot(roc1)
繪制PR曲線:(默認(rèn)以加載ROCR包,下同)
pred <- prediction(p, data[,5])
perf <- performance(pred,measure="prec", x.measure="rec")
plot(perf,colorize=TRUE)
繪制lift曲線:
pred<- prediction(p, data[,5])
perf<- performance(pred,measure="lift", x.measure="rpp")
plot(perf,colorize=TRUE)
繪制Gain曲線
pred<- prediction(p, data[,5])
perf<- performance(pred,measure="prec", x.measure="rpp")
plot(perf,colorize=TRUE)
繪制Lorenz曲線:
pred<- prediction(p, data[,5])
perf<- performance(pred,measure="rec", x.measure="rpp")
plot(perf,colorize=TRUE)
grid(5,5, lwd = 1)
points(c(0,1),c(0,1), type="l", lty=2, lwd=2, col="grey")
除此以外,你還可以嘗試Sensitivity/specificity曲線(試著解釋一下它)
pred<- prediction(p, data[,5])
perf<- performance(pred,measure="sens", x.measure="spec")
plot(perf,colorize=TRUE)
tips:基本上你可以拿任何兩種指標(biāo)填入measure與x.measure里便可以得到一幅圖,
還有很多幅圖都是可以畫的,你可以逐一去嘗試他們,這里就不一一介紹了。
七、小結(jié)
前面說了那么多,我們考慮GermanCredit Dataset這個例子,把我們所說的東西的含義簡單的總結(jié)一下。
我們所說的增益gain意味著從30%的人里抓到了50%的欺騙者,這就是gain曲線(0.3,0.5)
這一坐標(biāo)點(diǎn)的含義。對角線意味著利用似然想法隨意抓人的收益。
我們所說的提升lift意味著從30%的人里抓,抓到5個,比隨便抓,抓到3個要好了5/3=1.7,這就是lift曲線(0.3,1.7)這一點(diǎn)的含義
我們所說的ROC曲線意味著從30%的人里面抓到了欺騙者的50%(5/10),抓錯了好人20%(4/20),這就是ROC曲線上(0.2,0.5)的含義。對角線意味著胡亂抓人(每人都有50%的可能是欺騙者)的情況。
Lorenz曲線與K-S指標(biāo)見下圖:
(上圖的坐標(biāo)軸標(biāo)注不是很準(zhǔn)確:紅線是lorenz bad,藍(lán)線是lorenzgood)
Reference:
這次不提供further reading,這篇文章參考但不限于下列文獻(xiàn):
百度百科:ROC曲線
波波頭一頭:二分類模型性能評價2.0(ROC曲線,lift曲線,lorenz曲線)
胡江堂:分類模型的性能評估系列文章(混淆矩陣、ROC和AUC、lift和gain)
丕子:再理解下ROC曲線和PR曲線
不周山:分類器評價、混淆矩陣與ROC曲線
預(yù)告
我們花了這么大的力氣來討論分類算法的績效,目的便是如何提高分類效率。下面我們將討論組合的方法提高分類效率。這次我們看到對于不平衡數(shù)據(jù)來說,不同分類器的表現(xiàn)很是不同,之前我們很倚重的SVM就在信用評分上表現(xiàn)不佳,所以如果可能,我們不妨也來討論一下非均衡分類問題。我們將待寫的文章預(yù)告如下:
算法提升:組合方法提高分類效率
算法討論:非均衡分類問題
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03