天天看點

機器學習之模型評估名額學習筆記

前段時間工作中發現自己對模型評估名額中的AUC有點忘了,是以打算重新看一下然後寫個部落格記錄一下。

混淆矩陣和查全率,查準率

首先簡單介紹一下混淆矩陣,查全率(也叫做召回率,recall)和查準率(也叫做精确率,precesion)。

在進行模型評估的時候,單單使用準确率accuracy(預測正确樣本數/總樣本數)有時候并不能很好的對模型進行評估。比如,在對日活或月活使用者預測其購買商品機率并将比較有可能購買的使用者找出來給銷售打電話的時候,由于在實際樣本集合中,可能購買的使用者(即正樣本)的人數會比較少,比如100個日活使用者中隻有5個使用者會購買,這時候如果僅僅是追求準确率的話,那麼簡單粗暴的把門檻值設的很高,使所有使用者都預測為負樣本(即不購買的使用者),此時的準确率為95%,但是這種結果卻不是我們想要的。此時召回率或精确率可能是比較好的評估名額。

在介紹召回率和精确率之前,首先了解一下混淆矩陣。

在二分類問題中,我們可以将樣本根據實際類别和模型預測類别的組合劃分為真正例(true positive),假正例(false position),真反例(true negative)以及假反例(false negative),其個數分别即為TP,FP,TN,FN。于是就可以寫出如下混淆矩陣:

預測為正例 預測為反例
實際為正例 TP FN
實際為反例 FP TN

由上述混淆矩陣就可以得出召回率和精确率 召 回 率 ( r e c a l l ) = T P T P + F N 召回率(recall)=\frac{TP}{TP+FN} 召回率(recall)=TP+FNTP​ 精 确 率 ( p r e c i s i o n ) = T P T P + F P 精确率(precision)=\frac{TP}{TP+FP} 精确率(precision)=TP+FPTP​在上述例子中,如果簡單粗暴的将所有例子都判定為反例,那麼其準确率或許可以達到95%,但是召回率和精确率就都是0%了。但是,當我們把門檻值設的很低,将所有樣本都預測為正樣本的時候,此時召回率達到100%,但是精确率卻隻有5%,當我們僅僅取最有把握的預測樣本最為正例的時候,此時精确率高了,但召回率有不理想了。

是以,在模型得出預測結果之後,門檻值怎麼設對模型最終的評估結果很有影響。那麼,是否有這樣一種模型的評估名額,不論門檻值怎麼設都跟名額的最終結果無關呢?AUC就是這樣的評估名額。

ROC曲線和AUC

在上述的例子中,實際上隻要在模型的預測結果中,所有的正樣本的預測結果都大于負樣本的預測結果,那麼我們總是能夠找到一個門檻值,使得不論是準确率,召回率還是精确率都是100%。此時也就是要求預測結果的排序品質很好,即所有的正樣本都排在前面,所有的負樣本都排在後面。 AUC,正是考慮樣本預測的排序品質。

在介紹AUC之前,首先了解一下ROC曲線。

當我們用一個模型對所有樣本做出預測之後,将所有樣本按照預測機率進行排序。首先我們将門檻值設定為最大,即将所有的樣本均預測為反例,計算真正例率(TPR)和假正例率(FPR) T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP​ F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP​于是得到 ( T P R 1 , F P R 1 ) (TPR_{1}, FPR_{1}) (TPR1​,FPR1​)。然後将門檻值從大到小依次設定為每一個樣本的預測值,并計算 ( T P R i , F P R i ) (TPR_{i}, FPR_{i}) (TPRi​,FPRi​)。最終得到一組數對 ( T P R I , F P R I ) (TPR_{I}, FPR_{I}) (TPRI​,FPRI​)。然後,将得到的這一系列數對繪制在以真正例率為縱軸,假正例率為橫軸的坐标系中,得到

機器學習之模型評估名額學習筆記

當ROC這條曲線下所包含的面積越大,就表示模型預測出來的結果排序品質越高,而ROC這條曲線下所包含的面積,就是AUC值。是以,我們可以使用AUC值來刻畫模型預測的排序品質。

除了上述案例之外,推薦場景也是比較看重AUC名額。比如,當我們拿到一個使用者的使用者畫像之後,推測出使用者喜好什麼,更願意買什麼,在我們的倉庫中可能有1000個商品都可以推薦給這個使用者,但是我們有不能把1000個商品都推薦給使用者,這樣使用者眼睛都看花掉。是以我們需要挑選排序中使用者最優可能購買的10件商品推薦給使用者,如果這10件不行,那就換下一個10件。在這種場景下,對預測結果的排序品質就比較高了,是以對AUC值也就比較看重。

繼續閱讀