반응형
이상치(Outlier)는 데이터 분석과 머신러닝 모델링에서 중요한 요소 중 하나입니다. 이상치를 적절히 처리하지 않으면 분석 결과가 왜곡되거나 모델 성능이 저하될 수 있습니다. 파이썬(Python)에서는 Pandas, Numpy, Scikit-learn 등의 라이브러리를 활용하여 이상치를 탐지하고 처리할 수 있습니다. 이 글에서는 이상치 탐지 기법(사분위범위, 표준편차, 머신러닝 기반 탐지)과 처리 방법(제거, 대체, 변환)에 대해 설명합니다.
1. 이상치란? 왜 중요한가?
이상치(Outlier)란?
이상치는 데이터에서 일반적인 패턴과 동떨어진 값을 의미합니다. 예를 들어, 직원들의 평균 월급이 300만 원인데 특정 직원의 월급이 1억 원이라면 이는 이상치로 간주될 수 있습니다.
이상치가 분석에 미치는 영향
- 통계 분석 왜곡: 평균, 표준편차 등에 큰 영향을 미쳐 데이터 분석 결과를 왜곡할 수 있음
- 머신러닝 모델 성능 저하: 이상치가 있으면 모델이 잘못된 패턴을 학습할 수 있음
- 거리 기반 알고리즘(KNN, SVM 등)에 악영향: 이상치가 있으면 거리 계산이 왜곡됨
2. 이상치 탐지 방법
1) 사분위 범위(IQR, Interquartile Range) 이용
import pandas as pd
data = {'salary': [2500, 2700, 3000, 3200, 3500, 4000, 15000]}
df = pd.DataFrame(data)
Q1 = df['salary'].quantile(0.25)
Q3 = df['salary'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['salary'] < lower_bound) | (df['salary'] > upper_bound)]
print(outliers)
2) 표준편차를 확인하여 (Z-score) 사용
import numpy as np
df['z_score'] = (df['salary'] - df['salary'].mean()) / df['salary'].std()
outliers = df[df['z_score'].abs() > 3]
print(outliers)
3. 이상치 처리 방법
1) 이상치는 사전에 제거해야함.
df = df[(df['salary'] >= lower_bound) & (df['salary'] <= upper_bound)]
2) 이상치를 평균이나 중앙값으로 대체
df.loc[df['salary'] > upper_bound, 'salary'] = df['salary'].median()
3) 로그 변환(Log Transformation)
df['salary_log'] = np.log1p(df['salary'])
결론: 이상치를 정확히 확인하고 가공해야 합니다.
방법 | 특징 | 사용 시기 |
---|---|---|
IQR(사분위 범위) | 1.5IQR 범위를 벗어난 값을 이상치로 탐지 | 데이터가 정규분포가 아닐 때 |
Z-score(표준편차) | 평균과 표준편차를 기준으로 이상치 탐지 | 데이터가 정규분포를 따를 때 |
Isolation Forest | 머신러닝을 이용해 이상치 탐지 | 복잡한 데이터에서 자동 탐지가 필요할 때 |
이상치 제거 | 이상치를 데이터에서 삭제 | 데이터 손실이 크지 않을 때 |
대체 (평균, 중앙값) | 이상치를 평균, 중앙값 등으로 대체 | 데이터 손실을 줄이고 싶을 때 |
로그 변환 | 이상치의 영향을 줄이기 위해 로그 스케일 적용 | 이상치 크기가 너무 클 때 |
이상치 처리는 데이터 분석과 머신러닝 성능을 개선하는 중요한 과정입니다. 이상치가 데이터 안에 남아있다면 제대로 된 통계적 측정을 할 수 없습니다. 이상치가 데이터들을 왜곡할 확률이 높기 때문입니다.
파이썬으로 다양한 데이터들을 크롤링하고 가공할 수 있지만 이상치 제거가 되지 않은 데이터들은 신뢰성을 가질 수 없습니다. 입력되는 데이터가 맞지 않는다면 당연하게도 결과 또한 맞지 않을 확률이 높습니다. 따라서 우리는 이상치를 핸들링하는 방법을 충분히 익히고 학습하는 과정이 필요합니다. 처음에 조금 어려울 수 있지만 반드시 필요하는 과정으로 여러분들께서도 한번 학습해보시길 바랍니다.
Pandas, Numpy, Scikit-learn을 활용하여 이상치를 탐지하고 적절히 처리하여 신뢰성 높은 데이터를 확보하세요!
반응형