Rで学ぶ不正検知
Tim Verdonck
Professor Data Science at KU Leuven
MASS の Animals データセットには,28種の動物の平均脳重量と体重が含まれます 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))
体重と脳重量の対数の箱ひげ図


観測のマハラノビス(一般化)距離は,共分散行列を考慮して,その観測から中心までの距離を表します。

古典的マハラノビス距離:位置には標本平均,散らばりには標本共分散行列を使用
多変量外れ値の検出では,マハラノビス距離をカットオフ値と比較します。カットオフはカイ二乗分布に基づきます
2次元では,マハラノビス距離がカットオフ以下の観測で定義される$97.5\%$ 許容楕円体を描けます
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)

最小共分散決定量 (MCD) 推定量(Rousseeuw)は,多変量の位置と散らばりのロバスト推定で広く用いられます。
MCD による位置と散らばりのロバスト推定
library(robustbase)
animals.mcd <- covMcd(X)
# Robust estimate of location
animals.mcd$center
# Robust estimate of scatter
animals.mcd$cov
このロバストな位置・散らばりをマハラノビス距離に代入すると,ロバスト距離が得られ,ロバスト許容楕円体を作成できます。
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 から得た古典的マハラノビス距離を比較しますplot(animals.mcd, which = "dd")


Rで学ぶ不正検知