處理類別不平衡資料集

R 的詐欺偵測

Bart Baesens

Professor Data Science at KU Leuven

類別不平衡資料集

  • 關鍵挑戰:將事件標記為詐欺或非詐欺
    • 分類方法與異常偵測技術的主要難題
  • 分類器傾向偏好多數類(= 非詐欺)
    • 對詐欺案例的分類錯誤很大
  • 分類器從「平衡」分佈中學得更好

乾草堆與針

R 的詐欺偵測

類別不平衡資料集

  • 關鍵挑戰:將事件標記為詐欺或非詐欺
    • 分類方法與異常偵測技術的主要難題
  • 分類器傾向偏好多數類(= 非詐欺)
    • 對詐欺案例的分類錯誤很大
  • 分類器從「平衡」分佈中學得更好
  • 可行解法:用抽樣方法「改變類別分佈」

乾草堆與針

R 的詐欺偵測

原始不平衡

原始類別長條圖

R 的詐欺偵測

對少數類過度抽樣…

過度抽樣長條圖

R 的詐欺偵測

…或對多數類欠度抽樣…

欠度抽樣長條圖

R 的詐欺偵測

…或兩者並用!

同時抽樣長條圖

R 的詐欺偵測

抽樣後的結果…

抽樣後結果長條圖2

R 的詐欺偵測

…或像這樣

抽樣後結果長條圖1

R 的詐欺偵測

隨機過度抽樣(ROS)

原始資料 v0

R 的詐欺偵測

原始資料訓練測試

R 的詐欺偵測

隨機過度抽樣 v0

R 的詐欺偵測

隨機過度抽樣 v1

R 的詐欺偵測

隨機過度抽樣:實作

  • Kaggle 的 Credit Card Fraud Detection 資料集
    • 約 $\sim$ 300K 筆匿名信用卡轉帳,標記為詐欺或正常
  • 關於資料…
    • 數值(匿名)變數:V1、V2、…、V28
    • Time = 從資料集首筆轉帳起計的秒數
    • Amount = 交易金額
    • Class = 反應變數:詐欺為 1,否則為 0
R 的詐欺偵測

資料集子集檢視

R 的詐欺偵測

檢查不平衡情況

head(creditcard)
  Time         V1         V2  ...            V27         V28 Amount Class
1    0  1.1918571  0.2661507  ...  -0.0089830991  0.01472417   2.69     0
2   10  0.3849782  0.6161095  ...   0.0424724419 -0.05433739   9.99     0
3   12 -0.7524170  0.3454854  ...  -0.1809975001  0.12939406  15.99     0
4   17  0.9624961  0.3284610  ...   0.0163706433 -0.01460533  34.09     0
5   34  0.2016859  0.4974832  ...   0.1427572469  0.21923761   9.99     0
prop.table(table(creditcard$Class))
   0    1 
0.98 0.02
R 的詐欺偵測

ROSE 套件的 ovun.sample

n_legit <- 24108
new_frac_legit <- 0.50
new_n_total <- n_legit / new_frac_legit ## = 24108 / 0.50 = 48216

library(ROSE) oversampling_result <- ovun.sample(formula = Class ~ ., data = creditcard, method = "over", N = new_n_total, seed = 2018)
oversampled_credit <- oversampling_result$data prop.table(table(oversampled_credit$Class))
  0   1 
0.5 0.5
R 的詐欺偵測

過度抽樣後 V2 對 V1

R 的詐欺偵測

一起來練習吧!

R 的詐欺偵測

Preparing Video For Download...