偵測多變量離群值

R 的詐欺偵測

Tim Verdonck

Professor Data Science at KU Leuven

Animals 資料

  • 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))
R 的詐欺偵測

Animals 資料:單變量離群偵測

體重與腦重取對數後的「盒狀圖」

animalsbp

R 的詐欺偵測

Animals 資料:散佈圖

scatteranimals_ggplot

R 的詐欺偵測

Mahalanobis 距離

觀測值的「Mahalanobis(廣義)距離」是該點到中心的距離,並考量共變異矩陣。

mahalanobiseuclidean_ggplot

R 的詐欺偵測

用 Mahalanobis 距離偵測多變量離群值

  • 「傳統 Mahalanobis 距離」:以「樣本平均」估計位置、以「樣本共變異矩陣」估計散佈。

  • 偵測多變量離群值時,將 Mahalanobis 距離與臨界值比較;臨界值由卡方分配導出。

  • 在 2 維中可構造對應的「$97.5\%$ 容忍橢球」,定義為 Mahalanobis 距離不超過臨界值的觀測點。

R 的詐欺偵測

基於 Mahalanobis 距離的容忍橢球

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 的詐欺偵測

強健的位置與散佈估計

Rousseeuw 的「最小共變異行列式(MCD)」是常見的強健多變量位置與散佈估計量。

  • MCD 尋找共變異矩陣行列式最小的那組 $h$ 個觀測值。
  • 位置的 MCD 估計為「這 $h$ 個觀測值的平均」。
  • 散佈的 MCD 估計為「這 $h$ 點的樣本共變異矩陣」(再乘一致性係數)。
  • 為提高常態情況下的效率,會加入重新加權步驟。
  • 計算 MCD 不易,但已有多種「快速演算法」。
R 的詐欺偵測

強健距離

使用 MCD 取得強健的位置與散佈估計

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

# 強健的位置估計
animals.mcd$center 

# 強健的散佈估計
animals.mcd$cov

將這些強健的位置與散佈估計帶入 Mahalanobis 距離的定義,可得到「強健距離」,並據此建立強健的容忍橢球。

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 的詐欺偵測

距離-距離圖(DD plot)

  • 當 $p>3$ 時無法視覺化容忍橢球。
  • 「距離-距離圖」將每個觀測的強健距離對上其由 MCD 物件得到的傳統 Mahalanobis 距離。
    plot(animals.mcd, which = "dd")
    
    animalsddplot
R 的詐欺偵測

Animals:檢查離群點

animalsdetection

R 的詐欺偵測

一起來練習吧!

R 的詐欺偵測

Preparing Video For Download...