Univariate uitschieters detecteren

Fraudedetectie in R

Tim Verdonck

Professor Data Science at KU Leuven

Uitschieters

Een uitschieter is een observatie die afwijkt van het patroon van de meeste data. uitbijtervis Een uitschieter kan op fraude wijzen.

Fraudedetectie in R

Uitschieters detecteren

  • Een populaire methode voor uitschieters is:

    • bereken de z-score per observatie
    • markeer als uitschieter bij absolute waarde > 3
  • De z-score $z_i$ voor observatie $x_i$ is:

$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$

  • $\overline{x}$ is het steekproefgemiddelde: $\overline{x}=\frac{1}{n}\sum_i x_i$
  • $s$ is de steekproefstandaarddeviatie: $s= \sqrt{\frac{1}{n-1}\sum_i(x_i-\hat{\mu})^2}$
Fraudedetectie in R

Dataset loginc bevat maandinkomens van 10 personen na log-transformatie:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- laatste inkomen is duidelijk een uitschieter!
  • (1) Bereken de z-score per observatie
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
  • (2) Check of z-scores groter zijn dan 3 in absolute waarde
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • Met deze z-scores worden geen uitschieters gevonden!
Fraudedetectie in R

Robuuste statistiek

  • Klassieke methoden steunen op (normaliteits)aanames; één uitschieter kan conclusies sterk beïnvloeden en misleiden.
  • Robuuste statistiek geeft betrouwbare resultaten bij data met uitschieters en biedt automatische detectietools.
  • "Het is ideaal om routinematig zowel klassiek als robuust te gebruiken, en je pas zorgen te maken als ze merkbaar verschillen... Maar als ze verschillen, denk dan goed na." J.W. Tukey (1979)
Fraudedetectie in R

Ligging: gemiddelde & mediaan

Steekproefgemiddelde: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9 bevat dezelfde observaties als loginc, behalve de uitschieter.

Sorteer $n$ observaties oplopend; de steekproefmediaan, $Med(X_n)$, is de $(n+1)/2$-de observatie (bij oneven $n$) of het gemiddelde van de $n/2$-de en $n/2+1$-de (bij even $n$).

median(loginc)
7.816658
median(loginc9)
7.764296
Fraudedetectie in R

Schaatschatters: sd

(1) Steekproefstandaarddeviatie: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$

sd(loginc)
0.6976615
sd(loginc9)
0.1791729
Fraudedetectie in R

Schaatschatters: mad, IQR

(2) Mediaan absolute afwijking: $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$

(3) Interkwartielafstand (genormaliseerd): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ waar $Q_1$ en $Q_3$ het eerste en derde kwartiel zijn

IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Fraudedetectie in R

Robuuste z-scores voor uitschieters

Vul robuuste schatters in om robuuste z-scores te berekenen:

$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} =\frac{x_i-Med(X_n)}{Mad(X_n)}$$

robzscore <- (loginc - median(loginc)) / mad(loginc)

abs(robzscore) > 3 ## Check op uitschieters
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## Robuuste z-score van de uitschieter
8.748523
Fraudedetectie in R

Boxplot

  • Tukey’s boxplot is ook populair om uitschieters te vinden
  • Een observatie is een uitschieter als die buiten de boxplotgrens ligt $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

uitleg boxplot

Fraudedetectie in R

Voorbeeld: ligduur (LOS) in ziekenhuis

boxplot(los, col = "blue", ylab = "Lenght of Stay (LOS)")$out
59  33  42  67  35  47 102  36  27  31  27  30  29  32  37  27  38

boxplotlos_ggplot

Fraudedetectie in R

Aangepaste boxplot

  • Bij asymmetrische verdelingen kan een boxplot veel normale punten als uitschieter markeren.
  • De skewness-aangepaste boxplot corrigeert dit met een robuuste scheefheidsmaat voor de grenzen (Hubert en Vandervieren, 2008)

chisqbp

Fraudedetectie in R

Voorbeeld LOS: aangepaste boxplot

Uitschieters volgens de aangepaste boxplot:

library(robustbase)
adjbox(los)$out
59  67 102

Statistieken berekend door de aangepaste boxplot:

adjboxStats(los)$stats
2  4  8 13 47
Fraudedetectie in R

Voorbeeld LOS: boxplot vs aangepaste boxplot

LOS_boxplot

LOS_adjbox

Fraudedetectie in R

Laten we oefenen!

Fraudedetectie in R

Preparing Video For Download...