多変量外れ値の検出

Rで学ぶ不正検知

Tim Verdonck

Professor Data Science at KU Leuven

Animals データ

  • パッケージ MASSAnimals データセットには,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))
Rで学ぶ不正検知

Animals データ:単変量の外れ値検出

体重と脳重量の対数の箱ひげ図

animalsbp

Rで学ぶ不正検知

Animals データ:散布図

scatteranimals_ggplot

Rで学ぶ不正検知

マハラノビス距離

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

mahalanobiseuclidean_ggplot

Rで学ぶ不正検知

多変量外れ値検出におけるマハラノビス距離

  • 古典的マハラノビス距離:位置には標本平均,散らばりには標本共分散行列を使用

  • 多変量外れ値の検出では,マハラノビス距離をカットオフ値と比較します。カットオフはカイ二乗分布に基づきます

  • 2次元では,マハラノビス距離がカットオフ以下の観測で定義される$97.5\%$ 許容楕円体を描けます

Rで学ぶ不正検知

マハラノビス距離に基づく許容楕円体

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)
Rで学ぶ不正検知

cltolanimals_ggplot

Rで学ぶ不正検知

位置と散らばりのロバスト推定

最小共分散決定量 (MCD) 推定量(Rousseeuw)は,多変量の位置と散らばりのロバスト推定で広く用いられます。

  • MCDは,古典的共分散行列の行列式が最小となる $h$ 個の観測を探します
  • 位置のMCD推定値は,これら $h$ 観測の平均
  • 散らばりのMCD推定値は,これら $h$ 点の標本共分散行列(整合性係数で補正)
  • 正規データでの効率向上のため再重み付けを実施
  • MCDの計算は難しいが,高速アルゴリズムが提案されています
Rで学ぶ不正検知

ロバスト距離

MCD による位置と散らばりのロバスト推定

library(robustbase)
animals.mcd <- covMcd(X)

# Robust estimate of location
animals.mcd$center 

# Robust estimate of scatter
animals.mcd$cov

このロバストな位置・散らばりをマハラノビス距離に代入すると,ロバスト距離が得られ,ロバスト許容楕円体を作成できます。

Rで学ぶ不正検知

Animals:ロバスト許容楕円体

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)
Rで学ぶ不正検知

robtolanimals_ggplot_v3.png

Rで学ぶ不正検知

Distance–distance プロット

  • $p>3$ の場合,許容楕円体は可視化できません。
  • Distance–distance プロットは,各観測のロバスト距離と,MCD から得た古典的マハラノビス距離を比較します
    plot(animals.mcd, which = "dd")
    
    animalsddplot
Rで学ぶ不正検知

Animals:外れ値の確認

animalsdetection

Rで学ぶ不正検知

Let's practice!

Rで学ぶ不正検知

Preparing Video For Download...