데이터분석 study/ML_ 심화

TIL_24.08.22_데이터 전처리(이상치, 결측치)

justdata 2024. 8. 22. 20:55

▶이상치(outlier)

   - 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 말한다.

   - 크게 2가지 기준이 있다.

 

  1. ESD(Extreme Student Deviation)를 이용한 이상치 발견

      - 데이터가 정규분포를 따른다고 가정할 때, 평균에서 표준편차의 3배 이상 떨어진 값

      - 모든 데이터가 정규 분포를 따르지 않을 수 있기 때문에 다음 상황에서는 제한된다.

        ● 데이터가 크게 비대칭일 때 (log 변환 등을 노려볼 수 있다.)

        ● 샘플 크기가 작을 경우 

 

  2. IQR(Inter Quantile Range)를 이용한 이상치 발견

     

 

      ● Boxplot : 데이터의 사분위 수를 포함하여 분포를 보여주는 시각화 그래프,

                         상자-수염 그림이라고도 함

 

          Q1 (25%), Q2(50%, 중위수), Q3(75%)
          IQR(Inter Quantile Range) = Q3 - Q1
          상한 이상치 = Q3 +1.5 * IQR
          하한 이상치 = Q1 - 1.5 * IQR

 

 

        ○ ESD를 이용한 처리 

   

import numpy as np
mean = np.mean(data)
std = np.std(data)
upper_limit = mean + 3*std
lower_limit = mean - 3*std

 

        ○ IQR을 이용한 처리 (box plot)

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

 

      ○ 조건 필터링을 통한 삭제 (boolean indexing)

df[df['column'] > limit_value]

 

 

▶ 결측치(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 알고리즘을 이용한 대치