본문 바로가기

AI & Computer Science

통계적 이상치 탐지: R을 활용한 단계별 가이드

반응형
이상치란?

통계에서 이상치(outlier)는 데이터 샘플에서 관측된 값이 다른 관측값들과 큰 차이를 보일 때를 의미합니다. 이는 데이터의 가변성 때문일 수 있으며, 경우에 따라 잘못된 실험으로 인해 발생한 에러일 수도 있습니다. 후자의 경우 데이터 분석 이전에 반드시 이상치를 제거해야 합니다.
이 포스팅에서는 R 프로그래밍을 활용해 다양한 이상치 검출 방법을 알아보겠습니다.

 

0. 데이터 샘플링

이상치 검출 테스트를 위해 이상치가 포함된 데이터를 생성해보겠습니다.

1) 데이터 생성

정규분포를 따르는 100개의 데이터를 생성하고, 그 중 일부 데이터에 이상치를 추가합니다.

data <- rnorm(100, mean=100, sd=10) # 정규분포 평균 100, 표준편차 10을 가지는 데이터 100개 생성
data[101] = 50
data[102] = 150

2) 데이터 분포 시각화

생성된 데이터의 분포를 시각화하여 이상치를 확인합니다.

hist(data, breaks=20, probability=TRUE, col=21)
lines(density(data), col=2, lwd=2)

 

1. IQR Rule for Outliers [Interquartile Range]

IQR Rule을 이용해 이상치를 검출하는 방법입니다. 흔히 boxplot에서 점으로 나타나는 샘플들이 IQR Rule에 의해 정의된 이상치입니다.

1) Quantile 값 구하기

데이터의 Quantile 값을 구하여 IQR 값을 계산합니다.
summary(data)
quantile(data)
fivenum(data)

2) IQR 값 계산 및 이상치 정의

25%와 75% Quantile 값의 차이인 IQR을 계산하고, 이 값을 기준으로 이상치를 정의합니다.
UpperQ = fivenum(data)[4]
LowerQ = fivenum(data)[2]
IQR = UpperQ - LowerQ

3) R에서 IQR Rule을 이용한 이상치 검출

R을 사용하여 상위 및 하위 이상치를 검출합니다.
upperOutlier = data[ which( data > UpperQ + IQR*1.5) ]
lowerOutlier = data[ which( data < LowerQ - IQR*1.5) ]

 

2. Grubb's Test

Grubb's Test는 데이터의 분산을 고려하여 이상치를 검출하는 방법으로, 데이터가 정규분포를 따를 때 사용됩니다.

1) Grubb's Test 가설

Grubb's Test는 두 가지 가설을 세웁니다.
   - H0: 데이터 세트에 이상치가 없다.
   - Ha: 데이터 세트에 적어도 하나의 이상치가 있다.

2) Grubb's Test 원리

데이터의 평균과 각 샘플 값을 비교하여 편차를 구하고, 이를 기반으로 이상치를 검출합니다.

3) R에서 Grubb's Test를 이용한 이상치 검출

R의 outliers 패키지를 사용하여 Grubb's Test를 수행합니다.
install.packages("outliers")
library(outliers)

grubbs.flag <- function(x) {  
    outliers <- NULL  
    test <- x  
    grubbs.result <- grubbs.test(test)  
    pv <- grubbs.result$p.value  
    while(pv < 0.05) {
        outliers <- c(outliers, as.numeric(strsplit(grubbs.result$alternative, " ")[[1]][3]))
        test <- x[!x %in% outliers]
        grubbs.result <- grubbs.test(test)
        pv <- grubbs.result$p.value  
    }  
    return(data.frame(X=x, Outlier=(x %in% outliers)))
}

grubbs.flag(data)

 

3. Robust Tests

Robust Tests는 데이터의 중간값을 중심으로 편차를 계산하여 이상치를 검출합니다.

1) MAD: Median Absolute Deviation

MAD는 중간값과 각 데이터 값의 편차를 나타냅니다. 정규분포에서 MAD는 표준편차와 관계가 있습니다.

2) R에서 Robust Test를 이용한 이상치 검출

R의 stats 패키지를 사용하여 MAD를 이용한 이상치를 검출합니다.
library(stats)

data[which(0.6748*(data-median(data))/mad(data) < -1.28)]
data[which(0.6748*(data-median(data))/mad(data) > 1.28)]
 
 
 
 
마무리

R을 활용한 다양한 이상치 검출 방법을 살펴보았습니다.

 

각 방법들은 데이터의 특성과 분석 목적에 따라 적절히 선택하여 사용할 수 있습니다.
데이터 분석 과정에서 이상치를 적절히 검출하고 처리함으로써, 보다 정확한 분석 결과를 얻을 수 있습니다.

 

도움이 되셨길 바라며, 포스팅을 마칩니다.

반응형