返回文章列表

機器學習模型評估指標選擇與應用

本文探討機器學習模型評估指標的選擇與應用,特別關注在類別不平衡場景下的挑戰。文章以詐欺偵測模型為例,比較了不同指標(如 Precision、Recall、FPR)在實際案例中的表現,並討論了一致性度量的概念及其重要性。此外,文章還分析了損失函式與評估指標的關係,以及如何設計多元件損失函式以滿足業務需求。

機器學習 資料科學

在機器學習專案中,評估指標的選擇至關重要,它直接影響模型的訓練和最佳化方向。針對不同的任務和資料特性,需要選擇合適的指標來準確反映模型的效能。尤其在類別不平衡的場景下,例如詐欺偵測,常用的指標如 Precision 和 Recall 可能會產生誤導,需要結合其他指標如 FPR 進行綜合評估。除了模型的準確性,一致性也是一個重要的考量因素,它反映了模型在面對輸入微小變化時的穩定性。在實際應用中,需要根據業務目標建立指標層級結構,並選擇合適的線上和離線指標來指導模型的開發和迭代。損失函式的設計也需要與評估指標相比對,例如可以設計多元件損失函式來平衡不同指標的影響。

評估指標的選擇與應用

在機器學習專案中,選擇合適的評估指標(Metrics)是至關重要的。評估指標能夠幫助我們瞭解模型的表現,並根據具體的業務需求進行最佳化。本篇文章將探討評估指標的選擇方法,並透過一個實際案例來說明不同指標在詐欺偵測模型中的應用。

選擇評估指標的方法

當我們面臨選擇評估指標的任務時,可以遵循以下步驟:

  1. 參考設計目標:回顧專案的設計目標,確保所選的評估指標與最終目標一致。這有助於我們專注於真正重要的方面。
  2. 分解最終目標:將最終目標分解為更小的組成部分,並為每個部分定義相應的評估指標。這種做法可以幫助我們更好地理解複雜問題。
  3. 使用代理指標:對於難以直接衡量的目標,可以使用代理指標(Proxy Metrics)來間接評估。這在系統尚未上線前尤其有用。
  4. 選擇關鍵指標:從眾多指標中挑選出最能代表關鍵階段或總結整體表現的指標。

詐欺偵測模型中的評估指標

詐欺偵測是一個典型的二元分類別問題,其中0代表非詐欺交易,1代表詐欺交易。在這個領域,Precision和Recall是常用的評估指標。然而,這些指標在面對類別不平衡問題時可能會產生誤導。

Precision和Recall的侷限性

Precision衡量的是模型預測為正類別(詐欺)的樣本中,真正為正類別的比例。Recall則衡量的是所有正類別樣本中,被模型正確預測的比例。在詐欺偵測中,類別不平衡是一個常見問題,即非詐欺交易的數量遠遠大於詐欺交易。

import numpy as np

def gen_labels_preds(fraud, genuine, fraud_predicted, correct_fraud_predicted):
    labels = np.concatenate([np.repeat(True, fraud), np.repeat(False, genuine)])
    preds = np.concatenate([
        np.repeat(True, correct_fraud_predicted),  # TP
        np.repeat(False, fraud - correct_fraud_predicted),  # FN
        np.repeat(True, fraud_predicted - correct_fraud_predicted),  # FP
        np.repeat(False, genuine - (fraud_predicted - correct_fraud_predicted))  # TN
    ])
    return labels, preds

def calculate_metrics(labels, preds):
    TP = (preds & labels).sum()
    FP = (preds & ~labels).sum()
    TN = (~preds & ~labels).sum()
    FN = (~preds & labels).sum()
    recall = TP / (TP + FN)
    precision = TP / (TP + FP)
    FPR = FP / (FP + TN)
    return recall, precision, FPR

內容解密:

  1. gen_labels_preds函式:該函式用於生成模擬的標籤和預測結果。它根據輸入的詐欺交易數量、正常交易數量、預測為詐欺的數量以及正確預測為詐欺的數量,生成對應的標籤和預測結果陣列。
  2. calculate_metrics函式:該函式計算並傳回Recall、Precision和False Positive Rate(FPR)。這些指標用於評估模型的表現。
    • Recall:衡量模型捕捉詐欺交易的能力。
    • Precision:衡量模型預測為詐欺的交易中,實際為詐欺的比例。
    • FPR:衡量模型將正常交易誤判為詐欺的比例。

案例分析

假設有兩個模型,A和B,它們在不同的場景下表現不同。模型A有20個假陽性(False Positives),並且能夠捕捉到80%的詐欺交易。模型B有920個假陽性,同樣能夠捕捉到80%的詐欺交易。在不同的類別不平衡場景下,它們的Precision和FPR表現如下:

fraud = 100  # 高度不平衡
genuine = 100000
model_A_FP = 20
model_B_FP = 920

# 模型A
a_total_fraud_predicted = model_A_FP + fraud*0.8
a_correct_fraud_predicted = fraud*0.8
a_labels, a_preds = gen_labels_preds(fraud, genuine, a_total_fraud_predicted, a_correct_fraud_predicted)
a_recall, a_precision, a_FPR = calculate_metrics(a_labels, a_preds)

# 模型B
b_total_fraud_predicted = model_B_FP + fraud*0.8
b_correct_fraud_predicted = fraud*0.8
b_labels, b_preds = gen_labels_preds(fraud, genuine, b_total_fraud_predicted, b_correct_fraud_predicted)
b_recall, b_precision, b_FPR = calculate_metrics(b_labels, b_preds)

print("Model A Performance Metrics:")
print('TPR:', a_recall)
print("Precision:", a_precision)
print("FPR:", a_FPR)

print("\nModel B Performance Metrics:")
print('TPR:', b_recall)
print("Precision:", b_precision)
print("FPR:", b_FPR)

內容解密:

  1. 模擬不同模型的表現:透過設定不同的假陽性數量(model_A_FPmodel_B_FP),模擬兩個模型的表現。
  2. 計算評估指標:使用calculate_metrics函式計算兩個模型的Recall、Precision和FPR。
  3. 比較模型表現:透過比較兩個模型的評估指標,瞭解它們在不同場景下的表現差異。

模型評估指標的陷阱與一致性度量

在機器學習(ML)系統的開發過程中,選擇合適的評估指標對於模型的評估和最佳化至關重要。不同的指標從不同的角度反映模型的效能,而錯誤的指標選擇可能會導致對模型效能的誤判。

案例分析:詐欺檢測模型

考慮一個詐欺檢測的場景,目標是評估兩個模型(Model A 和 Model B)在檢測詐欺交易上的效能。假設有 100,000 筆交易,其中 1,000 筆是詐欺交易(1:100 的類別不平衡)。

程式碼範例

fraud = 1000  # 高度不平衡
genuine = 100000

# Model A
a_total_fraud_predicted = model_A_FP + fraud*0.8
a_correct_fraud_predicted = fraud*0.8
a_labels, a_preds = gen_labels_preds(fraud, genuine, a_total_fraud_predicted, a_correct_fraud_predicted)
a_recall, a_precision, a_FPR = calculate_metrics(a_labels, a_preds)

# Model B
b_total_fraud_predicted = model_B_FP + fraud*0.8  # 標記更多的交易
b_correct_fraud_predicted = fraud*0.8
b_labels, b_preds = gen_labels_preds(fraud, genuine, b_total_fraud_predicted, b_correct_fraud_predicted)
b_recall, b_precision, b_FPR = calculate_metrics(b_labels, b_preds)

print("Model A Performance Metrics:")
print('TPR:', a_recall)
print("Precision:", a_precision)
print("FPR:", a_FPR)
print("\nModel B Performance Metrics:")
print('TPR:', b_recall)
print("Precision:", b_precision)
print("FPR:", b_FPR)

結果分析

Model A 和 Model B 的效能指標如下:

  • Model A:TPR = 0.8,Precision = 0.9756,FPR = 0.0002
  • Model B:TPR = 0.8,Precision = 0.4651,FPR = 0.0092

從結果可以看出,Model A 在所有評估指標上都優於 Model B。Model B 的 FPR 是 Model A 的 46 倍,這意味著 Model B 將產生更多的誤報。雖然 Model B 的 TPR 與 Model A 相同,但其 Precision 明顯較低,這使得 Model B 在實際應用中不可接受。

#### 內容解密:

  1. TPR(True Positive Rate):表示模型正確檢測出的詐欺交易比例。兩模型均為 0.8,表示它們都能正確檢測出 80% 的詐欺交易。
  2. Precision:表示模型標記為詐欺的交易中,實際為詐欺的比例。Model A 的 Precision 為 0.9756,遠高於 Model B 的 0.4651,意味著 Model A 的預測更可靠。
  3. FPR(False Positive Rate):表示模型將正常交易誤標為詐欺的比例。Model B 的 FPR(0.0092)遠高於 Model A(0.0002),意味著 Model B 將產生更多的誤報。

一致性度量

在實際應用中,除了上述指標外,模型的穩定性和一致性也是非常重要的。一致性度量關注模型在面對稍微擾動的輸入時的輸出穩定性。這種屬性在不同的子領域中被稱為一致性、魯棒性、穩定性或平滑性。

一致性度量的數學表達

[ \text{模型的輸出變化} \rightarrow 0 \text{ 當輸入擾動} \rightarrow 0 ]

在某些應用場景中,如製造業的缺陷檢測系統,需要設計自定義的連續性指標來評估模型的效能。這種指標能夠幫助開發者逐步改進系統,直到達到理想的效能。

5.2 評估指標與一致性考量

在機器學習系統的開發過程中,一致性(Consistency)是一個經常被忽視但極為重要的屬性。簡單來說,一致性指的是模型對於輸入的微小變化不應該產生劇烈的輸出變化。這種屬性在許多實際應用中至關重要,因為它直接影響到使用者經驗和系統的可靠性。

一致性的重要性

舉例來說,在電腦視覺模型中,稍微改變光線條件不應該導致模型輸出結果的顯著差異。同樣地,對於情感分析模型,替換同義詞也不應該影響分析結果。此外,當模型重新訓練後(例如加入新資料或改變訓練引數),對於相同的輸入,模型的輸出應該保持穩定。

一致性的衡量

為了評估模型的一致性,我們可以採用一些特定的指標。例如,對於一個搜尋引擎系統,我們希望同一份檔案對於某個查詢的排序在不同版本的系統中保持一致。因此,可以使用查詢和檔案對的排序變異數作為一致性指標。變異數越小,表示系統的一致性越好。

值得注意的是,一致性指標的設計需要根據具體的應用場景進行調整。毫無變化的模型(如輸出恆為常數的模型)可能會具有最低的變異數,但這並不是我們期望的一致性。

線上與離線指標

在建立機器學習系統時,我們通常會區分線上(Online)和離線(Offline)指標。離線指標是在模型佈署前用於評估模型效能的指標,而線上指標則是在模型佈署後,透過實際業務資料計算得出的指標。兩者之間可能存在差異,但理想情況下,離線指標應該能夠預測線上指標的變化趨勢。

以Supermegaretail案例為例,最終目標是減少因缺貨和過量庫存導致的損失,這些損失可以用現金等值來表示,而不是簡單地使用平均絕對誤差(MAE)、均方誤差(MSE)等常見的評估指標。

指標層級與代理指標

在實踐中,我們通常會建立一個指標層級結構,其中離線指標用於快速評估模型效能,而線上指標則用於最終評估業務目標。代理指標(Proxy Metrics)則是用於間接衡量業務目標的指標。例如,在降低垃圾郵件和詐騙行為的案例中,最終目標是改善使用者經驗和降低風險,而不是簡單地最佳化召回率或特異度。

透過建立清晰的指標層級結構,並選擇合適的離線和線上指標,我們可以更有效地評估和最佳化機器學習系統,從而實作業務目標。

圖示說明:模型的穩定性

此圖示展示了不同版本的模型對於同一使用者被判定為詐騙的機率變化。在理想情況下,不同版本的模型應該給出相似的結果,以確保系統的穩定性和一致性。

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333

title 圖示說明:模型的穩定性

rectangle "P(F/U)=0.01" as n1
rectangle "P(F/U)=0.009" as n2
rectangle "P(F/U)=0.012" as n3
rectangle "P(F/U)=0.010" as n4
rectangle "P(F/U)=0.011" as n5
rectangle "P(F/U)=0.009" as n6

n1 --> n2
n2 --> n3
n3 --> n4
n4 --> n5
n5 --> n6

@enduml

內容解密:

此圖使用Plantuml圖表呈現不同版本模型對於同一使用者被判定為詐騙的機率變化。可以看到,不同版本的模型給出的機率值相對穩定,這表明模型的輸出具有一致性。圖表中的每個節點代表一個時間點或模型版本,箭頭表示模型的輸出結果。透過這個圖表,我們可以直觀地瞭解模型的穩定性和可靠性。

損失函式與評估指標

在機器學習系統設計中,損失函式與評估指標的選擇至關重要。線上指標(如點選率、轉換率)直接反映系統的實際表現,但由於其測量需要佈署到生產環境並進行A/B測試,因此通常使用離線指標作為代理,以預測線上指標的表現。

線上指標與離線指標的關係

離線指標作為線上指標的代理,需要滿足兩個條件:

  1. 相關性:離線指標需與線上指標具有正相關關係。
  2. 改善的可遷移性:離線指標的改善應能反映線上指標的改善。

以電子商務網站的推薦系統為例,最終目標是提高總銷售額(GMV)。由於GMV難以直接測量,因此選擇轉換率(CR)作為中間指標,並進一步使用點選率(CTR)作為代理指標。CTR與CR之間存在正相關關係,並且CTR的資料量遠大於CR,能夠加速迭代和A/B測試。

指標層級結構

透過建立指標層級結構,可以更好地理解各指標之間的關係,並找到合適的代理指標。例如,在電子商務網站中:

  1. 公司層級:總收入
  2. 產品層級:產品收入
  3. 使用者行為層級:點選率(CTR)、轉換率(CR)、平均購買價格等

多元件損失函式

在設計損失函式時,可以結合多個指標。例如,在推薦系統中,可以綜合考慮點選、購買和總購買金額等指標,以平衡不同層級的使用者行為。

設計檔案:新增損失函式與評估指標

Supermegaretail案例

目標:減少已交付商品與已售商品之間的差距,同時避免缺貨情況。

  1. 評估指標:參考相關研究論文,選擇適合的評估指標。
  2. 損失函式:根據業務需求,設計合適的損失函式。

PhotoStock Inc.案例

類別似地,根據PhotoStock Inc.的業務需求,選擇合適的評估指標和損失函式。

實際案例與經驗教訓

在設計評估指標時,需要考慮其合理性和平衡性。例如,在一個電腦視覺專案中,由於自定義的評估指標過於偏向召回率,導致模型表現不佳。後來,透過引入隨機噪聲進行測試,發現了指標設計的不合理之處,並進行了調整。

設計檔案:新增損失函式與評估指標

在零售銷售預測領域,一篇由 Stephen Kolassa 發表的論文「Evaluating Predictive Count Data Distributions in Retail Sales Forecasting」(https://mng.bz/eVl9)引起了我們的注意。讓我們回顧一下專案目標,即盡可能縮小交付與銷售之間的差距,同時避免斷貨情況,並達到特定的服務水準協定(SLA)。為此,我們計畫利用機器學習系統預測特定商品在特定商店於特定期間的需求量。

該論文的摘要看起來幾乎完美契合我們的目標:

計算能力的顯著提升和新型資料函式庫架構使得資料能夠以越來越精細的粒度儲存和處理,產生越來越低的計數資料時間序列。這些序列不再能使用適用於連續機率分佈的近似方法處理。此外,僅計算點預測是不夠的:我們需要預測整個(離散)預測分佈,特別是在供應鏈預測和庫存控制中,但也適用於其他規劃流程。

計數資料是一種整數值時間序列,這對於我們面臨的供應鏈預測至關重要,因為大多數產品是以單位銷售的。考慮到這一點,我們可以簡要回顧這篇論文(在下面的字母列表中),並選擇最適合我們最終目標的評估指標。

評估指標分析

A. 根據絕對誤差的指標

平均絕對誤差(MAE)最佳化中位數;加權平均絕對百分比誤差(wMAPE)是 MAE 除以樣本外實作的平均值;平均絕對比例誤差則是透過將 MAE 除以隨機遊走預測的樣本內 MAE 獲得。

在對稱預測分佈中,最佳化中位數與最佳化平均值並無太大區別。然而,適用於低容量計數資料的預測分佈通常遠非對稱,在這種情況下,這種區別會產生影響,並導致有偏見的預測。

B. 百分比誤差

平均絕對百分比誤差(MAPE)在任何未來實作值為零時未定義,因此對於計數資料來說極為不適合。

對稱 MAPE 是 MAPE 的一種「對稱化」版本,如果點預測和實際值在所有未來時間點都不全為零,則定義。然而,在任何實際值為零的時期,其貢獻為 2,與點預測無關,使其不適合計數資料。

C. 根據平方誤差的指標

最小化平方誤差自然會導致無偏點預測。然而,均方誤差(MSE)不適合間歇性需求專案,因為它對非常高的預測誤差很敏感。同樣的論點也適用於非間歇性計數資料。

進一步評估指標探討

D. 相對誤差

突出的變體包括中位數相對絕對誤差和幾何平均相對絕對誤差。

在預測計數資料的特定背景下,這些指標存在兩個主要弱點:

  1. 相對誤差通常比較絕對誤差。因此,它們受到與根據 MAE 的誤差相同的批評,如前所述。
  2. 在逐期基礎上,像樸素隨機遊走這樣的簡單基準可能會無誤差地進行預測,因此,由於除以零,這一期的相對誤差將是未定義的。

E. 根據比率的誤差

Kourentzes(2014)最近提出了兩種新的間歇性需求誤差衡量標準:MSR 和 MAR,旨在評估間歇性需求點預測是否正確捕捉了隨時間增長的平均需求。

這是一個有趣的建議,但這些衡量標準的一個特性是,它們隱含地將短期未來的重要性置於中長期未來之上。可以認為這正是我們在進行預測時想要做的,但即便如此,也可以認為這種權重應該是明確的——透過在平均未來時間段時使用適當的權重方案。

內容解密:

上述段落詳細分析了不同的評估指標及其適用性。具體來說:

  • 根據絕對誤差、百分比誤差和平方誤差的指標在某些情況下可能不適合計數資料。
  • 相對誤差和根據比率的誤差也有其侷限性,例如可能出現未定義的情況或隱含地對短期未來賦予較高權重。
  • 這些分析表明,在選擇評估指標時,需要根據具體問題和資料特性進行仔細考慮。

F. 縮放誤差

Petropoulos 和 Kourentzes(2015)提出了一個 MSE 的縮放版本,即 sMSE,它是透過將平方誤差按預測範圍內的實際值的平方平均值進行縮放後得到的平均值。sMSE 除非所有實際值均為零,否則定義明確,並且由於縮放,可以在不同的時間序列之間進行比較。此外,由於縮放,它對高預測誤差的敏感度不如 MSE。具體來說,它對劇烈低估更為穩健,儘管仍然對大幅高估敏感。

G. 功能性與損失函式

評估預測的另一種方法是關注點預測,它是預測分佈的功能。可以認為,零售商旨在達到某個服務水準(例如 95%),因此他們只關心相應的分位數。這可以透過適當的損失函式或評分規則來引出。這種方法與將預測視為庫存控制系統的一部分密切相關。從這個角度來看,分位數預測被用作標準庫存控制策略的輸入,而預測的品質則透過評估總庫存狀況隨時間變化的價值,並將其與斷貨情況進行權衡來評估。

內容解密:

sMSE 是一種改進的 MSE 評估指標,透過縮放處理使得它在不同時間序列之間具有可比性,並且對高預測誤差的敏感度降低。這使得 sMSE 成為評估計數資料預測的一個有價值的工具。