데이터 과학을 다루는 분야에서 이상치는 매우 중요한 문제임과 동시에 매우 골치아픈 문제이기도 하다.
EDA등 전처리를 진행할 때 이상치 하나만으로 각종 통계 지표(평균, 표준편차등)들이 매우 달라지기 때문이다. 전처리 과정에서 이런 상황이 발생하면 모델링을 아무리 잘하더라도 잘못된 결론을 도출할 확률이 매우 높다. 소위 말해서 Garbage In, Garbage Out(怎么进的怎么出)현상이 발생한다.
이런 중요한 문제를 해결하기 위해 통계학자들은 머리를 싸매고 여러가지 방법들을 시도해 봤지만, 아쉽게도 이상치 탐색 및 제거에 관한 만족스런 통계적 방법은 아직까지는 없는 듯한 것 같다. 그래서 아직은 Domain Field에서의 지식들이 이상치 탐색과 제거에서 매우 중요하다. 그리고 내 생각에는 설령 정형화된 방법이 나온다고 하더라도 Domain의 기준을 완벽히 대체할 수 있을것이라 생각하지는 않는다.
그래도 통계학자들은 어느정도 "합리적인" 방법으로 이상치 탐색 방안들을 고안해냈긴 했다. 자주 사용되는 방법으로는 Z-Score Method와 IQR Method이다. 원글의 저자는 후자를 선호하기 때문에 본글도 IQR 방법을 중심으로 서술할 것이다.
IQR 이상치 탐색 방법이란 간단히 말해서,
1. Q1은 데이터 25%에 해당,Q3는 데이터 75%에 해당, Q3 - Q1 = IQR
2. 이 때 이상치는 [Q1 - (1.5)IQR] 아래에 존재하거나 [Q3 + (1.5)IQR] 위에 존재한다
위 그럼에서도 볼 수 있듯이 [Q1 - (1.5)IQR]과 [Q3 + (1.5)IQR]은 정규분포상에서 꼬리 부분에 해당한다.
그리고 정규분포의 꼬리 부분은 "발생할 확률이 상대적으로 작다"라는 뜻을 가지고 있고,
이에 따라 [Q1 - (1.5)IQR]의 아래부분과 [Q3 + (1.5)IQR] 윗 부분의 데이터들은 상대적으로 발생할 확률이 적으며
이는 이상치의 특성에 부합하기 때문에 이러한 데이터들을 이상치로 간주한다.
참고로 IQR을 사분위수 범위라고도 하고 H-Spread라고도 한다(아마도 Upper/Lower Hinge의 'H'에서 따온듯).
이러한 IQR 방법은 R에서 박스플롯으로 시각화가 가능하다. 파이썬에서도 가능하고 개인적인 생각으로는 매우 간단한 방법이므로 다른 언어에서도 충분히 가능한 방법이라고 생각한다.
## 박스 플롯 사용
boxplot(iris$Sepal.Width, xlab = "Sepal Width")
## 중앙값
median(iris$Sepal.Width)
# 3
## 사분위수 범위
IQR(iris$Sepal.Width)
# 0.5
## Q3(75 percentile), Q1(25 percentile)
quantile(iris$Sepal.Width, 3/4)
quantile(iris$Sepal.Width, 1/4)
# Q3 : 3.3
# Q1 : 2.8
## Upper/Lower Hinge(Range)
iqr <- IQR(iris$Sepal.Width)
q3 <- quantile(iris$Sepal.Width, 3/4)
q1 <- quantile(iris$Sepal.Width, 1/4)
up_hinge <- q3 + 1.5*iqr
low_hinge <- q1 - 1.5*iqr
# Upper Hinge : 4.05
# Lower Hinge : 2.05
이러한 박스 플롯 시각화를 통해서 우리는 이상치를 탐지할 수 있다. 박스 위아래로 존재하는 두개의 실선, 즉 점선 양끝의 두 실선 바깥에 존재하는 '동그라미'들은 이상치 데이터로 간주할 수 있다. 그렇다면 이러한 이상치들은 어떻게 제거할 수 있을까? 위 코드에서 시행한 Upper Hinge와 Lower Hinge를 이용하면 된다.
## 구체적인 이상치 데이터들 확인
boxplot(iris$Sepal.Width, plot = F)$out
# 4.4 4.1 4.2 2.0
## 이상치 제거
eliminated <- subset(iris$Sepal.Width,
iris$Sepal.Width > low_hinge &
iris$Sepal.Width < up_hinge)
## 이상치 제거한 박스플롯
boxplot(eliminated)
이러한 IQR 방법의 장점은 단순하고 쉽다는 점이다. 다만 이러한 통계적 방법은 위에서도 말했듯이 해당 Domain Field를 완전히 무시한 방법이므로, 우선 IQR방법으로 이상치를 탐색한 후 이상치가 정말 '이상치'인지 해당 Field의 전문가에게 묻는게 현재로선 제일 좋은 방법인 것 같다.
## 참고 문헌
'투자를 위한 코딩 > R' 카테고리의 다른 글
R로 중국 주식 티커 데이터 가져오기 (0) | 2021.01.18 |
---|---|
R로 네이버 주식 데이터 크롤링 (0) | 2021.01.11 |
R로 중국 주식 크롤링 & 저변동성 분석 (0) | 2020.12.31 |
R로 주식 데이터 가져오기 & 베타 분석 (0) | 2020.12.09 |
다변량 통계분석과 R 모델링(多元统计分析及R语言建模) (1) (0) | 2020.11.29 |
댓글