본문 바로가기

Pandas/전처리

판다스 - 특잇값(outlier) 찾아내기 : Tukey Fences, Z-score

반응형

https://steadiness-193.tistory.com/68

 

판다스 - 특잇값(outlier) 처리하기

데이터프레임을 다루다보면 여러 아웃라이어들을 볼 수 있다. 이 값들은 가치가 있을 수 있지만 때로는 제외하고 처리해야할 때가 많다. 데이터 불러오기 data = pd.DataFrame(np.random.randn(1000, 4)) 요��

steadiness-193.tistory.com

https://steadiness-193.tistory.com/69

 

판다스 - 특잇값(outlier) 처리하기2

https://steadiness-193.tistory.com/68 판다스 - 특잇값(outlier) 처리하기 데이터프레임을 다루다보면 여러 아웃라이어들을 볼 수 있다. 이 값들은 가치가 있을 수 있지만 때로는 제외하고 처리해야할 때가

steadiness-193.tistory.com

사실 위 두개의 포스팅은 특잇값을 임의로 정했고

 

이를 대체하는 법을 알아봤다.

 

이번엔 특잇값을 판단하고 찾는 방법을 머신러닝 전처리에 기반하여 알아보자.

 

 

 

 

 

 

특잇값, 이상치, outlier

 

이상치란 기존의 데이터들과 거리가 먼 데이터이다.

 

예를 들어, 이런 값들이(234, 267, 1, 200, 245, 300, 199, 250, 8999, 245)이 세트로 주어졌다고 하면, 이

 

1과 8999는 이상치(outlier)라고 할 수 있다. 

 

위 이상치는 머신러닝 모델 학습 전에 제거를 하는 것이 좋다.

 

이상치를 찾는 방법을 2가지로 알아보자

 

 

 

 

 

1. Tukey Fences

 

Tukey Fences는 사분위 범위(IQR, interquartile range)를 기반으로 한다.

 

IQR은 세번째 사분위에서 첫번째 사분위를 뺀 값이며

 

이를 식으로 나타내면

 

IQR = Q3 - Q1이 된다.

 

아래 그림은 짝수와 홀수 값을 가진 데이터셋의 IQR를 구하는 과정이다.

 

Tukey Fences에선 아래 두가지로 아웃아이어를 판단한다.

 

  • Q1 - (1.5 * IQR) 미만 

  • Q3 + (1.5 * IQR) 초과

 

이를 이용해 아웃라이어를 찾는 함수를 정의해보자.

 

np.percentile을 이용해 4분위 중 1번째와 3번째를 찾아내고

 

이를 이용해 iqr을 정의한다.

 

np.where은 해당 값을 만족하는 데이터의 위치(인덱스)를 반환한다. 

 

 

 

 

 

실제로 np.random을 이용해 함수를 실행해보면

 

튜플 형태의 값이 리턴된다.

 

 

 

따라서 튜플을 제거해주고

 

 

 

이를 이용해 인덱싱하면

 

 

아웃라이어들을 찾을 수 있다.

 

 

 

 

 

 

 

 

2. Z-score (표준 점수)

 

이상치를 찾는 두번째 방법은 z-score를 이용하는 것이다.

 

표준점수 = 데이터의 평균과 표준편차의 차이

 

표준점수를 구하면 변환한 데이터의 평균값이 0이 되고

 

표준편차는 1이된다.

 

 

 

표준점수 = (데이터 포인트 - 데이터의 평균) / 데이터의 표준편차

 

 

  •                           음의 Z-Score는 데이터 포인트가 평균보다 작다는 것

  •                           양의 Z-Score는 데이터 포인트가 평균보다 크다는 것

  •                           Z-Score = 0 → 데이터 포인트가 중간(평균)이다.

  •                           Z-Score = 1 → 데이터 포인트가 평균보다 1 표준편차가 높다.

 

  •                           Z-score의 값이 3보다 크거나 -3보다 작은 것은 이상치라고 판단할 수 있다.

 

 

 

 

 

z-score를 계산한 뒤

 

절댓값이 3을 초과하는 데이터의 위치를 찾는 함수를 정의하면

 

위의 박스체크된 코드를 해석하자면 

 

리스트 표기법을 이용한 것이다.

 

 

 

collection을 돌며 val의 값을 표현식(expr)을 적용해,

 

리스트로 반환하는 것이다.

 

예시.

 

 

 

 

 

 

다시 z-score로 돌아가서 함수를 실행해보면

 

아까와 동일하게 튜플로 반환되고

 

 

 

이를 풀어내면

 

x 데이터에서 아웃라이어들의 인덱스를 찾아낼 수 있다.

 

 

 

 

이를 이용해 인덱싱하면

 

표준점수를 이용한 아웃라이어들을 찾아냈다.

 

 

 

 

 

 

 

 

 

 

 

 

Tukey와 z-score 비교

 

 

 

대체적으로 Tukey가 아웃라이어를 더 많이 찾아내는 것을 볼 수 있다.

 

 

 

 

참고 도서 :

Python Machine Learning(Wei-Meng Lee)

반응형