반응형
이상치란?
통계에서 이상치(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을 활용한 다양한 이상치 검출 방법을 살펴보았습니다.
각 방법들은 데이터의 특성과 분석 목적에 따라 적절히 선택하여 사용할 수 있습니다.
데이터 분석 과정에서 이상치를 적절히 검출하고 처리함으로써, 보다 정확한 분석 결과를 얻을 수 있습니다.
도움이 되셨길 바라며, 포스팅을 마칩니다.
반응형
'AI & Computer Science' 카테고리의 다른 글
R 프로그래밍에서 결측치(NA) 처리 및 연산 방법 (7) | 2024.09.01 |
---|---|
DICOM (DCM) 이미지를 PNG, JPG로 변환하기 (3) | 2024.09.01 |
DeLong’s Test를 활용한 AUC 비교: Python 구현 가이드 (11) | 2024.08.30 |
2-Fold Macro-Average 시각화: R을 활용한 파워포인트 Meta 형식 그래프 추출 가이드 (9) | 2024.08.30 |
AI 모델 성능 평가를 위한 R 코드: 신뢰 구간(CI) 계산 가이드(파이썬) (4) | 2024.08.30 |