낭만적(?) 일상/파이썬, 데이터분석

파이썬 전처리②표준화(standardization)로 이상치제거

Soo♥JJeong 2019. 6. 28. 13:37

파이썬에서 데이터 전처리 두번째는 데이터를 표준화(standardization)하여 이상치(outlier)를 제거하는 것이다. 이번 포스팅에서는 표준화의 개념과 표준화하는 파이썬 코드를 알아보겠다.

 

 

수능을 보면 수능 원점수와 함께 표준점수가 나온다. 수능에서 언어 80점, 수리 80점(원점수 기준)으로 받았지만, 어떤 과목을 더 잘했는지는 표준점수를 통해 확인할 수 있다. 왜냐하면 언어와 수리영역의 점수 분포가 다르기 때문이다.  

 

 

표준화란, 데이터 값과 평균을 기준으로 어느정도 떨어져있는지를 나타내는 값으로, 데이터 값과 평균의 거리표준편차 단위로 나누어 구한다. 

 



                   X- 평균
표준화(Z)= ----------------
                  표준편차


 

 

(TeX으로 쓰면 이렇게 보인다. )

 

 

 

표준화한 Z값이 ±1.96 이내(간단히는 ±2)에 있으면 95%신뢰구간 내에 있는 것이므로, 그 데이터만 선택하게 되면 outlier를 제거하게 된다.

 

 

이를 파이썬 코드로 구하면 다음과 같다.

 

1. 새 컬럼 만들어서 Z 값 넣기

 
from scipy import statsdf['Z값 넣을 new 컬럼명'] = stats.zscore(df['Z할 컬럼명']

 

 

2. Z = ±2 인 것만 남기기 

 
df = df[df['Z값 넣은 new 컬럼명']. between( -2,2)]

 

 

저렇게 코드로만 보면 이해가 가지 않을 수 있으니, '드립력으로 배운 머신러닝 기초아니야' 수업 때 '월마트의 Holiday여부에 따른 매출차이 분석'에서 했던, 컬럼을 추가하고 거기에 Weekly_sales값을 z값으로 변환하는 예시를 써보도록 하겠다.

 

데이터는 월마트 지점별, 부서별, 주별, Holiday여부(T/F), 주별매출로 이루어져있다. 분석의 목표는 Holiday여부에 따라 매출차이를 분석하는 것인데, 지점별로 매출이 다르다는 것을 발견했다. 그래서 상하위 극단값을 2.5%씩을 outlier로 보고 버리려고 한다. 그러기 위해서는 주별 매출을 표준화(z값으로 만들어야 한다.)

 

 

 

 

 

여기까지가 표준화에 대한 파이썬 코드 및 예시였다. 그런데, 표준편차를 모르는 사람은 표준편차가 무엇인지 궁금해질 것이다. 그래서 표준편차도 정리했다.

 

 

----------------------------------------------------------------------------------------------

 

표준편차란, 편차(데이터 값과 평균과의 차이)의 제곱을 평균내서 루트씌운것으로 평균에서 벌어진 정도를 의미한다.

 

  

 

저렇게 공식으로 보면 외계어 같이 보이지만 하나씩 따져보면 어렵지 않다.  

 : 편차(각 수치에서 평균을 뺀 것) = 평균과 떨어진 거리

 

이 편차들을 더해서 샘플갯수로 나누면 평균적인 거리가 나올 것이라고 생각할 수 있지만, 편차들을 더하면 0이 됨. (평균이 가장  가운데 있는 것인데 +,- 떨어진 거리를 더하면 0이 되는 것임)

 

 

 

 

편차를 제곱해서 평균 냄(샘플갯수로 나눠줌)  이것이 바로 분산!

 

하지만 분산은 제곱을 해서 수치가 뻥튀기되었기 때문에 루트를 씌워서 표준편차를 구함.

 

 

그동안 표준편차를 이렇게 깔끔하게 정리해준 사람은 없었다. (Thanks to 드립력 머신러닝) 그렇다면, 이 블로그의 서두에서 주어진 언어와 수리의 평균과 표준편차가 주어진다면 어떤 과목을 잘했을지 알 수 있지 않을까?

 


 언어 수리 
 내점수 80  80 
 수능평균 70  68 
 표준편차 4

 

위와 같이 평균과 표준편차까지 주어지면, 아래와 같이 표준점수를 구할 수 있다.

 

                         (80-70)

언어 표준점수 = ------------ = 5.0

                            2

 

                         (80-68)

수리 표준점수 = ------------ = 3.0

                            4

 

 

----------------------------------------------------------------------------------------------

 

 

이상 파이썬 전처리 ②표준화로 이상치 제거 하는 방법과 표준편차에 대해 알아보았다. 데이터표준화에 대해 궁금하셨던 분들에게 도움이 되길!

 

 

* 위 내용은 내돈내고(!)  '드립력으로 머신러닝 배우기 기초아니야반'에서 배운 내용이다.

** 혹시 수정되어야 할 부분이 있으면 댓글로 알려주세요! (저도 공부하는 중입니다 ^^)