본문 바로가기
카테고리 없음

이상치 탐지 및 처리, 파이썬으로 쉽게 해결하기

by 가치정보인 2025. 3. 23.
반응형

이상치(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을 활용하여 이상치를 탐지하고 적절히 처리하여 신뢰성 높은 데이터를 확보하세요!

반응형