Détection de la fraude en R
Tim Verdonck
Professor Data Science at KU Leuven
Animals du paquet MASS contient les poids moyens du cerveau et du corps de 28 animaux library(MASS)
data("Animals")
body brain
Mountain beaver 1.35 8.1
Cow 465.00 423.0
Grey wolf 36.33 119.5
Goat 27.66 115.0
X <- data.frame(log_body = log(Animals$body), log_brain = log(Animals$brain))
Boîtes à moustaches des logarithmes du poids du corps et du poids du cerveau


La distance de Mahalanobis (ou généralisée) d'une observation est sa distance au centre, en tenant compte de la matrice de covariance

Distances de Mahalanobis classiques : moyenne empirique pour la position et matrice de covariance empirique pour la dispersion
Pour détecter des valeurs aberrantes multivariées, on compare la distance de Mahalanobis à une valeur seuil dérivée de la loi du khi carré
En deux dimensions, on peut tracer l'ellipsoïde de tolérance à $97,5\%$, défini par les observations dont la distance de Mahalanobis ne dépasse pas le seuil
animals.clcenter <- colMeans(X) animals.clcov <- cov(X) rad <- sqrt(qchisq(0.975, df = ncol(X)))library(car) ellipse.cl <- data.frame(ellipse(center = animals.clcenter, shape = animals.clcov,radius = rad, segments = 100, draw = FALSE)) colnames(ellipse.cl) <- colnames(X)fig <- fig + geom_polygon(data=ellipse.cl, color = "dodgerblue", fill = "dodgerblue", alpha = 0.2) + geom_point(aes(x = animals.clcenter[1], y = animals.clcenter[2]), color = "blue", size = 6)

L'estimateur MCD (Minimum Covariance Determinant) de Rousseeuw est un estimateur robuste populaire de position et de dispersion multivariées
Estimations robustes de position et de dispersion avec MCD
library(robustbase)
animals.mcd <- covMcd(X)
# Estimation robuste de la position
animals.mcd$center
# Estimation robuste de la dispersion
animals.mcd$cov
En injectant ces estimations robustes de position et de dispersion dans la définition des distances de Mahalanobis, on obtient des distances robustes et on peut tracer un ellipsoïde de tolérance robuste.
library(robustbase) animals.mcd <- covMcd(X) ellipse.mcd <- data.frame(ellipse(center = animals.mcd$center, shape = animals.mcd$cov, radius = rad, segments = 100, draw = FALSE)) colnames(ellipse.mcd) <- colnames(X)fig2 <- fig + geom_polygon(data = ellipse.mcd, color = "red", fill = "red", alpha = 0.3) + geom_point(aes(x = animals.mcd$center[1], y = animals.mcd$center[2]), color = "red", size = 6)

MCDplot(animals.mcd, which = "dd")


Détection de la fraude en R