類別不平衡 是什麼?

Class Imbalance:類別不平衡 的完整解釋

訓練資料中各類別樣本數量差異懸殊,導致模型偏向多數類的問題。

類別不平衡(Class Imbalance)是機器學習實務中極為常見但常被忽視的問題,尤其在醫療、金融、資安等高風險領域,處理類別不平衡往往比選擇模型架構更為關鍵。

問題的本質

假設一個詐騙偵測系統,訓練資料中 99% 是正常交易、1% 是詐騙交易。若模型學會「全部預測為正常」,整體準確率(Accuracy)高達 99%,但詐騙召回率(Recall)為 0%:完全失去偵測詐騙的能力。這個例子說明:在不平衡資料上,準確率是一個具誤導性的指標,不應作為主要評估標準。

類別不平衡的程度通常以不平衡比例(Imbalance Ratio)衡量,即多數類樣本數 / 少數類樣本數。比例超過 10:1 時可稱為輕度不平衡,超過 100:1 為嚴重不平衡,某些場景(如罕見疾病診斷)可能達到 10000:1 以上的極端不平衡。

處理類別不平衡的主要方法

一、資料層面的方法

  1. 過採樣(Oversampling):增加少數類的樣本數量。

    • 隨機過採樣:重複複製少數類樣本(可能導致過擬合)。
    • SMOTE(Synthetic Minority Oversampling Technique):在少數類樣本的 K 近鄰空間中插值生成合成樣本,是目前最廣泛使用的過採樣方法之一。
    • ADASYN(Adaptive Synthetic Sampling):根據每個少數類樣本周圍多數類樣本的密度自適應地生成合成樣本,對分類困難區域更多關注。
  2. 欠採樣(Undersampling):減少多數類的樣本數量。

    • 隨機欠採樣:隨機移除多數類樣本(可能丟失重要資訊)。
    • Tomek Links:移除來自不同類別但互為最近鄰的樣本對中的多數類樣本,清理決策邊界附近的模糊樣本。
    • Cluster Centroids:對多數類進行聚類,用聚類中心代替原始樣本。
  3. 混合方法:結合過採樣與欠採樣,如 SMOTEENN(SMOTE + Edited Nearest Neighbours)。

二、演算法層面的方法

  1. 代價敏感學習(Cost-sensitive Learning):為少數類的錯誤分類設定更高的懲罰代價,使模型在訓練時更重視少數類。許多 scikit-learn 模型(如 SVM、邏輯回歸、隨機森林)都有 class_weight 參數,設為 'balanced' 可自動計算反比例權重。

  2. 集成方法:BalancedBaggingClassifier、EasyEnsemble 等專為不平衡資料設計的集成學習方法。

  3. 閾值調整(Threshold Tuning):預設分類閾值通常為 0.5,但在不平衡問題中,降低閾值(如 0.3)可以提高少數類的召回率,代價是降低精確率。最佳閾值需根據 PR 曲線或 ROC 曲線結合業務需求決定。

三、評估指標的選擇

處理不平衡資料時,必須放棄準確率(Accuracy)作為主要指標,改用:

  • 精確率(Precision)、召回率(Recall)、F1 Score:可針對少數類計算。
  • AUROC(ROC 曲線下面積):衡量不同閾值下的整體性能,但在極度不平衡時可能過於樂觀。
  • AUPRC(PR 曲線下面積):在嚴重不平衡時比 AUROC 更具區分力。
  • G-Mean(幾何平均):各類別召回率的幾何平均,對所有類別的分類能力給予同等重視。

常見踩坑

  • 在應用 SMOTE 等過採樣方法時,MUST 只對訓練集進行,驗證集與測試集不能包含合成樣本,否則評估結果會失真。
  • 不平衡問題沒有萬用解法,需根據不平衡比例、少數類的重要性(漏判代價)和業務需求選擇合適策略。
  • 某些情況下,蒐集更多少數類真實資料是比任何技術手段都更有效的解決方案。

常見問題