概覽

評估一個模型是建立一個有效的機器學習模型的核心部分

評價指標有混淆矩陣、交叉驗證、AUC-ROC曲線等。

不同的評估指標用於不同型別的問題

介紹

建立機器學習模型的想法是基於一個建設性的反饋原則。你構建一個模型,從指標中獲得反饋,進行改進,直到達到理想的精度為止。評估指標解釋了模型的效能。評估指標的一個重要方面是它們區分模型結果的能力。

我見過很多分析師和資料科學家不費心檢查他們的模型的魯棒性。一旦他們完成了模型的構建,他們就會匆忙地將其應用到不可見的資料上。這是一種錯誤的方法。

你的動機不是簡單地建立一個預測模型。它是關於建立和選擇一個模型,使其對樣本外的資料具有高精度。因此,在計算預測值之前,檢查模型的準確性是至關重要的。

在我們的行業中,我們考慮不同種類的指標來評估我們的模型。指標的選擇完全取決於模型的型別和模型的實現計劃。

在你構建完模型之後,這11個指標將幫助你評估模型的準確性。考慮到交叉驗證的日益流行和重要性,我還將在本文中討論它。

熱身:預測模型的型別

當我們談論預測模型時,我們談論的要麼是迴歸模型(連續輸出),要麼是分類模型(離散輸出)。這些模型中使用的評估指標是不同的。

在分類問題中,我們使用兩種型別的演算法(取決於它建立的輸出型別):

類輸出

: 像SVM和KNN這樣的演算法建立一個類輸出。例如,在一個二分類問題中,輸出將是0或1。然而,今天我們有演算法可以將這些類輸出轉換為機率。但是這些演算法並沒有被統計學界很好地接受。

機率輸出

: 邏輯迴歸、隨機森林、梯度增強、Adaboost等演算法給出機率輸出。將機率輸出轉換為類輸出只需要建立一個閾值。

在迴歸問題中,我們的輸出沒有這樣的不一致性。輸出在本質上總是連續的,不需要進一步處理。

例證

分類模型評估指標的討論中,我使用了我在Kaggle上的BCI挑戰的預測。這個問題的解決超出了我們在這裡討論的範圍。然而,本文使用了在此訓練集上的最終預測。對這個問題的預測結果是機率輸出,假設閾值為0。5,將這些機率輸出轉換為類輸出。

1. 混淆矩陣(Confusion Matrix)

混淆矩陣是一個NxN矩陣,其中N是預測的類數。對於我們的案例,我們有N=2,因此我們得到一個2x2矩陣。你需要記住一個混淆矩陣一些定義:

準確率(Accuracy)

: 分類模型中所有判斷正確的結果佔總觀測值得比重。

精確率、查準率(Precision)

: 在模型預測是正例的所有結果中,模型預測對的比重

真負率

: 在模型預測是負例的所有結果中,模型預測對的比重

召回率、查全率(Recall)、靈敏度(Sensitivity)

: 在真實值是正例的所有結果中,模型預測對的比重

特異度(Specificity)

: 在真實值是負例的所有結果中,模型預測對的比重

你知道這11個重要的機器學習模型評估指標嗎?

你知道這11個重要的機器學習模型評估指標嗎?

我們的案例的準確率達到88%。從以上兩個表中可以看出,精確率較高,而真負率較低。靈敏度和特異度也一樣。這主要是由我們選擇的閾值驅動的。如果我們降低閾值,這兩對完全不同的數值會更接近。

一般來說,我們關心的是上面定義的指標其中之一。例如,在一家制藥公司,他們會更關注最小的錯誤正類診斷。因此,他們將更加關注高特異度。另一方面,損耗模型更關注靈敏度。混淆矩陣通常只用於類輸出模型。

2. F1 Score

在上一節中,我們討論了分類問題的精確率和召回率,並強調了我們的選擇案例的精確率/召回率基礎的重要性。如果對於一個案例,我們試圖同時獲得最佳的精確率和召回率,會發生什麼呢?F1-Score是一個分類問題的精確率和召回率的調和平均值。f1分的計算公式如下:

你知道這11個重要的機器學習模型評估指標嗎?

一個顯而易見的問題是為什麼取調和均值而不是算術均值。這是因為調和均值對極值的懲罰更多。讓我們用一個例子來理解這一點。我們有一個二分類模型,結果如下:

精確率:0,召回率:1

這裡取算術平均值,得到0。5。很明顯,上面的結果來自於一個“傻瓜”的分類器,它忽略了輸入,只選擇其中一個類作為輸出。現在,如果我們取調和均值,我們會得到0,這是準確的,因為這個模型對所有的目的都沒用。

這似乎是簡單的。然而,在某些情況下,對精確率和召回率的重視程度有所不同。將上面的表示式稍微修改一下,我們可以為此包含一個可調引數

你知道這11個重要的機器學習模型評估指標嗎?

,我們得到:

你知道這11個重要的機器學習模型評估指標嗎?

Fbeta 測量使用者認為召回率比精確率重要

你知道這11個重要的機器學習模型評估指標嗎?

倍模型的有效性。

3. 增益圖和提升圖(Gain and Lift charts)

增益圖和提升圖主要用於檢驗機率的排序。以下是製作增益圖和提升圖的步驟:

步驟1:計算每個樣本的機率。

步驟2:按遞減順序排列這些機率。

步驟3:構建十分位數,每個組有近10%的樣本數。

步驟4:計算每個十分位處好(Responders)、壞(Non-responders)和總的響應率。

你會得到以下表格,你需要從中繪製增益圖和提升圖:

你知道這11個重要的機器學習模型評估指標嗎?

這是一個包含很多資訊的表。累積增益圖(Cumulative Gain chart)是累計 %Right和累計%Population之間的圖。下面是對應我們的案例的圖:

你知道這11個重要的機器學習模型評估指標嗎?

該圖告訴你模型將responders與non-responders分離的程度。

在第一個十分位處我們可以達到的最大提升是多少?從本文的第一個表中,我們知道responders的總數是3850。第一個十分位處將包含543個觀察值。因此,第一個十分位數的最大提升可能是543 / 3850約為14。1%。因此,此模型非常接近完美。

現在讓我們繪製提升曲線。提升曲線是總提升(total lift)與%population之間的關係曲線。請注意,對於隨機模型,它始終保持100%不變。以下是我們的案例對應的提升圖:

你知道這11個重要的機器學習模型評估指標嗎?

你還可以用十分位數繪製十分位處對應的提升:

你知道這11個重要的機器學習模型評估指標嗎?

這個圖告訴你什麼?它告訴你我們的模型執行直到第7個十分位處都表現得不錯。在第三十分位處和第七十分位處之間提升超過100%的模型都是一個很好的模型。否則,你可能首先考慮過取樣。

提升/增益圖廣泛用於活動目標問題。這告訴我們,對於特定活動,可以在哪個十分位處可以定位客戶。此外,它會告訴你對新的目標基礎的期望響應量。

4. KS圖(Kolomogorov Smirnov chart)

K-S或Kolmogorov Smirnov圖測量分類模型的效能。更準確地說,K-S是衡量正負例分佈之間分離程度的指標。如果將人口劃分為兩個獨立的組,其中一組包含所有正例而另一組包含所有負例,則K-S值為100。

另一方面,如果模型不能區分正負例,那麼模型從總體中隨機選擇案例。K-S值將為0。在大多數分類模型中,K-S將介於0和100之間,並且值越高,模型在區分正負例情況時越好。

對於我們的案例,下面是對應的表格:

你知道這11個重要的機器學習模型評估指標嗎?

我們還可以繪製%Cumulative Good和Bad來檢視最大分離程度。以下是一個示例圖:

你知道這11個重要的機器學習模型評估指標嗎?

到目前為止所涵蓋的指標主要用於分類問題。我們瞭解了混淆矩陣,提升和增益圖以及kolmogorov-smirnov圖。讓我們繼續學習一些更重要的指標。

5. AUC曲線(AUC-ROC)

這是業界流行的指標之一。使用ROC曲線的最大優點是它獨立於responders比例的變化。讓我們首先嚐試瞭解什麼是ROC(接收者操作特徵)曲線。如果我們看下面的混淆矩陣,我們觀察到對於機率模型,我們得到每個度量的不同值。

你知道這11個重要的機器學習模型評估指標嗎?

因此,對於每個靈敏度,我們得到不同的特異度。兩者的變化如下:

你知道這11個重要的機器學習模型評估指標嗎?

ROC曲線是靈敏度和(1-特異度)之間的曲線。(1-特異性)也稱為假正率,靈敏度也稱為真正率。以下我們案例對應的ROC曲線。

你知道這11個重要的機器學習模型評估指標嗎?

以閾值為0。5為例,下面是對應的混淆矩陣:

你知道這11個重要的機器學習模型評估指標嗎?

你可以看到,這個閾值的靈敏度是99。6%,(1-特異性)約為60%。這一對值在我們的ROC曲線中成為一個點。為了將該曲線對映為數值,我們計算該曲線下的面積(AUC)。

注意到,整個正方形的面積是1 * 1 = 1。因此AUC本身是曲線下的面積與總面積的比率,對於我們的實驗,我們的AUC ROC值為96。4%。以下是一些經驗法則(thumb rules):

。90-1 = excellent (A)

0。80-。90 = good (B)

0。70-。80 = fair (C)

0。60-。70 = poor (D)

0。50-。60 = fail (F)

我們看到我們當前模型屬於excellent範圍。但這可能只是過擬合,在這種情況下,驗證變得非常重要。

需要記住幾點

對於將類作為輸出的模型,將在ROC圖中表示為單個點。

這些模型無法相互比較,因為需要對單個指標進行判斷而不使用多個指標。

例如,具有引數(0。2,0。8)的模型和具有引數(0。8,0。2)的模型可以來自相同的模型,因此不應直接比較這些度量。

在機率模型的情況下,我們很幸運可以得到一個AUC-ROC的數值。但是,我們仍然需要檢視整個曲線以做出最終的決定。一個模型可能在某些區域表現更好,而其他模型在其他區域表現更好。

使用ROC的好處

為什麼要使用ROC而不是提升曲線等指標?

提升取決於人口的總響應率(total response rate)。因此,如果人口的響應率發生變化,同一模型將給出不同的提升圖,這種的情況的解決方案可以用真正提升圖(true lift chart)(在每個十分位處找到提升和模型最大提升的比率)。但這種比率沒有什麼意義。

另一方面,ROC曲線幾乎與響應率無關。這是因為它具有從混淆矩陣的柱狀計算中出來的兩個軸。在響應率變化的情況下,x軸和y軸的分子和分母將以類似的比例改變。

6. 對數損失(Log Loss)

AUC ROC考慮用於確定模型效能的預測機率。然而,AUC ROC存在問題,它只考慮機率的順序,因此沒有考慮模型預測更可能為正樣本的更高機率的能力。在這種情況下,我們可以使用對數損失,即每個例項的正例預測機率的對數的負平均值。

你知道這11個重要的機器學習模型評估指標嗎?

p(yi)是預測為正類的機率

1-p(yi)是預測為負類的機率

yi = 1表示正類,0表示負類(實際值)

讓我們計算幾個隨機值的對數損失,以得到上述數學函式的要點:

Logloss(1, 0。1) = 2。303

Logloss(1, 0。5) = 0。693

Logloss(1, 0。9) = 0。105

如果我們繪製這種關係,我們將獲得如下曲線:

你知道這11個重要的機器學習模型評估指標嗎?

從向右平緩的向下斜率可以看出,隨著預測機率的改善,對數損失逐漸下降。然而,在相反方向上移動時,當預測機率接近0時,對數損失會非常快速地增加。

因此,降低對數損失,對模型更好。但是,對於好的對數損失沒有絕對的衡量標準,並且它取決於用例/應用程式。

儘管AUC是根據具有變化的判定閾值的二元分類計算的,但是對數損失實際上考慮了分類的“確定性”。

7. 基尼係數(Gini Coefficient)

基尼係數有時用於分類問題。基尼係數可以從AUC ROC數得出。基尼係數只是ROC曲線與對角線之間的面積與對角線上三角形的面積之比。

以下是使用的公式:

Gini = 2*AUC – 1

基尼係數高於60%是一個很好的模型。對於我們的案例,我們的基尼係數為92。7%。

8. Concordant – Discordant ratio

對於任何分類預測問題,這也是最重要的指標之一。要理解這一點,我們假設我們有3名學生今年有可能透過。

以下是我們的預測:

A – 0。9

B – 0。5

C – 0。3

現在想象一下。如果我們要從這三個學生那裡取兩對,我們會有多少對?我們將有3對:AB,BC,CA。現在,在年底結束後,我們看到A和C今年透過而B失敗了。不,我們選擇所有配對,我們將找到一個responder和其他non-responder。我們有多少這樣的配對?

我們有兩對AB和BC。現在對於2對中的每一對,一致對( concordant pair )是responder的機率高於non-responder的機率。而不一致的對(discordant pair)是反之亦然的。如果兩個機率相等,我們說它是平等的。讓我們看看在我們的案例中發生了什麼:

AB – Concordant

BC – Discordant

因此,在這個例子中我們有50%的一致案例。超過60%的一致率被認為是一個很好的模型。在決定要定位的客戶數量等時,通常不使用此度量標準。它主要用於訪問模型的預測能力。對於定位的客戶數量則再次採用KS / Lift圖。

9. 均方根誤差(Root Mean Squared Error,RMSE)

RMSE是迴歸問題中最常用的評估指標。它遵循一個假設,即誤差是無偏的並遵循正態分佈。

以下是RMSE需要考慮的要點:

“平方根”使該指標能夠顯示大的偏差。

此度量標準的“平方”特性有助於提供更強大的結果,從而防止取消正負誤差值。換句話說,該度量恰當地顯示了錯誤的合理幅度。

它避免使用絕對誤差值,這在數學計算中是非常不希望的。

當我們有更多樣本時,使用RMSE重建誤差分佈被認為更可靠。

RMSE受到異常值的影響很大。因此,請確保在使用此指標之前已從資料集中刪除了異常值。

與平均絕對誤差( mean absolute error)相比,RMSE提供更高的權重並懲罰大的錯誤。

RMSE指標由下式給出:

你知道這11個重要的機器學習模型評估指標嗎?

其中,N是樣本總數。

10. 均方根對數誤差(Root Mean Squared Logarithmic Error)

在均方根對數誤差的情況下,我們採用預測和實際值的對數。當我們不希望在預測值和真值都是巨大數字時懲罰預測值和實際值的巨大差異時,通常使用RMSLE。

你知道這11個重要的機器學習模型評估指標嗎?

如果預測值和實際值都很小:RMSE和RMSLE相同。

如果預測或是實際值很大:RMSE> RMSLE

如果預測值和實際值都很大:RMSE> RMSLE(RMSLE幾乎可以忽略不計)

11. R-squared/Adjusted R-squared

我們瞭解到,當RMSE降低時,模型的效能將會提高。但僅憑這些值並不直觀。

在分類問題的情況下,如果模型的準確率為0。8,我們可以衡量我們的模型對隨機模型的有效性,隨機模型的精度為0。5。因此隨機模型可以作為基準。但是當我們談論RMSE指標時,我們沒有比較基準。

這是我們可以使用R-Squared指標的地方。R-Squared的公式如下:

你知道這11個重要的機器學習模型評估指標嗎?

你知道這11個重要的機器學習模型評估指標嗎?

MSE(model):預測與實際值的均方差。

MSE(baseline):平均預測值與實際值的均方差

換句話說,與一個非常簡單的模型相比,我們的迴歸模型有多好,這個模型只是預測訓練集中目標的平均值作為預測。

Adjusted R-Squared

當模型表現與baseline相同時R-Squared為0。更好的模型,更高的R2值。具有所有正確預測的最佳模型將使R-Squared為1。然而,在向模型新增新特徵時,R-Squared值增加或保持不變。R-Squared不會因新增對模型沒有任何價值的功能而受到懲罰。因此,R-Squared的改進版本是經過調整的R-Squared。調整後的R-Squared的公式由下式給出:

你知道這11個重要的機器學習模型評估指標嗎?

k:特徵數量

n:樣本數量

如你所見,此指標會考慮特徵的數量。當我們新增更多特徵時,分母中項n-(k +1)減小,因此整個表示式增加。

如果R-Squared沒有增加,那意味著新增的特徵對我們的模型沒有價值。因此總的來說,我們從1減去一個更大的值,而調整後的r2反過來會減少。

除了這11個指標之外,還有另一種檢查模型效能的方法。這7種方法在資料科學中具有統計學意義。但是,隨著機器學習的到來,我們現在擁有更強大的模型選擇方法。沒錯!就是交叉驗證。

但是,交叉驗證並不是一個真正的評估指標,它可以公開用於傳達模型的準確性。但是,交叉驗證的結果提供了足夠直觀的結果來說明模型的效能。

現在讓我們詳細瞭解交叉驗證。

12. 交叉驗證(Cross Validation)

讓我們首先了解交叉驗證的重要性。很久以前,我參加了Kaggle的TFI比賽。我想向你展示我的公共和私人排行榜得分之間的差異。

以下是Kaggle得分的一個例子!

你知道這11個重要的機器學習模型評估指標嗎?

你會注意到,公共分數最差的第三個條目變成了私人排名的最佳模型。在“submission_all。csv”之上有超過20個模型,但我仍然選擇“submission_all。csv”作為我的最終條目(這確實很有效)。是什麼導致了這種現象?我的公共和私人排行榜的不同之處是過度擬合造成的。

過度擬合只不過是當你的模型變得非常複雜時它會捕捉噪音。這種“噪音”對模型沒有任何價值除了造成模型不準確。

在下一節中,我將討論在我們真正瞭解測試結果之前如何知道解決方案是否過擬合。

概念:交叉驗證

交叉驗證是任何型別的資料建模中最重要的概念之一。它只是說,嘗試留下一個樣本集,不在這個樣本集上訓練模型,並在最終確定模型之前在該樣本集上測試模型。

你知道這11個重要的機器學習模型評估指標嗎?

上圖顯示瞭如何使用及時樣本集驗證模型。我們簡單地將人口分成2個樣本集,並在一個樣本集上建立模型。其餘人口用於及時驗證。

上述方法會有消極的一面嗎?

這種方法的一個消極方面訓練模型中丟失了大量資料。因此,該模型具有很高的偏差。這不會給出係數的最佳估計。那麼下一個最佳選擇是什麼?

如果,我們將訓練人口以50:50的劃分,前50用於訓練,後50用於驗證。然後,我們在後50進行訓練,在前50進行測試。這樣我們在整個人口中訓練模型,即使是一次性使用50%。這樣可以減少偏差,因為樣本選擇在一定程度上可以提供較小的樣本來訓練模型。這種方法稱為2折交叉驗證。

k折交叉驗證

讓我們最後演示一個從2折交叉驗證到k折交叉驗證的例子。現在,我們將嘗試視覺化k折交叉驗證的工作原理。

你知道這11個重要的機器學習模型評估指標嗎?

這是一個7折交叉驗證。我們將整個人口劃分為7個相同的樣本集。現在我們在6個樣本集(綠色框)上訓練模型並在1個樣本集(灰色框)上進行驗證。然後,在第二次迭代中,我們使用不同的樣本集訓練模型剩餘的一個樣本集作為驗證。在7次迭代中,我們基本上在每個樣本集上構建了模型,並將每個樣本集作為驗證。這是一種減少選擇偏差並減少預測方差的方法。一旦我們擁有所有7個模型,我們使用平均誤差決定那個模型是最好的。

這怎樣找到最佳(非過擬合)模型?

k折交叉驗證廣泛用於檢查模型是否過擬合。如果k次建模中的每一次的效能度量彼此接近,則度量的均值最高。在Kaggle比賽中,你可能更多地依賴交叉驗證分數而不是Kaggle公共分數。透過這種方式,你將確保公共分數不僅僅是偶然的。

我們如何使用任意模型上實現k折?

R和Python中的k折編碼非常相似。以下是在Python中k折編碼的方法:

from sklearn import cross_validation

model = RandomForestClassifier(n_estimators=100)

#簡單的K-fold交叉驗證。5折。(注意:在較舊的scikit-learn版本中,“n_folds”引數名為“k”。

cv = cross_validation。KFold(len(train), n_folds=5, indices=False)

results = []

# “model” 可以替換成你的模型物件

# ““error_function”可以替換為cv中traincv,testcv的分析錯誤函式:

probas = model。fit(train[traincv], target[traincv])。predict_proba(train[testcv])

results。append( Error_function )

#打印出交叉驗證結果的平均值

print ”Results: “ + str( np。array(results)。mean() )

怎樣選擇k?

這是棘手的部分。我們需要權衡選擇k。

對於小k,我們有更高的選擇偏差但方差很小。

對於大k,我們有一個小的選擇偏差但方差很大。

k =樣本數(n):這也稱為“留一法”。我們有n個樣本集合和並重復建模n次,只留下一個樣本集進行交叉驗證。

通常,對於大多數目的,建議使用k = 10的值。

總結

在訓練樣本上評估模型沒有意義,但留出大量的樣本以驗證模型則比較浪費資料。k折交叉驗證為我們提供了一種使用每個資料點的方法,可以在很大程度上減少這種選擇偏差。

另外,本文中介紹的度量標準是分類和迴歸問題中評估最常用的度量標準。

你在分類和迴歸問題中經常使用哪個指標?你之前是否使用過k折交叉驗證進行分析?你是否看到使用各種驗證的好處?請在下面的評論部分告訴我們你的看法。