Détection de fraude en R
Tim Verdonck
Professor Data Science at KU Leuven
Une valeur aberrante est une observation qui s'écarte du schéma de la majorité des données.
Une valeur aberrante peut signaler une fraude.
Un outil courant pour détecter les valeurs aberrantes consiste à
Le z-score $z_i$ pour l'observation $x_i$ se calcule ainsi :
$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$
Le jeu loginc contient les revenus mensuels de 10 personnes après transformation logarithmique :
loginc: 7.876 7.681 7.628 ... 7.764 9.912 # <-- le dernier revenu est clairement aberrant !
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Moyenne empirique : $$\overline{x}=\frac{1}{n}\sum_i x_i$$
mean(loginc)mean(loginc9)
7.9864477.772392
loginc9 contient les mêmes observations que loginc, sauf la valeur aberrante.
Ordonnez les $n$ observations de la plus petite à la plus grande, puis la médiane empirique, $Med(X_n)$, est la $(n+1)$/2e observation (si $n$ est impair) ou la moyenne des observations $n/2$ et $n/2+1$ (si $n$ est pair).
median(loginc)
7.816658
median(loginc9)
7.764296
(1) Écart type empirique : $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$
sd(loginc)
0.6976615
sd(loginc9)
0.1791729
(2) Écart absolu médian : $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$
(3) Étendue interquartile (normalisée) : $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ où $Q_1$ et $Q_3$ sont les premier et troisième quartiles des données
IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
Insérez les estimateurs robustes pour calculer des z-scores robustes :
$$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 ## Vérifier les valeurs aberrantes
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## Z-score robuste de la valeur aberrante
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


Valeurs aberrantes selon le boxplot ajusté :
library(robustbase)
adjbox(los)$out
59 67 102
Statistiques calculées par le boxplot ajusté :
adjboxStats(los)$stats
2 4 8 13 47


Détection de fraude en R