이상치 탐지
Anomaly Detection
정상 패턴에서 벗어난 데이터 식별. 사기 탐지, 장애 감지.
Anomaly Detection
정상 패턴에서 벗어난 데이터 식별. 사기 탐지, 장애 감지.
이상치 탐지(Anomaly Detection)는 데이터셋에서 대다수의 정상 패턴과 현저히 다른 관측치를 자동으로 식별하는 머신러닝 기법입니다. 사기 거래 탐지, 네트워크 침입 감지, 제조 공정 불량 검출, 의료 이상 진단 등 다양한 분야에서 핵심적인 역할을 합니다. 이상치는 전체 데이터의 1% 미만인 경우가 많아 극단적인 클래스 불균형 문제를 다루는 기술이 필요합니다.
이상치 탐지 기법은 크게 세 가지로 분류됩니다: (1) 비지도 학습 - 정상 데이터만으로 학습하여 정상 분포에서 벗어난 점을 탐지(Isolation Forest, One-Class SVM, Autoencoder), (2) 지도 학습 - 이상/정상 레이블이 있는 데이터로 분류기 학습, (3) 반지도 학습 - 정상 데이터로 먼저 학습 후 새 데이터의 이상 여부 판단. 실무에서는 레이블 획득이 어려워 비지도/반지도 방식이 주로 사용됩니다.
현대 이상치 탐지 시스템의 핵심 알고리즘 중 Isolation Forest는 이상치가 정상 데이터보다 "고립되기 쉽다"는 점을 활용합니다. 랜덤 분할을 반복할 때 이상치는 더 적은 분할로 고립되므로, 평균 경로 길이가 짧은 점을 이상치로 판정합니다. O(n log n) 시간복잡도로 대규모 데이터에도 효율적이며, scikit-learn에서 바로 사용할 수 있습니다.
실무에서 이상치 탐지 시스템 구축 시 가장 큰 도전은 평가입니다. 이상치가 극소수라 정확도(Accuracy)는 무의미하고, Precision-Recall AUC나 F1-score를 사용해야 합니다. 2024-2025년 트렌드는 딥러닝 기반 방법(VAE, Transformer Autoencoder)과 시계열 특화 모델(LSTM-AE, Temporal Fusion Transformer)이며, AWS Lookout, Azure Anomaly Detector 같은 관리형 서비스도 인기입니다.
# 이상치 탐지 실전 예제: Isolation Forest + Autoencoder
# pip install scikit-learn torch numpy pandas
import numpy as np
import pandas as pd
from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, precision_recall_curve, auc
# 1. Isolation Forest - 가장 널리 사용되는 방법
def isolation_forest_detection(X_train, X_test, contamination=0.01):
"""
contamination: 예상 이상치 비율 (기본 1%)
"""
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 모델 학습 (정상 데이터로만)
iso_forest = IsolationForest(
n_estimators=100,
contamination=contamination,
random_state=42,
n_jobs=-1
)
iso_forest.fit(X_train_scaled)
# 예측: -1=이상치, 1=정상
predictions = iso_forest.predict(X_test_scaled)
# 이상치 점수 (낮을수록 이상치)
scores = iso_forest.decision_function(X_test_scaled)
return predictions, scores
# 2. PyTorch Autoencoder 기반 이상치 탐지
import torch
import torch.nn as nn
class AnomalyAutoencoder(nn.Module):
def __init__(self, input_dim, latent_dim=8):
super().__init__()
self.encoder = nn.Sequential(
nn.Linear(input_dim, 64),
nn.ReLU(),
nn.Linear(64, 32),
nn.ReLU(),
nn.Linear(32, latent_dim)
)
self.decoder = nn.Sequential(
nn.Linear(latent_dim, 32),
nn.ReLU(),
nn.Linear(32, 64),
nn.ReLU(),
nn.Linear(64, input_dim)
)
def forward(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return decoded
def detect_anomalies(self, x, threshold):
"""재구성 오차가 threshold를 넘으면 이상치"""
with torch.no_grad():
reconstructed = self.forward(x)
mse = ((x - reconstructed) ** 2).mean(dim=1)
return mse > threshold, mse
# 실행 예시
if __name__ == "__main__":
# 샘플 데이터 생성
np.random.seed(42)
normal_data = np.random.randn(1000, 10) # 정상 데이터
anomaly_data = np.random.randn(20, 10) + 5 # 이상치
X_train = normal_data[:800]
X_test = np.vstack([normal_data[800:], anomaly_data])
y_test = np.array([0]*200 + [1]*20) # 0=정상, 1=이상
# Isolation Forest 실행
preds, scores = isolation_forest_detection(X_train, X_test)
preds_binary = (preds == -1).astype(int)
print("=== Isolation Forest 결과 ===")
print(classification_report(y_test, preds_binary,
target_names=['정상', '이상치']))
| 알고리즘/서비스 | 장점 | 단점 | 추천 상황 |
|---|---|---|---|
| Isolation Forest | 빠름, 해석 용이 | 고차원에서 성능 저하 | 정형 데이터, 빠른 배포 |
| Autoencoder | 복잡한 패턴 학습 | 튜닝 필요, 느림 | 이미지, 시계열 |
| One-Class SVM | 소규모 데이터에 효과적 | 대규모 데이터에 느림 | 데이터 적을 때 |
| AWS Lookout for Metrics | 관리형, 자동화 | 비용 ($0.75/1K 데이터포인트) | AWS 환경, 빠른 구축 |
| Azure Anomaly Detector | 시계열 특화, 간편 | $0.157/1K 호출 | Azure 환경, 시계열 |
* 2025년 1월 기준 가격 및 특성
"사기 탐지에서 정확도 99%는 의미없습니다. 사기 거래가 0.1%밖에 안 되니까요. Precision-Recall AUC로 평가해야 하고, 비즈니스 임팩트를 고려해서 임계값을 조정해야 합니다. 오탐(False Positive)이 많으면 고객 불만이 늘고, 미탐(False Negative)이 많으면 실제 사기를 놓칩니다."
"Isolation Forest는 이상치가 '고립되기 쉽다'는 가정에 기반합니다. 랜덤 특성과 분할점을 선택해 데이터를 재귀적으로 분할할 때, 이상치는 더 적은 분할로 고립됩니다. 평균 경로 길이(average path length)가 짧으면 이상치로 판정하며, 시간복잡도는 O(n log n)으로 대규모 데이터에도 효율적입니다."
"시계열 이상치 탐지는 정적 방법과 다릅니다. 계절성, 트렌드, 주기성을 고려해야 해서 LSTM Autoencoder나 Transformer 기반 모델이 효과적이에요. 최근에는 Temporal Fusion Transformer나 N-BEATS 같은 최신 아키텍처도 많이 사용됩니다."
이상치가 1%면 "모두 정상"으로 예측해도 99% 정확도입니다. Precision, Recall, F1-score, PR-AUC를 사용하세요.
Isolation Forest의 contamination은 예상 이상치 비율인데, 실제 데이터와 맞지 않으면 성능이 급락합니다. 도메인 지식이나 사전 분석으로 추정하세요.
이상치 탐지 모델은 배포 후에도 지속적인 피드백이 필요합니다. 탐지된 이상치를 전문가가 검토하고, 오탐/미탐 케이스를 수집해 모델을 개선하는 MLOps 파이프라인을 구축하세요.