Detekce podvodů v R
Tim Verdonck
Professor Data Science at KU Leuven
Odlehlá hodnota je pozorování, které se odchyluje od vzoru většiny dat.
Odlehlá hodnota může signalizovat podvod.
Oblíbeným nástrojem pro detekci odlehlých hodnot je
Z-skóre $z_i$ pro pozorování $x_i$ se vypočítá jako:
$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$
Datová sada loginc obsahuje měsíční příjmy 10 osob po logaritmické transformaci:
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
Výběrový průměr: $$\overline{x}=\frac{1}{n}\sum_i x_i$$
mean(loginc)mean(loginc9)
7.9864477.772392
loginc9 obsahuje stejná pozorování jako loginc kromě odlehlé hodnoty.
Seřadíme $n$ pozorování od nejmenšího k největšímu; výběrový medián, $Med(X_n)$, je $(n+1)/2$-té pozorování (je-li $n$ liché) nebo průměr $n/2$-tého a $(n/2+1)$-tého pozorování (je-li $n$ sudé).
median(loginc)
7.816658
median(loginc9)
7.764296
(1) Výběrová směrodatná odchylka: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$
sd(loginc)
0.6976615
sd(loginc9)
0.1791729
(2) Medián absolutních odchylek: $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$
(3) Mezikvartilové rozpětí (normalizované): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ kde $Q_1$ a $Q_3$ jsou první a třetí kvartil dat
IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Dosadíme robustní odhady pro výpočet robustních z-skóre:
$$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


Odlehlé hodnoty dle adjustovaného krabicového grafu:
library(robustbase)
adjbox(los)$out
59 67 102
Statistiky vypočtené adjustovaným krabicovým grafem:
adjboxStats(los)$stats
2 4 8 13 47


Detekce podvodů v R