이상치(Outlier)
- 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 의미
- ESD(Extreme Studentized Deviation)를 이용한 이상치 발견
- 데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값
- 모든 데이터가 정규분포를 따르지 않을 수 있기 때문에 다음 상황에서는 제한됨
➡️ 데이터가 크게 비대칭일 때(Log변환 등을 노려볼 수 있음)
➡️ 샘플 크기가 작을 경우
- IQR(Inter Quantile Range)를 이용한 이상치 발견
- ESD와 동일하게 데이터가 비대칭적이거나 샘플사이즈가 작은 경우 제한됨
- Box plot
- IQR = Q3 - Q1
- 상한 이상치 = Q3 + 1.5*IQR
- 하한 이상치 = Q1 - 1.5*IQR
- 조건필터링을 통한 삭제(a.k.a. boolean Indexing) : df[ df['column'] > limit_value]
- 이상치는 주관적인 값으로, 해당 데이터를 삭제할지 말지는 분석가가 결정할 몫이다.
- 도메인과 비즈니스 맥락에 따라 기준이 달라지며 데이터 삭제 시 품질을 좋아질 수 있지만 정보 손실을 동반하기 때문에 이상치 처리에 주의해야한다.
ESD 이상치 처리 실습
import numpy as np
mean = np.mean(tips_df['total_bill'])
std = np.std(tips_df['total_bill'])
upper_limit = mean + 3*std
lower_limit = mean - 3*std
print(upper_limit, lower_limit)
## 46.43839435626422 -6.866509110362578
cond = (tips_df['total_bill'] > upper_limit)
cond
## True, False 값 출력
tips_df[cond]
## cond의 값이 True인 데이터만 출력
IQR 이상치 처리 실습(Box plot)
import seaborn as sns
sns.boxplot(tips_df['total_bill'])
q1 = tips_df['total_bill'].quantile(0.25)
q3 = tips_df['total_bill'].quantile(0.75)
iqr = q3 - q1
upper_limit2 = q3 + 1.5*iqr
lower_limit2 = q1 - 1.5*iqr
print(q1) ## 13.3475
print(q3) ## 24.127499999999998
print(iqr) ## 10.779999999999998
print(upper_limit2) ## 40.29749999999999
print(lower_limit2) ## -2.8224999999999945
cond2 = (tips_df['total_bill'] > upper_limit2)
tips_df[cond2]
'스파르타 코딩클럽 > [강의] 머신러닝' 카테고리의 다른 글
[머신러닝 심화] 데이터 분석 프로세스 - 데이터 전처리(인코딩&스케일링) (0) | 2024.01.31 |
---|---|
[머신러닝 심화] 데이터 분석 프로세스 - 데이터 전처리(결측치) (0) | 2024.01.31 |
[머신러닝 심화] 데이터 분석 프로세스 - 데이터 수집 및 EDA (0) | 2024.01.31 |
[머신러닝 기초] 회귀와 분류 정리 (0) | 2024.01.30 |
[머신러닝 기초] 로지스틱회귀 이론 (1) | 2024.01.30 |