Fraudedetectie in R
Tim Verdonck
Professor Data Science at KU Leuven
Een uitschieter is een observatie die afwijkt van het patroon van de meeste data.
Een uitschieter kan op fraude wijzen.
Een populaire methode voor uitschieters is:
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}$$
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!
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Steekproefgemiddelde: $$\overline{x}=\frac{1}{n}\sum_i x_i$$
mean(loginc)mean(loginc9)
7.9864477.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
(1) Steekproefstandaarddeviatie: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$
sd(loginc)
0.6976615
sd(loginc9)
0.1791729
(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
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

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


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