類別不平衡 是什麼?
Class Imbalance:類別不平衡 的完整解釋
訓練資料中各類別樣本數量差異懸殊,導致模型偏向多數類的問題。
類別不平衡(Class Imbalance)是機器學習實務中極為常見但常被忽視的問題,尤其在醫療、金融、資安等高風險領域,處理類別不平衡往往比選擇模型架構更為關鍵。
問題的本質
假設一個詐騙偵測系統,訓練資料中 99% 是正常交易、1% 是詐騙交易。若模型學會「全部預測為正常」,整體準確率(Accuracy)高達 99%,但詐騙召回率(Recall)為 0%:完全失去偵測詐騙的能力。這個例子說明:在不平衡資料上,準確率是一個具誤導性的指標,不應作為主要評估標準。
類別不平衡的程度通常以不平衡比例(Imbalance Ratio)衡量,即多數類樣本數 / 少數類樣本數。比例超過 10:1 時可稱為輕度不平衡,超過 100:1 為嚴重不平衡,某些場景(如罕見疾病診斷)可能達到 10000:1 以上的極端不平衡。
處理類別不平衡的主要方法
一、資料層面的方法
過採樣(Oversampling):增加少數類的樣本數量。
- 隨機過採樣:重複複製少數類樣本(可能導致過擬合)。
- SMOTE(Synthetic Minority Oversampling Technique):在少數類樣本的 K 近鄰空間中插值生成合成樣本,是目前最廣泛使用的過採樣方法之一。
- ADASYN(Adaptive Synthetic Sampling):根據每個少數類樣本周圍多數類樣本的密度自適應地生成合成樣本,對分類困難區域更多關注。
欠採樣(Undersampling):減少多數類的樣本數量。
- 隨機欠採樣:隨機移除多數類樣本(可能丟失重要資訊)。
- Tomek Links:移除來自不同類別但互為最近鄰的樣本對中的多數類樣本,清理決策邊界附近的模糊樣本。
- Cluster Centroids:對多數類進行聚類,用聚類中心代替原始樣本。
混合方法:結合過採樣與欠採樣,如 SMOTEENN(SMOTE + Edited Nearest Neighbours)。
二、演算法層面的方法
代價敏感學習(Cost-sensitive Learning):為少數類的錯誤分類設定更高的懲罰代價,使模型在訓練時更重視少數類。許多 scikit-learn 模型(如 SVM、邏輯回歸、隨機森林)都有
class_weight參數,設為'balanced'可自動計算反比例權重。集成方法:BalancedBaggingClassifier、EasyEnsemble 等專為不平衡資料設計的集成學習方法。
閾值調整(Threshold Tuning):預設分類閾值通常為 0.5,但在不平衡問題中,降低閾值(如 0.3)可以提高少數類的召回率,代價是降低精確率。最佳閾值需根據 PR 曲線或 ROC 曲線結合業務需求決定。
三、評估指標的選擇
處理不平衡資料時,必須放棄準確率(Accuracy)作為主要指標,改用:
- 精確率(Precision)、召回率(Recall)、F1 Score:可針對少數類計算。
- AUROC(ROC 曲線下面積):衡量不同閾值下的整體性能,但在極度不平衡時可能過於樂觀。
- AUPRC(PR 曲線下面積):在嚴重不平衡時比 AUROC 更具區分力。
- G-Mean(幾何平均):各類別召回率的幾何平均,對所有類別的分類能力給予同等重視。
常見踩坑
- 在應用 SMOTE 等過採樣方法時,MUST 只對訓練集進行,驗證集與測試集不能包含合成樣本,否則評估結果會失真。
- 不平衡問題沒有萬用解法,需根據不平衡比例、少數類的重要性(漏判代價)和業務需求選擇合適策略。
- 某些情況下,蒐集更多少數類真實資料是比任何技術手段都更有效的解決方案。