Omgaan met ongebalanceerde datasets

Fraudedetectie in R

Bart Baesens

Professor Data Science at KU Leuven

Ongebalanceerde datasets

  • Belangrijke uitdaging: label transacties als fraude of niet
    • Grote uitdaging voor classificatie en anomaliedetectie
  • Classificator bevoordeelt vaak de meerderheid (= geen fraude)
    • grote fout op fraudecases
  • Classificators leren beter met een gebalanceerde verdeling

hooiberg en naald v2

Fraudedetectie in R

Ongebalanceerde datasets

  • Belangrijke uitdaging: label transacties als fraude of niet
    • Grote uitdaging voor classificatie en anomaliedetectie
  • Classificator bevoordeelt vaak de meerderheid (= geen fraude)
    • grote fout op fraudecases
  • Classificators leren beter met een gebalanceerde verdeling
  • Mogelijke oplossing: verander de klassenverdeling met sampling

hooiberg en naald v1

Fraudedetectie in R

Oorspronkelijke onbalans

balkdiagram klasse origineel

Fraudedetectie in R

Over-samplen van de minderheidsklasse...

balkdiagram klasse oversampling

Fraudedetectie in R

... of majorityklasse onder-samplen ...

balkdiagram klasse undersampling

Fraudedetectie in R

... of beide!

balkdiagram klasse beide

Fraudedetectie in R

Resultaat na sampling...

balkdiagram klasse resultaat 2

Fraudedetectie in R

... of zo

balkdiagram klasse resultaat 1

Fraudedetectie in R

Random over-sampling (ROS)

orig data v0

Fraudedetectie in R

orig data train test

Fraudedetectie in R

random oversampling v0

Fraudedetectie in R

random oversampling v1

Fraudedetectie in R

Random over-sampling in de praktijk

  • Credit Card Fraud Detection-dataset op Kaggle
    • ~300K geanonimiseerde creditcardtransacties, gelabeld als frauduleus of legitiem
  • Over de data...
    • Numerieke (geanonimiseerde) variabelen: V1, V2, ... , V28
    • Time = seconden sinds de eerste transactie in de dataset
    • Amount = transactiebedrag
    • Class = responsvariabele: 1 bij fraude, 0 anders
Fraudedetectie in R

creditcard V2 vs V1

Fraudedetectie in R

Controleer de onbalans

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
Fraudedetectie in R

ovun.sample uit het ROSE-pakket

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
Fraudedetectie in R

creditcard V2 vs V1 oversampled

Fraudedetectie in R

Laten we oefenen!

Fraudedetectie in R

Preparing Video For Download...