Bedrägeridetektering i R
Tim Verdonck
Professor Data Science at KU Leuven
En avvikare är en observation som skiljer sig markant från majoriteten av data.
En avvikare kan vara en varningssignal för bedrägeri.
Ett populärt verktyg för avvikardetektering är
Z-poängen $z_i$ för observation $x_i$ beräknas som:
$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$
Datamängden loginc innehåller månadsinkomster för 10 personer efter logaritmtransformation:
loginc: 7.876 7.681 7.628 ... 7.764 9.912 # <-- last income is clearly an outlier!
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Stickprovsmedelvärde: $$\overline{x}=\frac{1}{n}\sum_i x_i$$
mean(loginc)mean(loginc9)
7.9864477.772392
loginc9 innehåller samma observationer som loginc men utan avvikaren.
Ordna $n$ observationer från minst till störst. Stickprovsmedian, $Med(X_n)$, är den $(n+1)/2$:te observationen (om $n$ är udda) eller medelvärdet av den $n/2$:te och $n/2+1$:te observationen (om $n$ är jämnt).
median(loginc)
7.816658
median(loginc9)
7.764296
(1) Stickprovsstandardavvikelse: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$
sd(loginc)
0.6976615
sd(loginc9)
0.1791729
(2) Medianabsolutavvikelse: $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$
(3) Interkvartilsavstånd (normerat): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ där $Q_1$ och $Q_3$ är datamängdens första och tredje kvartil
IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Använd de robusta estimatorerna för att beräkna robusta z-poäng:
$$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 for outliers
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## Robust z-score of the outlier
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


Avvikare enligt anpassat lådagram:
library(robustbase)
adjbox(los)$out
59 67 102
Statistik beräknad av anpassat lådagram:
adjboxStats(los)$stats
2 4 8 13 47


Bedrägeridetektering i R