본문 바로가기
ADP로ML정리

2-2. 데이터 전처리 - 이상치 처리

by hits_gold 2024. 2. 14.
반응형

 이상치는 측정의 변동성이나 실험의 오류, 측정 장비의 이상 등의 이유로 발생할 수 있다. 결측값을 대체했을 때의 값이 이상치로 확인될 수 있기 때문에 결측값 처리 이후 이상치에 대한 처리를 진행한다.(이상치를 결측값으로 만든 후, 다른 결측값들과 같이 처리하는 방법도 있다)

 

IQR

 IQR은 Box Plot의 이상치 결정 방법을 그대로 사용하는 것인데, 3분위수를 Q3,  1분위수를 Q1이라 할 때 Q3-Q1를 IQR이라고 하고, Q3 + 1.5*IQR보다 크거나 Q1 - 1.5*IQR보다 작을 때 이상치로 간주한다.

 여기서 IQR에 곱해지는 상수(1.5)는 조절해서 쓴다(나는)

 

 

import pandas as pd
import numpy as np
from sklearn.datasets import load_wine

load_wine = load_wine()
wine = pd.DataFrame(load_wine.data, columns = load_wine.feature_names)
wine['Class'] = load_wine.target

def outliers_iqr(df, col, k):
    q1, q3 = np.percentile(df[col], [25, 75])
    iqr = q3 - q1

    lower_whis = q1 - iqr*k
    upper_whis = q3 + iqr*k
    
    print(lower_whis, upper_whis)
    outliers = df[(df[col] > upper_whis) | (df[col] < lower_whis)]
    return outliers[[col]]

outliers = outliers_iqr(wine, 'color_intensity', 1.5)
outliers

 

 

처리 방법

1. 행제거

  이상치가 전체 데이터에 비해 많지 않을 경우 행 제거를 고려해볼 수 있다.

 

2. 치환

  • 결측값으로 바꾼 후 결측값 처리 진행
  • IQR 경계선으로 치환
# np.clip을 활용한 하한선, 상한선 치환(최대/최솟값 제한)
col = wine['color_intensity'].values
col = np.clip(col, lower_whis, upper_whis)
wine['color_intensity'] = col

wine.loc[outliers_idx, ['color_intensity']]

반응형