머신러닝에서 이상치를 제거해야 예측성능을 높일 수 있습니다.
예를 들어 몇년치 자전거 이용 수요를 예측하는데 어떤 하루가 자전거 대회가 열렸던 날이라면
그 날을 제거하고 모델을 테스트하는게 타당합니다. 한 이상치로 인해 다양한 예측지표나 계산값에
악영향을 미치기 때문입니다.
이상치 제거로 자주 쓰이는 방법은 IQR 방식입니다.
IQR은 사분위 값의 편차를 이용하여 이상치를 걸러내는 방법입니다.
'사분위' 란 전체 데이터를 정렬하여 이를 4등분합니다.
이 구간을 Q1(25%), Q2(50%), Q3(75%), Q4(100%) 라 하면
IQR는 Q3 - Q1 가 됩니다.
이제 IQR에 가중치 w를 곱하여 일반적인 데이터의 최대와 최소 범위를 정해줍니다.
주로 w=1.5를 사용하며, 일반적인 최댓값을 Q3+IQR*w 까지로 간주하고 그 이상은 이상치로 봅니다.
마찬가지로 일반적인 최솟값을 Q1-IQR*w까지로 간주하고 그 이하는 이상치로 봅니다.
이상치를 제거하는 함수는 따로 sklearn에서 제공하지 않습니다. 함수를 간단하게 만들어봅시다.
def get_outlier(df=None, column=None, weight=1.5):
fraud=df[df['Class']==1][column]
q25=np.percentile(fraud.values, 25)
q75=np.percentile(fraud.values, 75)
IQR=q75-q25
IQR_weight=IQR*weight
lower, upper=q25-IQR_weight, q75+IQR_weight
outlier_idx=fraud[fraud<lower|fraud>upper].index
return outlier_idx
fraud라는 변수는 이상치를 알아볼 데이터입니다.
numpy의 percentile함수는 사분위 값을 제공합니다.
IQR을 구하고 가중치를 곱하여 lower,upper을 만들어 이를 넘는 값들은 불리언 인덱싱으로
outlier_idx에 담아놓는 방식입니다.
이 함수의 리턴값을 axis=0으로 설정하여 drop하면 데이터에서 이 행들이 빠지게 됩니다.
'CS > 머신러닝' 카테고리의 다른 글
[PRML] 기초이론정리2(결정이론, 정보이론) (1) | 2023.07.02 |
---|---|
[PRML] 기초이론정리1(확률론) (0) | 2023.07.02 |
XGBoost, LightGBM 사용과 하이퍼파라미터 (0) | 2023.02.11 |
머신러닝 자주 쓰이는 함수 정리 (1) | 2023.02.05 |
Feature Engineering 정리 1 (1) | 2023.01.27 |
댓글