단변량 이상치 탐지

R로 배우는 사기 탐지

Tim Verdonck

Professor Data Science at KU Leuven

이상치

이상치는 대다수 데이터의 패턴에서 벗어나는 관측값입니다. 이상치 물고기 이상치는 사기의 경고 신호일 수 있습니다.

R로 배우는 사기 탐지

이상치 탐지

  • 이상치 탐지의 대표 도구:

    • 각 관측값의 z-점수 계산
    • z-점수의 절댓값이 3 초과이면 이상치로 표시
  • 관측값 $x_i$의 z-점수 $z_i$ 계산:

$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$

  • $\overline{x}$: 표본평균 $\overline{x}=\frac{1}{n}\sum_i x_i$
  • $s$: 표본 표준편차 $s= \sqrt{\frac{1}{n-1}\sum_i(x_i-\hat{\mu})^2}$
R로 배우는 사기 탐지

데이터셋 loginc에는 10명의 월소득을 로그 변환한 값이 있습니다:

loginc: 7.876 7.681 7.628  ...  7.764 9.912 # <-- 마지막 값은 명확한 이상치!
  • (1) 각 관측값의 z-점수를 계산합니다
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
  • (2) z-점수의 절댓값이 3보다 큰지 확인합니다
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • 이 z-점수로는 이상치가 식별되지 않습니다!
R로 배우는 사기 탐지

강건 통계

  • 고전적 통계 방법은 정규성 가정에 의존하며, 단 한 개의 이상치도 결론을 크게 왜곡할 수 있습니다.
  • 강건 통계는 이상치가 있어도 신뢰할 수 있는 결과를 제공하고, 자동 이상치 탐지 도구를 제공합니다.
  • "두 방법을 모두 일상적으로 쓰고, 결과가 충분히 다를 때만 고민하라... 다르면 깊이 생각하라." J.W. Tukey (1979)
R로 배우는 사기 탐지

위치 추정량: 평균과 중앙값

표본평균: $$\overline{x}=\frac{1}{n}\sum_i x_i$$

mean(loginc)

mean(loginc9)
7.986447

7.772392

loginc9loginc에서 이상치만 제외한 값입니다.

관측값 $n$개를 오름차순으로 정렬했을 때, 표본 중앙값 $Med(X_n)$은 $n$이 홀수면 $(n+1)/2$번째, 짝수면 $n/2$번째와 $n/2+1$번째의 평균입니다.

median(loginc)
7.816658
median(loginc9)
7.764296
R로 배우는 사기 탐지

규모 추정량: sd

(1) 표본 표준편차: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$

sd(loginc)
0.6976615
sd(loginc9)
0.1791729
R로 배우는 사기 탐지

규모 추정량: mad, IQR

(2) 중앙절대편차: $$Mad(X_n)=1.4826Med(|x_i-Med(X_n)|)$$

(3) 사분위 범위(정규화): $$IQR(X_n)= IQR = 0.7413(Q_3-Q_1)$$ 여기서 $Q_1$과 $Q_3$는 1사분위수와 3사분위수입니다

IQR(loginc)/1.349
0.2056784
mad(loginc)
0.2396159
mad(loginc9)
0.201305
IQR(loginc9)/1.349
0.1839295
R로 배우는 사기 탐지

이상치 탐지를 위한 강건 z-점수

강건 추정량을 대입해 강건 z-점수를 계산합니다:

$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} =\frac{x_i-Med(X_n)}{Mad(X_n)}$$

robzscore <- (loginc - median(loginc)) / mad(loginc)

abs(robzscore) > 3 ## 이상치 여부 확인
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
robzscore[10] ## 이상치의 강건 z-점수
8.748523
R로 배우는 사기 탐지

박스플롯

  • 튜키의 박스플롯은 이상치 식별에 널리 쓰입니다
  • 값이 펜스 밖이면 이상치로 표시합니다 $$[Q_1-1.5IQR; Q_3+1.5IQR]$$

박스플롯 설명

R로 배우는 사기 탐지

예시: 병원 재원일수(LOS)

boxplot(los, col = "blue", ylab = "Lenght of Stay (LOS)")$out
59  33  42  67  35  47 102  36  27  31  27  30  29  32  37  27  38

LOS 박스플롯 ggplot

R로 배우는 사기 탐지

보정 박스플롯

  • 분포가 비대칭이면, 박스플롯이 정상값도 많이 이상치로 표시할 수 있습니다.
  • 왜도 보정 박스플롯은 강건 왜도 측도를 활용해 펜스를 조정합니다(Hubert and Vandervieren, 2008)

카이제곱 분포 박스플롯

R로 배우는 사기 탐지

예시 LOS: 보정 박스플롯

보정 박스플롯 기준 이상치:

library(robustbase)
adjbox(los)$out
59  67 102

보정 박스플롯 통계량:

adjboxStats(los)$stats
2  4  8 13 47
R로 배우는 사기 탐지

예시 LOS: 박스플롯 vs 보정 박스플롯

LOS_박스플롯

LOS_보정박스

R로 배우는 사기 탐지

연습해 봅시다!

R로 배우는 사기 탐지

Preparing Video For Download...