Gestire dataset sbilanciati

Rilevamento delle frodi in R

Bart Baesens

Professor Data Science at KU Leuven

Dataset sbilanciati

  • Sfida chiave: etichettare gli eventi come frode o no
    • Grande sfida per classificazione e rilevamento anomalie
  • I classificatori favoriscono la classe maggioritaria (= non frode)
    • alto errore di classificazione sui casi di frode
  • I classificatori apprendono meglio da una distribuzione bilanciata

pagliaio e ago v2

Rilevamento delle frodi in R

Dataset sbilanciati

  • Sfida chiave: etichettare gli eventi come frode o no
    • Grande sfida per classificazione e rilevamento anomalie
  • I classificatori favoriscono la classe maggioritaria (= non frode)
    • alto errore di classificazione sui casi di frode
  • I classificatori apprendono meglio da una distribuzione bilanciata
  • Possibile soluzione: cambiare la distribuzione delle classi con metodi di campionamento

pagliaio e ago v1

Rilevamento delle frodi in R

Sbilanciamento iniziale

barplot squilibrio originale

Rilevamento delle frodi in R

Over-sampling della classe minoritaria...

barplot oversampling minoranza

Rilevamento delle frodi in R

... o sotto-campionare la classe maggioritaria ...

barplot classi undersampling

Rilevamento delle frodi in R

... o entrambi!

barplot classi entrambi

Rilevamento delle frodi in R

Risultato dopo il campionamento...

risultato campionamento 2

Rilevamento delle frodi in R

... o così

risultato campionamento 1

Rilevamento delle frodi in R

Random over-sampling (ROS)

dati originali v0

Rilevamento delle frodi in R

train/test dati originali

Rilevamento delle frodi in R

random oversampling v0

Rilevamento delle frodi in R

random oversampling v1

Rilevamento delle frodi in R

Over-sampling casuale in pratica

  • Dataset Credit Card Fraud Detection su Kaggle
    • ~300K transazioni con carta anonimizzate, etichettate come fraudolente o genuine
  • Info sui dati...
    • Variabili numeriche (anonimizzate): V1, V2, ... , V28
    • Time = secondi trascorsi tra ogni transazione e la prima nel dataset
    • Amount = importo della transazione
    • Class = variabile risposta: 1 se frode, 0 altrimenti
Rilevamento delle frodi in R

creditcard V2 vs V1

Rilevamento delle frodi in R

Verifica lo sbilanciamento

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
Rilevamento delle frodi in R

ovun.sample del pacchetto 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
Rilevamento delle frodi in R

creditcard V2 vs V1 oversampled

Rilevamento delle frodi in R

Passiamo alla pratica !

Rilevamento delle frodi in R

Preparing Video For Download...