* 해당 포스팅은 파이썬 머신러닝 완벽 가이드(권철민, 2019) 교재를 참고하여 공부하며 작성한 글입니다.
이상치 데이터(Outlier)는 모델의 성능을 떨어뜨리는 불필요한 요소이기 때문에 꼭 제거해주어야 합니다.
그렇다면 어떻게 이상치 데이터를 찾을 수 있을까요?
1차적으로 EDA 과정에서 그래프를 통해 발견할 수 있습니다.
하지만 이 방법은 소수의 데이터가 평균으로부터 눈에 띄게 떨어진 경우에만 가능하다는 한계가 있습니다.
따라서 "어디까지가 이상치 데이터다" 라고 판단하는 기준이 필요하게 되는데요,
여러가지 방법들 중 오늘은 IQR(Inter Quantile Range) 방식에 대해서 정리해보겠습니다.
IQR 방식은 사분위(Quantile) 개념으로부터 출발합니다.
전체 데이터들을 오름차순으로 정렬하고, 정확히 4등분(25%, 50%, 75%, 100%)으로 나눕니다.
여기서 75% 지점의 값과 25% 지점의 값의 차이를 IQR이라고 합니다!!
이 IQR에 1.5를 곱해서 75% 지점의 값에 더하면 최댓값, 25% 지점의 값에서 빼면 최솟값으로 결정합니다.
이 때, 결정된 최댓값보다 크거나 최솟값보다 작은 값을 이상치 라고 간주합니다.
개념은 알았으니 이제 코드로 구현해볼까요?!
import numpy as np
def get_outlier(df=None, column=None, weight=1.5):
# target 값과 상관관계가 높은 열을 우선적으로 진행
quantile_25 = np.percentile(df[column].values, 25)
quantile_75 = np.percentile(df[column].values, 75)
IQR = quantile_75 - quantile_25
IQR_weight = IQR*weight
lowest = quantile_25 - IQR_weight
highest = quantile_75 + IQR_weight
outlier_idx = df[column][ (df[column] < lowest) | (df[column] > highest) ].index
return outlier_idx
# 함수 사용해서 이상치 값 삭제
oulier_idx = get_outlier(df=df, column='A', weight=1.5)
df.drop(outlier_idx, axis=0, inplace=True)
'Data Handling > Data Preprocessing' 카테고리의 다른 글
Feature selection : feature importance vs permutation importance (0) | 2020.09.03 |
---|---|
언더 샘플링(Undersampling)과 오버 샘플링(Oversampling) (0) | 2020.08.07 |
피쳐 스케일링 (Feature Scaling) (0) | 2020.07.27 |
범주형 변수 처리 - 인코딩(Encoding) (0) | 2020.06.20 |
훈련, 테스트 데이터 통합하기 (0) | 2020.06.18 |