Fraudedetectie in R
Tim Verdonck
Professor Data Science at KU Leuven
Animals in het pakket MASS bevat gemiddelde hersen- en lichaamsgewichten voor 28 dieren 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))
Boxplot van logaritmen van lichaams- en hersengewicht


De Mahalanobis- (of gegeneraliseerde) afstand van een observatie is de afstand tot het centrum, rekening houdend met de covariantiematrix

Klassieke Mahalanobis-afstanden: steekproefgemiddelde als locatieschatting en steekproef-covariantiematrix als spreidingsschatting
Om multivariate uitschieters te detecteren vergelijken we de Mahalanobis-afstand met een afkapwaarde uit de chikwadraatverdeling
In twee dimensies kunnen we een $97{.}5\%$-tolerantie-ellipsoïde construeren, gedefinieerd door observaties waarvan de Mahalanobis-afstand de afkapwaarde niet overschrijdt
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)

De schatter Minimum Covariance Determinant (MCD) van Rousseeuw is een populaire robuuste schatter voor meervoudige locatie en spreiding
Robuuste schattingen van locatie en spreiding met MCD
library(robustbase)
animals.mcd <- covMcd(X)
# Robuuste locatieschatting
animals.mcd$center
# Robuuste spreidingsschatting
animals.mcd$cov
Door deze robuuste schattingen in de definitie van de Mahalanobis-afstanden te gebruiken, krijgen we robuuste afstanden en kunnen we een robuuste tolerantie-ellipsoïde maken.
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)

MCD-objectplot(animals.mcd, which = "dd")


Fraudedetectie in R