Menangani dataset tidak seimbang

Deteksi Fraud di R

Bart Baesens

Professor Data Science at KU Leuven

Dataset tidak seimbang

  • Tantangan utama: memberi label kejadian sebagai penipuan atau bukan
    • Tantangan besar bagi metode klasifikasi & teknik deteksi anomali
  • Klasifier cenderung berpihak pada kelas mayoritas (= bukan penipuan)
    • galat klasifikasi besar pada kasus penipuan
  • Klasifier belajar lebih baik dari distribusi yang seimbang

tumpukan jerami dan jarum v2

Deteksi Fraud di R

Dataset tidak seimbang

  • Tantangan utama: memberi label kejadian sebagai penipuan atau bukan
    • Tantangan besar bagi metode klasifikasi & teknik deteksi anomali
  • Klasifier cenderung berpihak pada kelas mayoritas (= bukan penipuan)
    • galat klasifikasi besar pada kasus penipuan
  • Klasifier belajar lebih baik dari distribusi yang seimbang
  • Solusi mungkin: ubah distribusi kelas dengan metode sampling

tumpukan jerami dan jarum v1

Deteksi Fraud di R

Ketidakseimbangan awal

diagram batang ketidakseimbangan awal

Deteksi Fraud di R

Over-sampling kelas minoritas...

diagram batang over-sampling

Deteksi Fraud di R

... atau under-sampling kelas mayoritas ...

diagram batang kelas undersampling

Deteksi Fraud di R

... atau keduanya!

diagram batang kelas keduanya

Deteksi Fraud di R

Hasil setelah sampling...

hasil pengambilan sampel 2

Deteksi Fraud di R

... atau seperti ini

hasil pengambilan sampel 1

Deteksi Fraud di R

Random over-sampling (ROS)

data asli v0

Deteksi Fraud di R

data asli latih-uji

Deteksi Fraud di R

random over-sampling v0

Deteksi Fraud di R

random over-sampling v1

Deteksi Fraud di R

Random over-sampling dalam praktik

  • Dataset Deteksi Penipuan Kartu Kredit di Kaggle
    • ~300K transfer kartu kredit dianonimkan, berlabel penipuan atau asli
  • Tentang datanya...
    • Variabel numerik (anonim): V1, V2, ... , V28
    • Time = detik sejak transaksi pertama di dataset
    • Amount = nilai transaksi
    • Class = variabel respons: 1 jika penipuan, 0 selain itu
Deteksi Fraud di R

sekilas subset dataset

Deteksi Fraud di R

Periksa ketidakseimbangan

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
Deteksi Fraud di R

ovun.sample dari paket ROSE

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
Deteksi Fraud di R

sekilas dataset over-sampled

Deteksi Fraud di R

Ayo berlatih!

Deteksi Fraud di R

Preparing Video For Download...