推薦系統的評估方法

Lei_yiyi發表於2020-12-01

離線評估的主要方法

Holdout檢驗

Holdout檢驗是基礎的離線評估方法,它將原始的樣本集合隨機劃分為訓練集和驗證集兩部分,比如70%訓練集,30%測試集(但現在很多機器學習框架、深度學習框架中都增加了驗證集,即將整個資料集分成三份,70%訓練集,10%驗證集,20%測試集)。

Holdout檢驗的缺點也很明顯,即在驗證集上計算出來的評估指標與訓練集和測試機的劃分有直接關係,如果僅進行少量Holdout檢驗,則得到的結論存在很大的隨機性(在劃分資料集的時候儘量保證其隨機性)。

交叉檢驗

K 折交叉驗證

K 折交叉驗證(K-Fold Cross Validation),先將全部樣本劃分成k個大小相等的樣本子集,依次遍歷這k個子集,每次都把當前子集作為驗證集,其餘所有子集作為訓練集,進行模型的訓練和評估,最後將所有k次的評估指標的平均值作為最終的評估指標,在實際經驗中,k經常取值為 10。

留一驗證

每次留下1個樣本作為驗證集,其餘所有樣本作為測試集,樣本總數為n,依次遍歷所有n個樣本,進行n次驗證,再將評估指標求平均得到最終指標。在樣本總數較多的情況下,留一驗證法的時間開銷極大,事實上,留一驗證是留p驗證的特例,留p驗證是指每次留下p個樣本作為驗證集,而從n個元素中選擇p個元素有 C n p C_n^p Cnp種可能,因此它的時間開銷遠遠高於留一驗證,故很少在實際中使用。

自助法

不管是holdout檢驗還是K-Fold CV,都是基於劃分訓練集和測試集的方法進行模型評估的,當樣本規模比較小時,將樣本集進行劃分,會進一步縮小訓練集,有影響模型的訓練效果。

自助法(Bootstrap)是基於自助取樣法的檢驗方法:對於總數為n的樣本集合,進行n次有放回的隨機抽樣,得到大小為n的訓練集,在n次取樣過程中,有的樣本會被重複取樣,有的樣本沒有被抽出過,將這些沒有被抽出的樣本作為驗證集進行模型驗證,就是自助法的驗證過程。

離線評估的主要指標

準確率

分類準確率是指分類正確的樣本佔總樣本個數的比例: a c c u r a c y = n c o r r e c t / n t o t a l accuracy = n_{correct}/n_{total} accuracy=ncorrect/ntotal n c o r r e c t n_{correct} ncorrect為被正確分類的樣本個數, n t o t a l n_{total} ntotal為總樣本個數,準確率是分類任務中比較直觀的評價指標。

優點:解釋性強
缺點:類別分佈不均勻時,佔比大的類別往往成為影響準確率的主要因素(極端的情況比如正樣本 1%,負樣本 99%時)

精確率、召回率、F1-score

  • 精確率(Precision)是分類正確的正樣本個數佔分類器判定為正樣本的樣本個數的比例

  • 召回率(Recall)是分類正確的正樣本個數佔真正正樣本個數的比例

排序模型中,通常沒有一個確定的閾值把預測結果直接判定為正樣本還是負樣本,而是採用 TopN 排序結果的精確率(Precision@N)和召回率(Recall@N)來衡量排序模型的效能,即認為模型排序的TopN的結果就是模型排定的正樣本,然後計算精確率和召回率。

精確率和召回率是矛盾統一的兩個指標:為了提高精確率,分類器需要儘量在“更有把握時”才把樣本預測為正樣本,但往往因為過於保守而漏掉很多“沒有把握”的正樣本,導致召回率降低。

因此使用F1-score進行調和(也叫F-measure),定義為: F 1 = 2 ∗ P r e c i s i o n ∗ R e c a l P r e c i s i o n + R e c a l l F1 = \frac{2*Precision*Recal}{Precision+Recall} F1=Precision+Recall2PrecisionRecal

均方根誤差、平均絕對百分比誤差

均方根誤差(Root Mean Square Error,RMSE)經常被用來衡量回歸模型的好壞,使用點選率預估模型構建推薦系統時,推薦系統預測的其實是樣本為正樣本的概率,RMSE被定義為: R M S E = ∑ i = 1 n ( y i − y ’ ) 2 n RMSE = \sqrt{\frac{\sum_{i=1}^n(y_i - y^’)^2}{n}} RMSE=ni=1n(yiy)2
y i y_i yi為第i個樣本的真實值, y ’ y^’ y為第i個樣本的預測值,n為樣本的個數。

缺點:一般情況下能夠很好的反映迴歸模型預測值與真實值的偏離程度,但在實際應用時,如果存在個別偏離程度非常大的離群點,那麼即使離群點的數量非常少,也會讓RMSE指標變得很差。

為了解決這個問題,引入了魯棒性更強的平均絕對百分比誤差(Mean Absolute Percent Error,MAPE)進行類似的評估,MAPE定義如下: M A P E = ∑ i = 1 n ∣ y i − y ’ y i ∣ ∗ 100 n MAPE = \sum_{i=1}^n\mid\frac{y_i - y^’}{y_i}\mid*\frac{100}{n} MAPE=i=1nyiyiyn100相比RMSE,MAPE相當於把每個點的誤差進行了歸一化,降低了個別離群點帶來的絕對誤差的影響。

對數損失函式

LogLoss,在一個二分類問題中,LogLoss定義為: L o g L o s s = − 1 N ∑ i = 1 n ( y i l o g P i + ( 1 − y i ) l o g ( 1 − P i ) LogLoss=-\frac{1}{N}\sum_{i=1}^n(y_ilogP_i+(1-y_i)log(1-P_i) LogLoss=N1i=1n(yilogPi+(1yi)log(1Pi)其中 y i y_i yi為輸入例項 x i x_i xi的真實類別, p i p_i pi為預測輸入例項 x i x_i xi是正樣本的概率,N為樣本總數。

LogLoss 是邏輯迴歸的損失函式,大量深度學習模型的輸出層是邏輯迴歸或softmax,因此採用LogLoss作為評估指標能夠非常直觀的反映模型損失函式的變化,站在模型的角度來講,LogLoss非常適於觀察模型的收斂情況。

直接評估推薦序列的離線指標

P-R曲線、BEP、F1

P-R曲線的橫軸是召回率,縱軸是精確率,對於一個排序模型來說,其P-R曲線上的一個點代表:在某一閾值下,模型將大於該閾值的結果判定為正樣本,將小於該閾值的結果判定為負樣本時,排序結果對應的召回率和精確率。

整體P-R曲線是通過從高到低移動正樣本閾值生成的,如下所示:
在這裡插入圖片描述

P-R曲線的橫座標是 Recall(召回率),縱座標是 Precision(精確率),Recall和Precision的計算方法如下: R e c a l l = T P T P + F N , P r e c i s i o n = T P T P + F P Recall=\frac{TP}{TP+FN},Precision=\frac{TP}{TP+FP} Recall=TP+FNTP,Precision=TP+FPTPPrecision(查準率)即預測結果中真正的正例的比例,Recall(查全率)即所有正例中被正確預測出來的比例。可以發現,這倆個座標值其實是有相互制約的一個概念在裡面。

如果一個學習器的P-R曲線被另一個學習器的P-R曲線完全包住,則可斷言後者的效能優於前者,例如上面的A和B優於學習器C,但是A和B的效能無法直接判斷,但我們往往仍希望把學習器A和學習器B進行一個比較,我們可以根據曲線下方的面積大小來進行比較,但更常用的是平衡點或者是F1值。

平衡點(BEP)是查準率=查全率時的取值,如果這個值較大,則說明學習器的效能較好。

F1 = 2PR/( P+R ),同樣,F1值越大,我們可以認為該學習器的效能較好。

ROC曲線、AUC

ROC曲線的全稱是 the Receiver Operating Characteristic曲線,中文譯為「受試者工作特徵曲線」,ROC曲線最早誕生於軍事領域,而後在醫學領域應用甚廣,「受試者工作特徵曲線」也來源於該領域。

ROC曲線的繪製和P-R曲線一樣,通過不斷移動模型正樣本閾值生成的,如下所示:在這裡插入圖片描述
ROC曲線的橫座標是 False Posotive Rate(FPR, 假陽性率),縱座標是 True Positive Rate(TPR,真陽性率),FPR和TPR的計算方法如下: F P R = F P N , T P R = T P P FPR=\frac{FP}{N},TPR=\frac{TP}{P} FPR=NFP,TPR=PTP上式中 P 是真實的正樣本數量,N 是真實的負樣本數量。FP 指的是N個負樣本中被分類器預測為正樣本的個數,TP 指的是 P 個正樣本中被分類器預測為正樣本的個數。可以發現,這倆個座標值其實是有相互制約的一個概念在裡面。

當繪製完成曲線後,就會對模型有一個定性的分析,如果要對模型進行量化的分析,此時需要引入一個新的概念,就是AUC(Area under roc Curve)面積,AUC就是指ROC曲線下的面積大小,而計算AUC值只需要沿著ROC橫軸做積分就可以了。真實場景中ROC曲線一般都會在這條直線的上方,所以AUC的取值一般在0.5~1之間。AUC的值越大,說明該模型的效能越好。

A/B測試與線上評估

上文介紹的離線評估指標無法還原真實的線上環境,幾乎所有的網際網路公司,線上A/B 測試都是驗證新模組、新功能、新產品是否有效的主要方法。

A/B測試又稱「分流測試」或「分桶測試」,是一個隨機實驗,通常被分為實驗組和對照組。利用控制變數法,保持單一變數進行A、B兩組的資料對比,並得到結論。

線上A/B測試無法被替代的原因主要有以下三點:

  • 離線評估無法完全消除資料有偏(data bias)現象的影響,因此得到的離線評估結果無法完全替代線上評估結果
  • 離線評估無法完全還原線上的工程環境,比如請求延遲、資料丟失、標籤資料缺失等,離線評估比較理想化,結果存在失真現象
  • 線上系統的某些商業指標在離線評估中無法計算

附錄一:混淆矩陣

如有100個樣本資料,這些資料分成2類,每類50個。分類結束後得到的混淆矩陣為:在這裡插入圖片描述
其對應的混淆矩陣如下:在這裡插入圖片描述
混淆矩陣包含四部分的資訊:

  • True negative(TN),稱為真陰率,表明實際是負樣本預測成負樣本的樣本數
  • False positive(FP),稱為假陽率,表明實際是負樣本預測成正樣本的樣本數
  • False negative(FN),稱為假陰率,表明實際是正樣本預測成負樣本的樣本數
  • True positive(TP),稱為真陽率,表明實際是正樣本預測成正樣本的樣本數

從上邊的圖可以分析出,對角線帶True的為判斷對了,斜對角線帶False的為判斷錯了。

混淆矩陣(Confusion matrix)是理解大多數評價指標的基礎。像常見的準確率,精準率,召回率,F1-score,AUC都是建立在混淆矩陣上的。

  • 準確率(Accuracy):判斷正確的佔總的數目的比例【(TN+TP)/100=(40+40)/100=0.8】
  • 精準率(precision):判斷正確的正類佔進行判斷的數目的比例(針對判別結果而言的,表示預測為正的資料中有多少是真的正確)【TP/(TP+FP) = 40/(40+60 )=0.4】
  • 召回率(recall):判斷正確正類佔應該判斷正確的正類的比例(針對原樣本而言,表示樣本中的正例有多少被判斷正確了)【TP/(TP+FN)=40/(40+60)=0.4】
  • F1-Measure:精確值和召回率的調和均值【2RR/(P+R)=20.40.4/(0.4+0.4)=1】
  • P-R曲線:P-R曲線的橫軸是召回率,縱軸是精確率【 R e c a l l = T P T P + F N , P r e c i s i o n = T P T P + F P Recall=\frac{TP}{TP+FN},Precision=\frac{TP}{TP+FP} Recall=TP+FNTP,Precision=TP+FPTP
  • ROC曲線:ROC曲線的橫座標是 False Posotive Rate(FPR, 假陽性率),縱座標是 True Positive Rate(TPR,真陽性率)【 F P R = F P N , T P R = T P P FPR=\frac{FP}{N},TPR=\frac{TP}{P} FPR=NFP,TPR=PTP
  • AUC:ROC曲線下的面積

附錄二:ROC曲線相比P-R曲線有什麼特點?如何選擇?

ROC曲線相比P-R曲線有什麼特點?

ROC曲線有一個巨大的優勢就是,當正負樣本的分佈發生變化時,其形狀能夠基本保持不變,而P-R曲線的形狀一般會發生劇烈的變化,因此該評估指標能降低不同測試集帶來的干擾,更加客觀的衡量模型本身的效能。

舉例來說,圖 a) 和 b) 是原始樣本的 ROC曲線和 P-R曲線,圖 c) 和 d) 則是將負樣本增加10倍後的 ROC曲線和 P-R曲線。在這裡插入圖片描述
1)從 a 和 c 可以看出,負樣本增加10倍後,ROC曲線變化不大。分析一下為什麼變化不大,其Y軸是TPR,x軸是FPR,當固定一個threshold來計算TPR和FPR的時候,雖然負樣本增加了10倍,也就是FPR的分母雖然變大了,但是正常概率來講,這個時候超過threshold的負樣本量也會隨之增加,也就是分子也會隨之增加,所以總體FPR變化不大,從這個角度來看的話正負樣本稍微不均衡的話,對KS影響也不大,因為KS=max(TPR-FPR),這個前提是正負樣本的量都比較大的情況下,因為只有樣本量比較大的情況下,根據大數定律,計算出來的頻率才非常接近於真實的概率值,有資料顯示正負樣本都超過6000的量,計算的頻率就比較接近概率。所以在樣本量都不是很大的情況下,如果樣本還極端不均衡的話,就會有一些影響。由此可見,ROC曲線能夠儘量降低不同測試集帶來的干擾,更加客觀地衡量模型本身的效能。

2)從 b 和 d 圖可以看出,負樣本增加10倍後,P-R 曲線變化比較大。也分析一下為什們變化大,其 Y 軸是precision,x 軸是 recall,當負樣本增加10倍後,在 racall 不變的情況下,必然召回了更多的負樣本,所以精確度會大幅下降,b和d圖示也非常明顯的反映了這一狀況,所以P-R曲線變化很大,所以PR曲線對正負樣本分佈比較敏感。

如何選擇?

選擇P-R曲線還是ROC曲線因實際問題而異。

  • 在很多實際問題中,正負樣本數量往往很不均衡。比如,計算廣告領域經常涉及轉化率模型,正樣本的數量往往是負樣本數量的1/1000,甚至1/10000。若選擇不同的測試集,P-R曲線的變化就會非常大,而ROC曲線則能夠更加穩定地反映模型本身的好壞。所以,ROC曲線的適用場景更多,被廣泛用於排序、推薦、廣告等領域。
  • 如果研究者希望更多地看到模型在特定資料集上的表現,PR曲線則能夠更直觀地反映其效能。
  • 當正負樣本比例失調時,比如正樣本1個,負樣本100個,則ROC曲線變化不大,此時用PR曲線更加能反映出分類器效能的好壞。這個時候指的是兩個分類器,因為只有一個正樣本,所以在畫ROC的時候變化可能不太大;但是在畫PR曲線的時候,因為要召回這一個正樣本,看哪個分類器同時召回了更少的負樣本,差的分類器就會召回更多的負樣本,這樣precision必然大幅下降,這樣分類器效能對比就出來了。

相關文章