[인공지능][기초] 049. 이상치 탐지용 Isolation Forest 사용법
이상치(Outlier)는 데이터 분석과 머신러닝에서 중요한 이슈입니다. 이상치는 대부분의 데이터와 동떨어진 극단적인 값을 말하며, 모델 성능에 악영향을 주거나 중요한 이벤트를 의미할 수도 있습니다.
이상치를 감지하는 다양한 알고리즘 중에서 Isolation Forest는 효율적이면서도 직관적인 이상치 탐지 기법으로 많이 사용됩니다. 본 글에서는 Isolation Forest의 원리와 실전 적용 방법을 소개하겠습니다.
● Isolation Forest란?
Isolation Forest는 '격리 기반' 이상치 탐지 알고리즘입니다. 일반적인 군집이나 밀도 기반 방식과 달리, 데이터를 나누는 과정을 통해 이상치를 빠르게 분리할 수 있다는 아이디어에 기반합니다.
이 알고리즘은 다수의 랜덤한 결정 트리(무작위 분할 트리)를 만들어, 각 데이터 포인트가 분리(isolate)되기까지 걸리는 평균 경로 길이를 측정합니다. 이상치는 상대적으로 빨리 분리되므로 짧은 경로 길이를 가지게 됩니다.
● 주요 특징
- 비지도 학습 방식 (라벨 없이도 이상치 탐지 가능)
- 고차원 데이터에도 효과적으로 적용 가능
- 대용량 데이터에 대해 빠른 탐지가 가능함
- 스케일링 없이 사용 가능 (단, 정규화하면 성능 향상 가능)
● 실전 코드 예제 (사이킷런)
from sklearn.ensemble import IsolationForest
import numpy as np
import pandas as pd
# 예시 데이터 생성
rng = np.random.RandomState(42)
normal_data = 0.3 * rng.randn(100, 2)
outlier_data = rng.uniform(low=-4, high=4, size=(10, 2))
data = np.vstack([normal_data, outlier_data])
df = pd.DataFrame(data, columns=["x", "y"])
# 모델 정의 및 학습
clf = IsolationForest(contamination=0.1, random_state=42)
clf.fit(df)
# 예측 (1: 정상, -1: 이상치)
df['pred'] = clf.predict(df)
df['is_outlier'] = df['pred'] == -1
# 결과 출력
print(df.head())
위 코드에서는 정상 데이터와 이상치를 혼합한 후, Isolation Forest로 이상치를 분류합니다. `contamination` 파라미터는 이상치 비율을 의미합니다.
● 결과 해석 및 시각화
Isolation Forest의 예측 결과는 1 또는 -1로 표시되며, -1은 이상치로 판단된 데이터입니다. 이를 바탕으로 시각화를 통해 분포를 살펴볼 수 있습니다.
import matplotlib.pyplot as plt
plt.scatter(df['x'], df['y'], c=df['is_outlier'], cmap='coolwarm')
plt.title('Isolation Forest 결과')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
위 시각화에서는 이상치는 붉은 색으로 나타나며, 군집 외부에 위치한 점들이 잘 분리되는 것을 확인할 수 있습니다.
● 주의사항 및 활용 팁
- 이상치 비율(contamination)을 잘못 설정하면 정상값이 이상치로 분류될 수 있음
- 특성의 분포가 심하게 다른 경우, 정규화 후 적용하는 것이 더 좋을 수 있음
- 다차원 데이터에서도 잘 작동하므로 고차원 이상 탐지에 유리함
- 분류 문제 전처리 단계에서 이상치 제거용으로 활용 가능
● 마무리
Isolation Forest는 빠르고 효과적인 이상치 탐지 방법으로, 복잡한 사전 지식 없이도 적용할 수 있는 점이 강점입니다. 특히 대규모 데이터셋에서 효율적으로 작동하며, 불균형하거나 잡음이 많은 데이터에서도 뛰어난 성능을 보입니다.
실제 프로젝트에서는 이상치가 중요한 패턴일 수도 있기 때문에, 단순히 제거하기보다는 도메인 지식과 함께 분석하는 것이 바람직합니다.