Hantera obalanserade datamängder

Bedrägeridetektering i R

Bart Baesens

Professor Data Science at KU Leuven

Obalanserade datamängder

  • Huvudutmaning: märka händelser som bedrägeri eller inte
    • Stor utmaning för klassificeringsmetoder och avvikelsedetektion
  • Klassificeraren gynnar majoritetsklassen (= inget bedrägeri)
    • stort klassificeringsfel för bedrägerifall
  • Klassificerare lär sig bättre från en balanserad fördelning

haystack_and_needle_v2

Bedrägeridetektering i R

Obalanserade datamängder

  • Huvudutmaning : märka händelser som bedrägeri eller inte
    • Stor utmaning för klassificeringsmetoder och avvikelsedetektion
  • Klassificeraren gynnar majoritetsklassen (= inget bedrägeri)
    • stort klassificeringsfel för bedrägerifall
  • Klassificerare lär sig bättre från en balanserad fördelning
  • Möjlig lösning : ändra klassfördelningen med samplingmetoder

haystack_and_needle_v1

Bedrägeridetektering i R

Ursprunglig obalans

class_barplot_orig.png

Bedrägeridetektering i R

Översampling av minoritetsklassen...

class_barplot_over

Bedrägeridetektering i R

... eller undersampling av majoritetsklassen ...

class_barplot_under

Bedrägeridetektering i R

... eller båda!

class_barplot_both

Bedrägeridetektering i R

Resultat efter sampling...

class_barplot_result2

Bedrägeridetektering i R

... eller så här

class_barplot_result1

Bedrägeridetektering i R

Slumpmässig översampling (ROS)

orig_data_v0

Bedrägeridetektering i R

orig_data_train_test

Bedrägeridetektering i R

random_oversampling_v0

Bedrägeridetektering i R

random_oversampling_v1

Bedrägeridetektering i R

Slumpmässig översampling i praktiken

  • Datamängden Credit Card Fraud Detection på Kaggle
    • $\sim$ 300K anonymiserade kreditkortstransaktioner märkta som bedrägliga eller äkta
  • Om data...
    • Numeriska (anonymiserade) variabler: V1, V2, ... , V28
    • Time = sekunder som förflutit mellan varje transaktion och den första i datamängden
    • Amount = transaktionsbelopp
    • Class = svarsvariabel: värdet 1 vid bedrägeri och 0 annars
Bedrägeridetektering i R

creditcard_V2vsV1

Bedrägeridetektering i R

Kontrollera obalansen

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
Bedrägeridetektering i R

ovun.sample från paketet 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
Bedrägeridetektering i R

creditcard_V2vsV1_oversampled

Bedrägeridetektering i R

Nu kör vi en övning!

Bedrägeridetektering i R

Preparing Video For Download...