1. 이상치(Outlier)
▶ 이상치
: 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 말함
: 이상치는 도메인과 비즈니스 맥락에 따라 그 기준이 달라짐
: 데이터 삭제 시 품질은 좋아질 수 있지만 정보 손실을 동반하기 때문에 이상치 처리에 주의해야 함
: 이상 탐지(Anomaly Detection)라고 해서 데이터의 패턴이 달라진 경우를 포착해 사기탐지나 사이버 보안을 이뤄내는 방법이 있음
1-1) ESD
▶ ESD (Extreme Studentized Deviation)
: 데이터가 정규 분포를 따른다고 가정했을 때, 평균에서 표준편차의 3배 이상 떨어진 값
: 모든 데이터가 정규 분포를 따르는 것은 아니기 때문에 다음 상황에서는 제한됨
- 데이터가 크게 비대칭일 때 (→ Log 변환 등을 노려볼 수 있음)
- 샘플 크기가 작을 때
▶ ESD로 이상치 발견하는 방법
import numpy as np
mean = np.mean(data)
std = np.std(data)
upper_limit = mean + 3*std
lower_limit = mean - 3*std
1-2) IQR
▶ IQR (Inter Quantile Range)
: ESD와 동일하게 데이터가 비대칭적이거나 샘플 사이즈가 작은 경우 제한됨
: Box plot (상자수염그림)_데이터의 사분위 수를 포함하여 분포를 보여주는 시각화 그래프
- 사분위 수: 데이터를 순서에 따라 4등분 한 것
- Q1 : 데이터의 25% 값
- Q2 : 데이터의 50% 값 (중위수)
- Q3 : 데이터의 75% 값
- IQR = Q3 - Q1
- 상한 이상치 = Q3 + 1.5 * IQR
- 하한 이상치 = Q1 - 1.5 * IQR
[Box plot 관련 참고 게시글]
https://datarian.io/blog/boxplot
박스 플롯에 대하여
박스 플롯(box plot)은 데이터의 대략적인 분포와 개별적인 이상치들을 동시에 보여줄 수 있으며 서로 다른 데이터 뭉치를 쉽게 비교할 수 있도록 도와주는 시각화 기법으로 가장 널리 쓰이는 시
datarian.io
▶ IQR로 이상치 발견하는 방법
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].qunatile(0.75)
IQR = Q3 - Q1
uppper_limit = Q3 + 1.5*IQR
lower_limit = Q1 - 1.5*IQR
1-3) 조건 필터링을 통한 이상치 삭제
▶ boolean indexing으로 이상치 제거
df[ df['column'] > limit_value]
2. 결측치(Missing Value)
▶ 결측치
: 존재하지 않는 데이터
▶ 결측치 처리 방법
① 수치형 데이터
- 평균값 대치 : 대표적인 대치 방법
- 중앙값 대치 : 데이터에 이상치가 많아 평균 값이 대표성이 없으면 중앙값을 이용
② 범주형 데이터
- 최빈치 대치
▶ 결측치 삭제 및 대치 코드
① 삭제
- df.dropna(axis=0) : 행 삭제
- df.dropna(axis=1) : 열 삭제
② 대치
- Boolean Indexing
- df.fillna(value) : 특정 값으로 대치 (평균, 중앙, 최빈값)
- 알고리즘 이용
- sklearn.impute.SimpleImputer : 평균, 중앙, 최빈값으로 대치
- SimpleImputer.statistics_ : 대치한 값 확인 가능
- sklearn.impute.IterativeImputer : 다변량 대치(회귀 대치)
- sklearn.impute.KNNImputer : KNN 알고리즘을 이용한 대치
댓글