跳到主要內容

ML|機器學習當中的樣本不均衡問題

# 前言
「機器學習當中的樣本不均衡問題」,這是我進入資料科學業界之後的,就首先遇到的難題,但這個其實算是業界當中的老生常談。最經典的例子就是,如何從大量的信用卡用戶當中,辨識出潛在的可能逾期繳款的卡戶、或者辨識出可能是被盜用的異常信用交易活動,簡單來說,就是特定類別樣本數量、與其他主要類別的樣本數量,具有懸殊的比例差異的情況。的在真實世界當中,類似情境的問題比比皆是,而這篇文章要介紹的,就是面對這類型的問題時,需要注意的眉角,以及一些可用的解決方案。

# 選用合適的評估指標

面對不均衡的資料集,若處理的問題是分類型的問題,首先需要注意的就是模型的評估指標。Accuracy 雖然是一個最常見的評估指標,但是在樣本分佈比例懸殊的情況下,模型的 Accuracy 結果往往容易誤導人。這種情況下,多方參考「ROC 曲線」(Receiver Operating Characteristic Curve) 與「曲線下面積」(Area under Curve,AUC)、「PR 曲線」(Precision-Recall Curve)、F1-Score 等指標,會是比較合適的做法。

另一種也是從評估指標著手的方法,是根據「混淆矩陣」(Confusion Matrix)上的四種分類結果,賦予不同的效益或者成本係數,藉此建立一組成本函數,以該函數的最終結果作為評估模型的指標。這種做法也就是所謂的「成本導向的分類方法」(Cost-Based Classification,或稱 Cost-Sensitive Classification),相似的做法,也可以直接將模型當中所使用的懲罰函數,代換成類似成本函數,來達到相同的目的。事實上,在實務界當中,無論是哪一種類型的機器學習或者深度學習問題,通常都不會只看單一指標,往往會綜合參考諸多指標來評估模型成效。

# 調整樣本結構與抽樣方法

既然原始資料的樣本比例懸殊,那麼我們就從調整資料的樣本比例來著手。最簡單無腦的做法就是「過取樣」(Over-sampling)以及「欠取樣」(Under-sampling),直接從原始的資料集當中,複製小類別的樣本資料,使其倍增至和大類別的樣本資料有相近或一致的比例。或者隨機刪減大類別的樣本資料,使其數量和小類別的樣本資料趨近一致。

但想單然爾,這種陽春做法,效果通常不是很好,所以我們通常會使用一些改良版的方法。例如:在過取樣的方法當中,就不是直接複製倍增原本的小類別資料,而是透過某種演算法,來產生「合成資料」 (Synthetic data),最著名的作法就是 SMOTE (Synthetic Minority Oversampling Technique)。而欠取樣的作法當中,普遍的作法就是移除邊界上,和小類別樣本很靠近的其他大類別樣本。常見的作法包含 Tamek LinkEdited Nearest Neighbor 等等。

過取樣欠取樣的方法還有很多,也可以同時搭配兩者來使用。但無論是哪一種,改變原本的樣本分佈結構,當然有可能影響最終的模型成效,所以在實際應用上,建議還是要搭配交叉驗證等等方法,避免建立出來的模型 Over-fitting 或者 Under-fitting

  1. 不平衡資料的二元分類 2:利用抽樣改善模型品質 – David's Perspective
  2. SMOTE + ENN : 解決數據不平衡建模的採樣方法 - 數學、人工智慧與蟒蛇 - Medium


# 專門的演算法

既然樣本比例懸殊的問題普遍存在,那麼有專家跟強者提出針對這類情境到專門演算法,也是很合理的事情。於是,便有所謂了「少樣本學習」(Few Shot Learning)、「單樣本學習」(One Shot Learning),這一類的演算法大多是深度學習方法的變形,且在聲紋以及影像辨識領域有廣泛的應用。

  1. 當小樣本遇上機器學習 fewshot learning | 程式前沿
  2. 優拓 Paper Note ep.15: Few-Shot Learning (Part I) | by Chu Po-Hsien | YOCTOL.AI
  3. 優拓 Paper Note ep.17: Few-Shot Learning (Part II) | by Chu Po-Hsien | YOCTOL.AI
  4. 優拓 Paper Note ep.21: Few-Shot Learning (Part III) | by Chu Po-Hsien | YOCTOL.AI
  5. Rethinking-few-shot-learning-from-soft-label | Medium

除了基於深度學習的方法,有也從訓練資料的拆分以及抽樣方法來進行優化的專門演算法,在實際的應用上,孰優孰劣,就看使用者需求。

Diversity-Aware Weighted Majority Vote Classifierfor Imbalanced Data


# 重新定義問題

最後一種要介紹的常見方法,就是改變原本的問題目病,將原本的二元分類或者多元分類問題,改為「一元分類」(One-Class Learning)或者「異常值偵測」(Anomaly Detection、Novelty Detection、Outlier Detection)問題。常見的演算法包含:One-Class SVM、Isolation Forest 等等。針對原始資料筆數不多、以及資料維度不高的資料集,可以採行 One-Class SVM。而針對連續型、資料筆數龐大、或者維度甚高的資料集,則建議採用 Isolation Forest

  1. OneClass SVM:異常檢測任務 (Anomaly Detection) 的算法理解與實踐 | by Youngmi huang | Medium
  2. 異常檢測算法:Isolation Forest原理及其python代碼應用 - 台部落
  3. 不到50行程式讓 AI 幫你偵測異常資料. A Simple Way to Detect Abnormal Images | by Abby Yeh | Taiwan AI Academy | Medium


最後,就附上一篇經典的信用卡詐騙分析的應用案例,來一次看完本文所提到相關方法。以及過去所看過的相關統整型文獻。

  1. 信用卡詐騙分析-不平衡資料分析與處理kernel翻譯-完整版 - 機器學習歷程 - Medium
  2. Handling imbalanced datasets in machine learning - Towards Data Science
  3. Classification of imbalanced data: a review | ResearchGate


最後,算是題外話,本篇文章的發布日期 8 月 13 號,是國際左撇子日。作為人口相對少數的左撇子,正好就是本篇文章當中所提到的不平衡樣本當中的小類別樣本。