Radzenie sobie z niezrównoważonymi zbiorami danych

Wykrywanie oszustw w R

Bart Baesens

Professor Data Science at KU Leuven

Niezrównoważone zbiory danych

  • Główne wyzwanie: oznaczanie zdarzeń jako oszustwo lub nie
    • Duże wyzwanie dla metod klasyfikacji i wykrywania anomalii
  • Klasyfikator faworyzuje klasę większościową (= brak oszustwa)
    • duży błąd klasyfikacji dla przypadków oszustwa
  • Klasyfikatory lepiej uczą się na zrównoważonym rozkładzie

stóg_siana_i_igła_v2

Wykrywanie oszustw w R

Niezrównoważone zbiory danych

  • Główne wyzwanie: oznaczanie zdarzeń jako oszustwo lub nie
    • Duże wyzwanie dla metod klasyfikacji i wykrywania anomalii
  • Klasyfikator faworyzuje klasę większościową (= brak oszustwa)
    • duży błąd klasyfikacji dla przypadków oszustwa
  • Klasyfikatory lepiej uczą się na zrównoważonym rozkładzie
  • Możliwe rozwiązanie: zmiana rozkładu klas metodami próbkowania

stóg_siana_i_igła_v1

Wykrywanie oszustw w R

Oryginalna nierównowaga

wykres_słupkowy_klas_oryginalny

Wykrywanie oszustw w R

Nadpróbkowanie klasy mniejszościowej...

wykres_słupkowy_klas_nadpróbkowanie

Wykrywanie oszustw w R

... lub zmniejszenie próby klasy większościowej ...

wykres_słupkowy_klas_pod

Wykrywanie oszustw w R

... lub obie metody!

wykres_słupkowy_klas_oba

Wykrywanie oszustw w R

Wynik po próbkowaniu...

wykres_słupkowy_klas_wynik2

Wykrywanie oszustw w R

... lub tak

wykres_słupkowy_klas_wynik1

Wykrywanie oszustw w R

Losowe nadpróbkowanie (ROS)

dane_oryginalne_v0

Wykrywanie oszustw w R

dane_oryginalne_trening_test

Wykrywanie oszustw w R

losowe_nadpróbkowanie_v0

Wykrywanie oszustw w R

losowe_nadpróbkowanie_v1

Wykrywanie oszustw w R

Losowe nadpróbkowanie w praktyce

  • Zbiór danych Credit Card Fraud Detection na Kaggle
    • $\sim$ 300 tys. zanonimizowanych transakcji kartą kredytową oznaczonych jako oszustwo lub autentyczne
  • O danych...
    • Zmienne numeryczne (zanonimizowane): V1, V2, ..., V28
    • Time = sekundy od pierwszej transakcji w zbiorze danych
    • Amount = kwota transakcji
    • Class = zmienna odpowiedzi: 1 – oszustwo, 0 – brak oszustwa
Wykrywanie oszustw w R

karta_kredytowa_V2vsV1

Wykrywanie oszustw w R

Sprawdzenie nierównowagi

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
Wykrywanie oszustw w R

ovun.sample z pakietu 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
Wykrywanie oszustw w R

karta_kredytowa_V2vsV1_nadpróbkowanie

Wykrywanie oszustw w R

Czas na ćwiczenia!

Wykrywanie oszustw w R

Preparing Video For Download...