R로 배우는 사기 탐지
Tim Verdonck
Professor Data Science at KU Leuven
이상치는 대다수 데이터의 패턴에서 벗어나는 관측값입니다.
이상치는 사기의 경고 신호일 수 있습니다.
이상치 탐지의 대표 도구:
관측값 $x_i$의 z-점수 $z_i$ 계산:
$$z_i=\frac{x_i-\hat{\mu}}{\hat{\sigma}} = \frac{x_i-\overline{x}}{s}$$
데이터셋 loginc에는 10명의 월소득을 로그 변환한 값이 있습니다:
loginc: 7.876 7.681 7.628 ... 7.764 9.912 # <-- 마지막 값은 명확한 이상치!
Mean <- mean(loginc)
Sd <- sd(loginc)
zscore <- (loginc - Mean) / Sd
abs(zscore) > 3
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
표본평균: $$\overline{x}=\frac{1}{n}\sum_i x_i$$
mean(loginc)mean(loginc9)
7.9864477.772392
loginc9는 loginc에서 이상치만 제외한 값입니다.
관측값 $n$개를 오름차순으로 정렬했을 때, 표본 중앙값 $Med(X_n)$은 $n$이 홀수면 $(n+1)/2$번째, 짝수면 $n/2$번째와 $n/2+1$번째의 평균입니다.
median(loginc)
7.816658
median(loginc9)
7.764296
(1) 표본 표준편차: $$s= \sqrt{\frac{1}{n-1}\sum_i (x_i-\hat{\mu})^2}$$
sd(loginc)
0.6976615
sd(loginc9)
0.1791729
(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
강건 추정량을 대입해 강건 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

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


보정 박스플롯 기준 이상치:
library(robustbase)
adjbox(los)$out
59 67 102
보정 박스플롯 통계량:
adjboxStats(los)$stats
2 4 8 13 47


R로 배우는 사기 탐지