이상치
IT 위키
더 많은 작업
- Outlier; 이상값
- 다른 관측치들과 비정상적으로 멀리 떨어진 관측치
이상치는 자료의 대부분과 동떨어진 값이다. 입력 오류나 측정 오류처럼 잘못된 데이터일 수도 있고, 우연한 변동이거나 오히려 분석할 가치가 있는 현상(부정 거래, 설비 고장 징후 등)일 수도 있다. 어떤 값을 비정상으로 볼지는 결국 분석자가 정해야 하므로, 먼저 정상적인 관측치의 분포를 파악한 뒤 기준을 정한다. 이상치는 평균, 분산, 회귀계수 같은 통계량을 크게 흔들기 때문에 분석 전에 탐지하고 처리 방침을 정해야 한다.
- 의도하지 않게 잘못 입력된 이상치(Bad Data)
- 분석 목적에 부합되지 않아 제거해야 하는 이상치
- 이상치 자체로 의미가 있어 분석 대상에 포함해야 하는 이상치
- 의도적으로 잘못 입력된 이상치(Fraud)
- 박스플롯을 이용하면 이상치를 쉽게 감지할 수 있다.
| 방법 | 기준 | 비고 |
|---|---|---|
| ESD (평균 ± 3σ) | 평균에서 표준편차의 3배보다 멀리 떨어진 값, 즉 인 값을 이상치로 본다. | ADsP 교재에 나오는 기준이다. 자료가 정규 분포에 가깝다고 가정한다. NIST 핸드북의 일반화 ESD 검정(generalized ESD test)은 이와 달리 유의수준과 임계값을 쓰는 정식 통계적 검정이다. |
| 기하평균 ± 2.5σ | 기하평균에서 표준편차의 2.5배보다 멀리 떨어진 값 | ADsP 교재에 나오는 기준이다. |
| 사분위수 기준 (IQR) | Q1 − 1.5 × IQR보다 작거나 Q3 + 1.5 × IQR보다 큰 값. IQR = Q3 − Q1 | 박스 플롯의 수염 밖에 찍히는 점이 이것이다. 이 경계를 안쪽 울타리(inner fence)라 하고, Q1 − 3 × IQR, Q3 + 3 × IQR을 바깥 울타리(outer fence)라 한다. 안쪽 울타리 밖은 약한 이상치(mild outlier), 바깥 울타리 밖은 극단 이상치(extreme outlier)로 구분한다. 분포 가정이 필요 없다. |
| 통계적 검정 | 그럽스 검정(Grubbs' test), 일반화 ESD 검정 등으로 가장 극단적인 값이 이상치인지 검정한다. | 대부분 정규 분포를 가정하므로, 검정 전에 정규 확률 그림 등으로 정규성을 확인한다. 정규성이 맞지 않으면 이상치가 아니라 분포가 다른 것일 수 있다. |
| 군집·밀도 기반 | 군집 분석을 한 뒤 어느 군집에도 속하지 않거나 아주 작은 군집에 속한 관측치를 이상치로 본다. DBSCAN은 밀도가 낮은 영역의 점을 잡음(noise)으로 따로 분류한다. | 다변량 자료에 쓸 수 있다. |
| 마할라노비스 거리 | 평균 벡터에서 마할라노비스 거리가 큰 관측치를 이상치로 본다. | 다변량 방법. 변수 사이의 상관을 반영하므로, 변수 하나씩 보면 평범하지만 변수 사이의 관계에서 벗어난 값을 찾는다. |
| 시각화 | 박스 플롯, 히스토그램, 산점도 | 수치 기준을 적용하기 전에 분포 모양과 극단값을 눈으로 확인한다. |
- 평균과 표준편차는 이상치 자체의 영향을 받는다. 표본이 작거나 이상치가 여러 개이면 이상치가 평균과 표준편차를 끌어올려 평균 ± 3σ 기준으로는 잡히지 않을 수 있다(가려짐, masking). 중앙값과 사분위수를 쓰는 IQR 기준은 이 영향을 덜 받는다.
- 탐지 기준은 이상치 후보를 표시할 뿐이다. 실제로 잘못된 값인지는 업무 지식과 원천 데이터를 확인해 판단한다.
| 방법 | 내용 | 주의점 |
|---|---|---|
| 삭제 | 명백한 입력·측정 오류이면 해당 관측치를 분석에서 뺀다. 가능하면 올바른 값으로 고친다. | 오류라는 근거 없이 지우면 실제 현상을 놓치고 분산을 과소 추정한다. |
| 대체 | 이상치를 결측값으로 보고 평균, 중앙값, 예측값 등으로 바꾼다. | 결측치 대치 방법을 그대로 쓸 수 있다. |
| 변환 | 로그 변환, 제곱근 변환 등으로 큰 값의 영향을 줄인다. | 오른쪽으로 긴 꼬리를 가진 자료(소득, 매출 등)에 흔히 쓴다. 해석할 때 변환된 척도임을 고려한다. |
| 절단 (trimming) | 양쪽 끝의 일정 비율(예: 상·하위 5%)을 잘라 버린다. 이렇게 구한 평균이 절사평균(trimmed mean)이다. | 관측치 수가 줄어든다. |
| 조정 (winsorizing) | 기준을 넘는 값을 버리지 않고 기준값(예: 상·하한 경계, 특정 백분위수)으로 바꾼다. | 관측치 수는 유지되지만 극단 쪽 분포가 기준값에 몰린다. |
| 별도 분석 | 이상치 집단을 따로 떼어 분석하거나, 이상치를 포함한 경우와 뺀 경우를 모두 분석해 비교한다. | 부정 거래 탐지처럼 이상치 자체가 분석 목적일 때 쓴다. |
| 로버스트 방법 | 중앙값, 절사평균, 로버스트 회귀처럼 이상치의 영향을 덜 받는 통계 기법을 쓴다. | 이상치가 오류인지 판단할 수 없을 때 쓴다. |
x <- c(12, 15, 14, 13, 16, 15, 14, 13, 15, 60)
# 박스 플롯과 수염 밖의 값
boxplot(x)
boxplot.stats(x)$out
# 사분위수(IQR) 기준
q <- quantile(x, c(0.25, 0.75))
iqr <- IQR(x)
lower <- q[1] - 1.5 * iqr
upper <- q[2] + 1.5 * iqr
x[x < lower | x > upper]
# 평균 ± 3σ 기준
x[abs(x - mean(x)) > 3 * sd(x)]
# 조정(winsorizing): 경계 밖의 값을 경계값으로 바꿈
x_w <- pmin(pmax(x, lower), upper)
# 절단(trimming): 양쪽 10%를 뺀 절사평균
mean(x, trim = 0.1)
boxplot.stats()는quantile()이 아니라fivenum()의 힌지(hinge)로 상자를 그리므로, 위의 quantile 기준과 경계값이 조금 다를 수 있다. 수염 길이는 인자coef(기본 1.5)로 정한다.
- IQR 기준의 경계는 Q1 − 1.5 × IQR, Q3 + 1.5 × IQR이며, 박스 플롯에서 수염 밖에 점으로 표시된다.
- ESD는 평균 ± 3σ, 기하평균 기준은 ± 2.5σ이다(ADsP 교재 기준).
- 이상치라고 무조건 삭제하지 않는다. 오류인지, 의미 있는 값인지 먼저 판단한다. 부정 사용 탐지 등에서는 이상치가 분석 대상이다.
- 절단(trimming)은 극단값을 버리고, 조정(winsorizing)은 극단값을 경계값으로 바꾼다.
- 다변량 이상치는 마할라노비스 거리로 찾는다.
