Boxplot 상자도표를 통한 이상치 탐지 - [데이터 전처리]
Boxplot란?
데이터의 분포를 한 눈에 볼 수 있게 시각화하여 이상치(Outlier)등을 탐지할 수 있는 시각화 도구.
- median - 중앙값
- IQR - 25% ~ 75%에 해당한 부분
- 75th Percentile - 제 3사분위수
- 25th Percentile - 제 1사분위수
- Whisker - 최댓값, 최솟값
- Outlier - 이상치
Median - 중앙값
데이터들을 정렬했을 때 중앙값 위치 선으로 표시
예를들어 데이터 [1, 5, 9, 10 ,15, 20, 34] 일 때, 중앙값은 10
# Numpy, pnadas, matplotlib 라이브러리 필요
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
test = pd.DataFrame([1, 5, 9, 10 ,15, 20, 34])
fig, ax = plt.subplots(1,1, figsize=(4,4))
a = list(test[0])
ax.boxplot(a)
※ 10에 주황색 선이 표시되어 있는 것을 볼 수 있다.
IQR
정렬한 데이터의 범위가 25% ~ 75% 에 위치한 범위 부분을 말함.
1. 75th Percentile - 제3 사분위수
데이터 정렬 했을 때 75%에 위치한 수
Q3 = (n+1) * (3 / 4)번째 숫자의 값이
2. 25th Percentile - 제1 사분위수
데이터 정렬 했을 때 25%에 위치한 수
Q1 = (n+1) * 4 번째 숫자의 값이 Q1
※ [1, 5, 9, 10 ,15, 20, 34] 일때, 2번째 위치한 값이 Q3이면 숫자 5가 Q3값이라는 건데, 그래프에는 5보다 조금 위에 위치해 있음..?
의문점 - 여러 블로그를 찾아봤을 대 위와 같은 식을 많이 이용해서 Q1, Q3 그래프를 그리는데 직접 그릴때는 위치가 조금 다르게 나오는이유는?
Whisker - 최댓값, 최솟값
(1.5 * IQR)외의 범위밖의 값들을 이상치라고 생각 하지 않는 부분의 최댓값과, 최솟값을 분류할 수 있게 된다.
1. 최댓값
제 3사분위수 + (1.5 * IQR값) = 최댓값
최댓값 보다 높은 값들은 이상치라고 판단한다.
2. 최솟값
제 1사분위수 - (1.5 * IQR값) = 최솟값
최솟값 보다 낮은 값들은 이상치라고 판단한다.
Outlier - 이상치
최댓값, 최솟값의 범위에서 벗어난 값을 이상치라고 판단한다.
이상치 및 극단치 등의 데이터는 값을 제거하거나, 값을 변경해줘서 처리해주는게 모델 측면에서 더 좋다.
이상치 처리 방법1. 이상치 데이터를 행에서 모두 제거한다.
이상치 처리 방법2. 이상치 데이터에 있는 데이터들을 살리기 위해 중앙값 혹은 최댓값, 최솟값으로 변경한다.
(항상 상황에 따라 좋은 값으로 변경하는 것을 추천)