다변량 이상치 탐지

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로 배우는 사기 탐지

마할라노비스 거리

관측치의 마할라노비스(일반화) 거리는 공분산행렬을 고려하여 중심까지의 거리를 측정합니다.

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(Minimum Covariance Determinant) 추정량은 위치와 산포의 강건한 다변량 추정량입니다.

  • MCD는 고전적 공분산행렬의 행렬식이 최소가 되는 $h$개의 관측치를 찾습니다.
  • 위치의 MCD 추정치는 이 $h$개 관측치의 평균입니다.
  • 산포의 MCD 추정치는 이 $h$개 점의 표본 공분산행렬(일치성 보정 곱)입니다.
  • 정규 자료에서 효율을 높이기 위해 재가중(리웨이팅) 단계를 적용합니다.
  • 계산은 어렵지만 빠른 알고리즘이 제안되어 있습니다.
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로 배우는 사기 탐지

거리-거리 플롯

  • $p>3$이면 허용 타원체를 시각화할 수 없습니다.
  • 거리-거리 플롯은 각 관측치의 강건 거리와, MCD 객체에서 얻은 고전적 마할라노비스 거리를 비교해 보여줍니다.
    plot(animals.mcd, which = "dd")
    
    animalsddplot
R로 배우는 사기 탐지

Animals: 이상치 확인

animalsdetection

R로 배우는 사기 탐지

Let's practice!

R로 배우는 사기 탐지

Preparing Video For Download...