머신러닝 | 데이터 전처리 | 이상치와 결측치 | 이상치 탐지 기법 (ESD, IQR) | 이상치 처리 방법 | 결측치 삭제, 대치 알고리즘

    728x90

     

    1. 이상치(Outlier)

     

    ▶ 이상치

    : 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 말함

    : 이상치는 도메인과 비즈니스 맥락에 따라 그 기준이 달라짐

    : 데이터 삭제 시 품질은 좋아질 수 있지만 정보 손실을 동반하기 때문에 이상치 처리에 주의해야 함

    : 이상 탐지(Anomaly Detection)라고 해서 데이터의 패턴이 달라진 경우를 포착해 사기탐지나 사이버 보안을 이뤄내는 방법이 있음

     

    1-1) ESD 

    ▶ ESD (Extreme Studentized Deviation)

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

    : 모든 데이터가 정규 분포를 따르는 것은 아니기 때문에 다음 상황에서는 제한됨

    • 데이터가 크게 비대칭일 때 (→ Log 변환 등을 노려볼 수 있음)
    • 샘플 크기가 작을 때

     

    ESD로 이상치 발견하는 방법

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

     


    1-2) IQR

    ▶ IQR (Inter Quantile Range)

    : ESD와 동일하게 데이터가 비대칭적이거나 샘플 사이즈가 작은 경우 제한됨

    : Box plot (상자수염그림)_데이터의 사분위 수를 포함하여 분포를 보여주는 시각화 그래프

    • 사분위 수: 데이터를 순서에 따라 4등분 한 것
      • Q1 : 데이터의 25% 값
      • Q2 : 데이터의 50% 값 (중위수)
      • Q3 : 데이터의 75% 값
    • IQR = Q3 - Q1
      • 상한 이상치 = Q3 + 1.5 * IQR
      • 하한 이상치 = Q1 - 1.5 * IQR

    [Box plot 관련 참고 게시글]

    https://datarian.io/blog/boxplot

     

    박스 플롯에 대하여

    박스 플롯(box plot)은 데이터의 대략적인 분포와 개별적인 이상치들을 동시에 보여줄 수 있으며 서로 다른 데이터 뭉치를 쉽게 비교할 수 있도록 도와주는 시각화 기법으로 가장 널리 쓰이는 시

    datarian.io

     

    ▶ IQR로 이상치 발견하는 방법

    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

    1-3) 조건 필터링을 통한 이상치 삭제

    ▶ boolean indexing으로 이상치 제거

    df[ df['column'] > limit_value]

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

    댓글