머신러닝

머신러닝 이상치(Outliers)의 정의와 처리

move84 2025. 4. 12. 10:09
반응형

머신러닝에서 이상치는 일반적인 데이터 패턴에서 벗어난 값으로, 모델의 성능에 큰 영향을 미칠 수 있다. 따라서 이상치를 식별하고 적절하게 처리하는 것은 매우 중요하다. 이 글에서는 이상치의 정의, 탐지 방법, 그리고 처리 방법에 대해 자세히 알아본다.


🤔 이상치(Outliers)란 무엇인가?

이상치(Outliers)는 데이터 세트 내에서 다른 값들과 현저하게 다른 값을 의미한다. 이러한 값들은 측정 오류, 데이터 입력 오류, 또는 실제 현상의 예외적인 경우로 인해 발생할 수 있다. 이상치는 통계 분석 및 머신러닝 모델의 정확성과 신뢰성을 저해할 수 있으므로, 데이터 분석 과정에서 주의 깊게 다뤄야 한다.

  • 정의 (Definition): 데이터 세트에서 다른 관측치들과 멀리 떨어진 값.
  • 원인 (Causes): 측정 오류, 데이터 입력 오류, 실제 예외적인 경우.
  • 영향 (Impact): 모델 성능 저하, 통계 분석 왜곡.

이상치는 단변량 데이터에서는 특정 값 하나가 극단적으로 크거나 작은 경우로 나타날 수 있으며, 다변량 데이터에서는 변수 간의 관계에서 벗어난 값으로 나타날 수 있다. 예를 들어, 사람들의 연령 데이터에서 200세와 같은 값은 명백한 이상치이다.


📊 이상치 탐지 방법

이상치를 탐지하는 방법은 여러 가지가 있으며, 데이터의 특성과 분석 목적에 따라 적절한 방법을 선택해야 한다. 주요 이상치 탐지 방법은 다음과 같다.

  1. 통계적 방법 (Statistical Methods):
    • Z-점수 (Z-score): 각 데이터 포인트가 평균에서 얼마나 떨어져 있는지를 표준편차의 배수로 나타낸다. 일반적으로 Z-점수가 특정 임계값(예: 3)을 넘으면 이상치로 간주한다.
    • 사분위수 범위 (IQR: Interquartile Range): 데이터의 1사분위수(Q1)와 3사분위수(Q3) 사이의 범위. 이상치는 Q1 - 1.5 * IQR보다 작거나 Q3 + 1.5 * IQR보다 큰 값으로 정의된다.
  2. 시각화 방법 (Visualization Methods):
    • 박스 플롯 (Box Plot): 데이터의 사분위수와 이상치를 시각적으로 표현한다. 박스 플롯에서 박스 바깥에 점으로 표시되는 값들이 이상치에 해당한다.
    • 산점도 (Scatter Plot): 두 변수 간의 관계를 시각적으로 나타낸다. 산점도에서 다른 데이터 포인트들과 멀리 떨어진 점들이 이상치일 가능성이 높다.
  3. 머신러닝 기반 방법 (Machine Learning-Based Methods):
    • Isolation Forest: 데이터를 분리하는 데 필요한 분할 횟수를 기반으로 이상치를 탐지한다. 이상치는 적은 횟수로 분리될 가능성이 높다.
    • One-Class SVM: 정상 데이터의 분포를 학습하고, 이 분포에서 벗어난 데이터를 이상치로 간주한다.
    • LOF (Local Outlier Factor): 각 데이터 포인트의 local density를 추정하여 이상치를 탐지한다. 밀도가 낮은 영역에 있는 데이터 포인트는 이상치일 가능성이 높다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

# Sample data
data = pd.DataFrame({'value': [10, 12, 15, 11, 13, 16, 14, 100]})

# Z-score method
data['z_score'] = np.abs((data['value'] - data['value'].mean()) / data['value'].std())
print("Z-score: ", data)

# IQR method
Q1 = data['value'].quantile(0.25)
Q3 = data['value'].quantile(0.75)
IQR = Q3 - Q1
outlier_threshold_lower = Q1 - 1.5 * IQR
outlier_threshold_upper = Q3 + 1.5 * IQR
print("IQR: ", IQR)
print("Lower Threshold: ", outlier_threshold_lower)
print("Upper Threshold: ", outlier_threshold_upper)

# Isolation Forest
model = IsolationForest(n_estimators=100, contamination='auto')
model.fit(data[['value']])
data['scores'] = model.decision_function(data[['value']])
data['anomaly'] = model.predict(data[['value']])
print("Isolation Forest: ", data)

# Visualization
plt.boxplot(data['value'])
plt.title('Box Plot')
plt.show()

🛠️ 이상치 처리 방법

이상치를 탐지한 후에는 적절한 방법으로 처리해야 한다. 이상치 처리 방법은 데이터의 특성과 분석 목적에 따라 달라질 수 있으며, 주요 방법은 다음과 같다.

  1. 제거 (Removal):
    • 가장 간단한 방법은 이상치를 데이터 세트에서 제거하는 것이다. 그러나 이 방법은 데이터 손실을 초래할 수 있으므로, 데이터의 양이 충분하고 이상치의 원인이 명확한 경우에만 사용하는 것이 좋다.
  2. 대체 (Replacement):
    • 이상치를 다른 값으로 대체하는 방법이다. 예를 들어, 이상치를 평균값, 중앙값, 또는 가장 가까운 정상 값으로 대체할 수 있다.
    • Winsorizing: 특정 분위수(예: 5%, 95%)에 해당하는 값으로 이상치를 대체하는 방법이다.
  3. 변환 (Transformation):
    • 데이터의 분포를 변경하여 이상치의 영향을 줄이는 방법이다. 예를 들어, 로그 변환(log transformation)은 큰 값을 축소시키고 작은 값을 확대시켜 데이터의 분포를 정규 분포에 가깝게 만들어준다.
    • Box-Cox 변환: 데이터의 분산을 안정화시키고 정규성을 높이는 변환 방법이다.
  4. 별도 처리 (Separate Treatment):
    • 이상치를 별도의 그룹으로 분류하여 분석하는 방법이다. 이 방법은 이상치가 중요한 정보를 포함하고 있을 가능성이 있는 경우에 유용하다.
  5. Robust 모델 사용 (Using Robust Models):
    • 이상치에 덜 민감한 모델을 사용하는 방법이다. 예를 들어, Robust Regression은 이상치의 영향을 최소화하도록 설계된 회귀 모델이다.

📝 주의사항 및 고려사항

  • 도메인 지식 활용: 이상치 탐지 및 처리 시 도메인 지식을 활용하여 실제 비정상적인 값인지, 아니면 유효한 데이터인지 판단해야 한다.
  • 데이터 특성 고려: 데이터의 분포, 변수 간의 관계 등을 고려하여 적절한 이상치 탐지 및 처리 방법을 선택해야 한다.
  • 모델 성능 평가: 이상치 처리 후 모델의 성능을 평가하여 이상치 처리 방법이 모델 성능 향상에 기여하는지 확인해야 한다.
  • 데이터 손실 방지: 이상치를 무분별하게 제거하면 데이터 손실이 발생할 수 있으므로, 신중하게 결정해야 한다.

📚 핵심 용어 정리

  • 이상치 (Outlier): 정상적인 데이터 패턴에서 벗어난 값 (Value that deviates from the normal pattern).
  • Z-점수 (Z-score): 데이터 포인트가 평균에서 떨어진 정도 (How far a data point is from the mean).
  • 사분위수 범위 (IQR): 데이터의 1사분위수와 3사분위수 사이의 범위 (Range between the first and third quartiles).
  • Isolation Forest: 데이터를 분리하는 데 필요한 분할 횟수를 기반으로 이상치를 탐지하는 머신러닝 모델 (Machine learning model for outlier detection based on the number of splits needed to isolate data).
  • Winsorizing: 특정 분위수에 해당하는 값으로 이상치를 대체하는 방법 (Method of replacing outliers with values corresponding to specific percentiles).
  • 로그 변환 (Log Transformation): 데이터의 분포를 변경하여 이상치의 영향을 줄이는 변환 방법 (Transformation method to reduce the impact of outliers by changing the distribution of data).
반응형