全文共8139字,預計學習時長16分鐘
構建機器學習模型的想法應基於建設性的反饋原則。你可以構建模型,從指標得到反饋,不斷改進,直到達到理想的準確度。評估指標能體現模型的運轉情況。評估指標的一個重要作用在於能夠區分眾多模型的結果。
很多分析師和數據科學家甚至都不願意去檢查其模型的魯棒性。一旦完成了模型的構建,他們就會急忙將預測值應用到不可見的數據上。這種方法不正確。
我們的目的不能是簡單地構建一個預測模型。目的是關於創建和選擇一個對樣本以外數據也能做到高精度的模型。因此,在計算預測值之前,檢查模型的準確性至關重要。
在這個行業中,大家會考慮用不同類型的指標來評估模型。指標的選擇完全取決於模型的類型和執行模型的計劃。
模型構建完成後,這11個指標將幫助評估模型的準確性。考慮到交叉驗證的日益普及和重要性,本文中也提到了它的一些原理。
預測模型的類型
說到預測模型,大家談論的要麼是回歸模型(連續輸出),要麼是分類模型(離散輸出或二進位輸出)。每種模型中使用的評估指標都不同。
在分類問題中,一般使用兩種類型的算法(取決於其創建的輸出類型):
1.類輸出:SVM和KNN等算法創建類輸出。例如,在二進位分類問題中,輸出值將為0或1。但如今,有算法可以將這些類輸出轉換為概率輸出。但是,統計圈並不是很樂意接受這些算法。
2.概率輸出:邏輯回歸( Logistic Regression ),隨機森林( Random Forest ),梯度遞增( Gradient Boosting ),Adaboost等算法會產生概率輸出。將概率輸出轉換為類輸出只是創建一個閾值概率的問題。
在回歸問題中,輸出時不會出現這種不一致性。輸出本來就是一直連續的,不需要進一步處理。
例證
關於分類模型評估指標的討論,筆者已在Kaggle平臺上對BCI挑戰做了預測。問題的解決方案超出了此處討論的範圍。但是,本文引用了訓練集的最終預測。通過概率輸出預測該問題,假設閾值為0.5的情況下,將概率輸出轉換為類輸出。
1. 混淆矩陣
混淆矩陣是一個N×N矩陣,N是預測的類的數量。針對目前的問題,有N = 2,因此得到一個2×2的矩陣。你需要記住以下這些關於混淆矩陣的定義:
· 準確性:正確預測的結果佔總預測值的比重
· 陽性預測值或查準率:預測結果是正例的所有結果中,正確模型預測的比例
· 陰性預測值:預測結果是負例的所有結果中,錯誤模型預測的比例。
· 敏感度或查全率 :在真實值是正例的結果中,正確模型預測的比重。
· 特異度:在真實值是負例的所有結果中,正確模型預測的比重。
目前案例的準確率達到88%。從以上兩個表中可以看出,陽性預測值很高,但陰性預測值很低,而敏感度和特異度一樣。這主要由選擇的閾值所造成,如果降低閾值,兩對截然不同的數字將更接近。
通常,大家關註上面定義的指標中的一項。例如,一家製藥公司,更關心的是最小錯誤陽性診斷。因此,他們會更關注高特異度。另一方面,消耗模型會更注重敏感度。混淆矩陣通常僅用於類輸出模型。
2. F1分數
在上一節中,討論了分類問題的查準率和查全率,也強調了在用例中選擇查準率和查全率的重要性。如果對於一個用例,想要試圖同時獲得最佳查準率和查全率呢?F1-Score是分類問題查準率和查全率的調和平均值。其公式如下:
現在,一個顯而易見的問題是,為什麼採用調和平均值而不是算術平均值呢?這是因為調和平均值可以解決更多極值。通過一個例子來理解這一點。有一個二進位分類模型的結果如下:
查準率:0,查全率:1
這裡,如果採用算術平均值,得到的結果是0.5。很明顯,上面的結果是一個「傻子」分類器處理的,忽略了輸入,僅將其預測的其中一個類作為輸出。現在,如果要取調和平均值,得到的結果就會是0,這是準確的,因為這個模型對於所有的目的來說都是無用的。
這看似很簡單。然而在有些情況下,數據科學家更關心查準率和查全率的問題。稍稍改變上面的表達式,包含一個可調參數β來實現該目的,得出:
Fbeta衡量模型對用戶的有效性,用戶對查全率的重視程度是查準率的β倍。
3. 增益圖和提升圖
增益圖和提升圖主要用於檢查概率的順序。以下是構建提升圖/增益圖的步驟:
步驟1:計算每個樣本的概率。
步驟2:按降序排列這些概率。
步驟3:每組構建十分位數時都有近10%的樣本。
步驟4:計算每個十分位數的響應率,分為Good( Responders )、Bad( Non-responders )和總數。
你會獲得下表,需要據此繪製增增益圖或提升圖:
表格提供了大量信息。累積增益圖介於累計 %Right和累計 %Population圖之間。下面是對應的案例圖:
該圖會告訴你的模型responders與non-responders的分離程度。例如,第一個十分位數有10%的數量,和14%的responders。這意味著在第一個十分位數時有140%的升力。
在第一個十分位數可以達到的最大升力是多少?從第一個表中可以知道responders的總數是3,850人,第一個十分位數也包含543個樣本。因此,第一個十分位數的最大升力值可能是543/3850約為14.1%。所以該模型近乎完美。
現在繪製升力曲線。升力曲線是總升力和 %population之間的關係曲線。注意:對於隨機模型,此值始終穩定在100%處。這是目前案例對應的提升圖:
也可以使用十分位數繪製十分位升力:
這個圖說明什麼?這表示模型運行到第7個十分位數都挺好。每個十分位數都會傾向non-responders。在3分位數和7分位數之間,任何升力在100%以上的模型(@十分位數)都是好模型。否則可能要先考慮採樣。
提升圖或增益圖表廣泛應用於目標定位問題。這告訴我們,在特定的活動中,可以鎖定客戶在哪個十分位數上。此外,它會告訴你對新目標數據期望的響應量。
4. K-S圖
K-S或Kolmogorov-Smirnov圖表衡量分類模型的性能。更準確地說,K-S是衡量正負例分布分離程度的指標。如果分數將人數劃分為單獨兩組,其中一組含所有正例,另一組含所有負例,則K-S值為100。
另一方面,如果模型不能區分正例和負例,那麼就如同模型從總體中隨機選擇案例一樣,K-S為0。在大多數分類模型中,K-S值將從0和100之間產生,並且值越高,模型對正例和負例的區分越好。
對於以上案例,請看表格:
還可以繪製 %Cumulative Good和Bad來查看最大分離。下面是示例圖:
到目前為止,所涵蓋的指標主要用於分類問題。直到這裡,已經了解了混淆矩陣、增益圖和提升圖以及kolmogorov-smirnov圖。接下來繼續學習一些更重要的指標。
5. AUC曲線( AUC-ROC )
這又是業內常用的指標之一。使用ROC曲線的最大優點是不受responders比例變化的影響。下文會講得更清楚。
首先試著去理解什麼是ROC(接收器操作特性)曲線。如果看下面的混淆矩陣,就會觀察到對於概率模型,每個指標的值不同。
因此,對於每種敏感度,都會有不同的特異度。兩者差異如下:
ROC曲線是敏感度和(1-特異度)之間的曲線。(1-特異性)也稱為假正率,敏感度也稱為真正率。下圖本案例的ROC曲線。
以閾值為0.5為例(參考混淆矩陣)。這是混淆矩陣:
如你所見,此時敏感度為99.6%,(1-特異性)大約為60%。該坐標在ROC曲線中成為點。為了將該曲線表達成數值,就要計算該曲線下的面積( AUC )。
注意,整個正方形的面積是1 * 1 = 1。因此,AUC本身就是曲線下的比值和總面積。對於那個案例,得到AUC ROC的值為96.4%。以下是一些拇指規則( thumb rules ):
· 0.90-1=優秀(A)
· 0.80-0.90 =良好(B)
· 0.70-0.80 =一般(C)
· 0.60-0.70 =差(D)
· 0.50-0.60 =失敗(F)
可以看出,目前的模型屬於優秀範圍。但也可能只是過度擬合。這種情況下,驗證顯得迫在眉睫了。
以下幾點需注意:
1.對於作為類輸出的模型,將在ROC圖中用單個點表示。
2.這些模型無法相互比較,因為需要在單個指標基礎上進行判斷而不是多個指標。例如,具有參數(0.2,0.8)的模型和具有參數(0.8,0.2)的模型可以來自相同的模型,因此不應直接比較這些指標。
3.在概率模型的情況下,有幸能得到一個AUC-ROC的單個數字。但是,仍然需要查看整個曲線去做最終決定。又可能是一個模型在某些範圍中性能更好,其他的在別的範圍中更好。
使用ROC的優點
為什麼要使用ROC而不是升力曲線等指標?
升力取決於人口的總響應率。因此,如果人口的響應率發生變化,同一模型將帶來不同的升力圖。解決這種問題的方案可以是真正的升力圖(在每個十分位數處找到升力值和完美模型升力值的比率)。但這種比例很少對企業有價值。
另一方面,ROC曲線幾乎與響應率無關。這是因為它有兩個來自混淆矩陣柱狀計算中的軸。在響應率變化的情況下,x軸和y軸的分子和分母也會有相應的改變。
6. 對數損失
確定模型性能時AUC-ROC會考慮預測概率。然而,AUC ROC存在一個問題,就是只考慮概率的順序,因此忽略了模型對更可能是正樣本預測更高概率的能力。這種情況下,可以採取對數損失,它只是每個案例修正預測概率的對數的負平均值。
· 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
如果繪製這種關係,曲線圖如下:
從斜率向右下方逐漸平緩可以明顯看出,隨著預測概率的提高,對數損失值逐漸下降。不過反方向移動時,對數損失快速增加而預測概率趨近於0。
因此,降低對數損失,對模型更好。但是,對於好的對數損失沒有絕對的衡量標準,它取決於用例或者應用程式。
雖然AUC是根據具有不同決策閾值的二進位分類計算的,但對數損失實際上考慮了分類的「確定性」。
7. 基尼係數
基尼係數有時用於分類問題。基尼係數可由AUC ROC數直接導出。基尼只是ROC曲線和diagnol線之間的面積與上述三角形的面積之比。下面是使用公式:
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圖或者提升圖。
9. 均方根誤差
RMSE是回歸問題中最常用的評估指標。它遵循一個假設,即誤差無偏,遵循正態分布。以下是RMSE需要注意的要點:
1.「平方根」使該指標能夠顯示很多偏差。
2.此指標的「平方」特性有助於提供更強大的結果,從而防止取消正負誤差值。換句話說,該指標恰當地顯示了錯誤術語的合理幅度。
3.它避免使用絕對誤差值,這在數學計算中是極不希望看到的。
4.有更多樣本時,使用RMSE重建誤差分布被認為更可靠。
5.RMSE受異常值的影響很大。因此,請確保在使用此指標之前已從數據集中刪除了異常值。
6.與平均絕對誤差相比,RMSE提供更高的權重並懲罰大錯誤。
RMSE指標由以下公式給出:
其中,N是樣本總數。
10. 均方根對數誤差
在均方根對數誤差的情況下,採用預測和實際值的對數。基本上,正在測量的方差就是變化。預測值和真值都很龐大時不希望處理預測值和實際值存在的巨大差異話通常採用RMSLE。
1.如果預測值和實際值都很小:RMSE和RMSLE相同。
2.如果預測值或實際值很大:RMSE> RMSLE
3.如果預測值和實際值都很大:RMSE> RMSLE(RMSLE幾乎可以忽略不計)
11. R-Squared/Adjusted R-Squared
已經知道RMSE降低時,模型的性能將會提高。但僅憑這些值並不直觀。
在分類問題的情況下,如果模型的準確度為0.8,可以衡量模型對隨機模型的有效性,哪個準確度為0.5。因此,隨機模型可以作為基準。但是在談論RMSE指標時,卻沒有比較基準。
這裡可以使用R-Squared指標。R-Squared的公式如下:
MSE(模型):預測值與實際值的平均誤差
MSE(基線):平均預測值與實際值的平均誤差
換言之,與一個非常簡單的模型相比,回歸模型可以說很不錯了,一個簡單的模型只能預測訓練集中目標的平均值作為預測。
Adjusted R-Squared調整後的可決係數(參考)
模型表現與baseline相同時,R-Squared為0。模型越好,R2值越高。最佳模型含所有正確預測值時,R-Squared為1。但是,向模型添加新功能時,R-Squared值會增加或保持不變。R-Squared不會因添加了對模型無任何價值的功能而被判「處罰」。因此,R-Squared的改進版本是經過調整的R-Squared。調整後的R-Squared的公式如下:
k:特徵數量
n:樣本數量
如你所見,此指標會考慮特徵的數量。添加更多特徵時,分母項n-(k +1)減小,因此整個表達式在增大。
如果R-Squared沒有增大,那意味著添加的功能對模型沒有價值。因此總的來說,在1上減去一個更大的值,調整的r2,反而會減少。
除了這11個指標之外,還有另一種檢驗模型性能。這7種方法在數據科學中具有統計學意義。但是,隨著機器學習的到來,我們現在擁有更強大的模型選擇方法。沒錯!現在來談論一下交叉驗證。
雖然交叉驗證不是真正的評估指標,會公開用於傳達模型的準確性。但交叉驗證提供了足夠直觀的數據來概括模型的性能。
現在來詳細了解交叉驗證。
12.交叉驗證(雖然不是指標!)
首先來了解交叉驗證的重要性。由於日程緊張,這些天筆者沒有太多時間去參加數據科學競賽。很久以前,筆者參加了Kaggle的TFI比賽。這裡就不相信介紹筆者競賽情況了,我想向大家展示個人的公共和私人排行榜得分之間的差異。
以下是Kaggle得分的一個例子!
對於TFI比賽,以下是個人的三個解決方案和分數(越小越好):
可以注意到,公共分數最差的第三個條目成為了私人排行榜上的最佳模型。「submission_all.csv」之前有20多個模型,但筆者仍然選擇「submission_all.csv」作為最終條目(實踐證明確實很有效)。是什麼導致了這種現象?筆者的公共和私人排行榜的差異是過度擬合造成的。
模型變得高度複雜時,過度擬合也會開始捕捉噪音。這種「噪音」對模型沒有任何價值,只會讓其準確度降低。
下一節中,筆者將討論在真正了解測試結果之前,如何判斷解決方案是否過度擬合。
概念:交叉驗證
交叉驗證是任何類型數據建模中最重要的概念之一。就是說,試著留下一個樣本集,但並不在這個樣本集上訓練模型,在最終確定模型之前測試依據該樣本集建立的模型。
上圖顯示了如何使用及時樣本集驗證模型。簡單地將人口分成2個樣本,在一個樣本上建立模型。其餘人口用於及時驗證。
上述方法會有不好的一面嗎?
這種方法一個消極面就是在訓練模型時丟失了大量數據。因此,模型的偏差會很大。這不會給係數做出最佳估測。那麼下一個最佳選擇是什麼?
如果,將訓練人口按50:50的比例分開,前50用於訓練,後50用於驗證。然後兩組顛倒過來進行實驗。通過這種方式,在整個人口基礎上訓練模型,但一次只借用50%。這樣可以減少偏差,因為樣品選擇在一定程度上可以提供較小的樣本來訓練模型。這種方法稱為2折交叉驗證。
k折交叉驗證
最後一個例子是從2折交叉驗證推斷到k折交叉驗證。現在,嘗試將k折交叉驗證的過程可視化。
這是一個7折交叉驗證。
真實情況是這樣:將整個人口劃分為7個相同的樣本集。現在在6個樣本集(綠色框)上訓練模型,在1個樣本集(灰色框)上進行驗證。然後,在第二次迭代中,使用不同的樣本集訓練模型作為驗證。在7次迭代中,基本上在每個樣本集上都構建了模型,同時作為驗證。這是一種降低選擇偏差、減少預測方差的方法。一旦擁有所有這7個模型,就可以利用平均誤差項找到最好的模型。
這是如何幫助找到最佳(非過度擬合)模型的?
k折交叉驗證廣泛用於檢查模型是否是過度擬合。如果k次建模中的每一次的性能指標彼此接近,那麼指標的均值最高。在Kaggle比賽中,你可能更多地依賴交叉驗證分數而不是Kaggle公共分數。這樣就能確保公共分數不單單是偶然出現。
如何使用任何型號實現k折?
R和Python中的k折編碼非常相似。以下是在Python中編碼k-fold的方法:
from sklearn import cross_validation model = RandomForestClassifier(n_estimators=100) #Simple K-Fold cross validation. 5 folds. #(Note: in older scikit-learn versions the "n_folds" argument is named "k".) cv = cross_validation.KFold(len(train), n_folds=5, indices=False) results = [] # "model" can be replaced by your model object # "Error_function" can be replaced by the error function of your analysis for traincv, testcv in cv: probas = model.fit(train[traincv], target[traincv]).predict_proba(train[testcv]) results.append( Error_function ) #print out the mean of the cross-validated results print "Results: " + str( np.array(results).mean() )
但是如何選擇k呢?
這是棘手的部分。需要權衡來選擇k。
對於小k,有更高的選擇偏差但性能差異很小。
對於大k,有小的選擇偏差但性能差異很大。
想想極端情況:
k = 2:只有2個樣本,類似於50-50個例子。在這裡,每次僅在50%的人口中構建模型。但由於驗證會有很多人,所以 驗證性能的差異是最小的。
k =樣本數( n ):這也稱為「留一法」。有n次樣本,建模重複n次,只留下一個樣本集進行交叉驗證。因此,選擇偏差很小,但驗證性能的差異非常大。
通常,針對大多數情況,建議使用k = 10的值。
結語
在訓練樣本上評估模型毫無意義。留出大量的樣本來驗證模型也是在浪費數據。k折交叉驗證為我們提供了一種使用單個數據點的方法,可以在很大程度上減少選擇偏差。同時,K折交叉驗證可以與任何建模技術一起使用。
此外,本文中介紹的指標標準是分類和回歸問題中評估最常用的指標標準。
留言 點讚 關注
我們一起分享AI學習與發展的乾貨
編譯組:餘書敏、孫夢琪
相關連結:
https://www.analyticsvidhya.com/blog/2019/08/11-important-model-evaluation-error-metrics/
如需轉載,請後臺留言,遵守轉載規範