데이터에서 ‘정상(normal) 패턴’과 크게 다른 행위를 보이는 특이한 패턴(이상, anomaly)을 찾는 기법
금융 사기
제조업
보안
이상치 탐지(Outlier Detection)는 단순히 통계적으로 극단값(Outlier)을 찾는 데 초점을 둔다. 예를 들어 평균에서 크게 벗어난 데이터 포인트를 찾는 방식
이상 탐지(Anomaly Detection)는 단순 극단값 뿐 아니라, 맥락(Context)이나 시계열 상의 패턴을 함께 고려하여 ‘비정상’인지를 판단하는 것을 의미하는 경우가 많다.
이제 대표적인 알고리즘을 알아보겠습니다. 각 알고리즘은 비지도학습(레이블이 없는 상황)에서 데이터의 분포/패턴을 학습하고, 그로부터 크게 벗어나는 포인트를 ‘이상’으로 간주합니다.
알고리즘 원리
특징
알고리즘 원리
특징
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 1. 데이터 로드: Iris 데이터셋
from sklearn.datasets import load_iris
data = load_iris()
X = data.data
y = data.target # 여기서는 실제 라벨을 이용하지 않음
# 간단히 2개 특성만 사용 (예: 꽃받침 길이, 꽃받침 너비) --> 시각화 편의를 위해
X_2d = X[:, :2] # shape: (150, 2)
# 2. One-Class SVM
from sklearn.svm import OneClassSVM
oc_svm = OneClassSVM(nu=0.05) # 예시 파라미터
oc_svm.fit(X_2d)
# 예측: 1(정상), -1(이상치)
y_pred_oc = oc_svm.predict(X_2d)
# 3. Isolation Forest
from sklearn.ensemble import IsolationForest
iso_forest = IsolationForest(contamination=0.05, random_state=42)
iso_forest.fit(X_2d)
# 예측: 1(정상), -1(이상치)
y_pred_if = iso_forest.predict(X_2d)
# 4. 이상치로 예측된 샘플 인덱스 추출
outliers_oc = np.where(y_pred_oc == -1)[0] # One-Class SVM이 예측한 이상치
outliers_if = np.where(y_pred_if == -1)[0] # Isolation Forest가 예측한 이상치
print("=== One-Class SVM ===")
print("이상치로 탐지된 샘플 개수:", len(outliers_oc))
print("이상치 인덱스:", outliers_oc)
print("\n=== Isolation Forest ===")
print("이상치로 탐지된 샘플 개수:", len(outliers_if))
print("이상치 인덱스:", outliers_if)
# 5. 시각화
# 2차원 특성 공간에서 이상치로 판별된 점들을 빨간색으로 표시
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].scatter(X_2d[:, 0], X_2d[:, 1], label='Normal')
axes[0].scatter(X_2d[outliers_oc, 0], X_2d[outliers_oc, 1],
color='red', edgecolors='k', label='Outliers')
axes[0].set_title("One-Class SVM")
axes[0].set_xlabel("Sepal Length")
axes[0].set_ylabel("Sepal Width")
axes[0].legend()
axes[1].scatter(X_2d[:, 0], X_2d[:, 1], label='Normal')
axes[1].scatter(X_2d[outliers_if, 0], X_2d[outliers_if, 1],
color='red', edgecolors='k', label='Outliers')
axes[1].set_title("Isolation Forest")
axes[1].set_xlabel("Sepal Length")
axes[1].set_ylabel("Sepal Width")
axes[1].legend()
plt.tight_layout()
plt.show()
카드 사기 거래(Fraud Detection)
돈세탁 의심 거래(Money Laundering)
- 고객의 거래 패턴(빈도, 금액, 거래처 등)을 종합적으로 분석하여, 비정상적으로 복잡한 자금 흐름을 포착.
설비 고장 예측
품질 이상 탐지
- 생산 공정 중 수집되는 다양한 품질 지표(크기, 무게, 색상 등)를 통해 갑작스러운 편차가 발생하는 제품을 빠르게 걸러내어 불량률을 줄임.
nu 파라미터를 적절히 설정하세요.contamination을 적절히 설정하세요.import numpy as np
import matplotlib.pyplot as plt
# 1. Wine 데이터셋 로드
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target
# 변수 2개만 선택 (예: 컬럼 0, 1)
X_2d = X[:, :2] # shape: (178, 2)
feature_names = [wine.feature_names[0], wine.feature_names[1]]import numpy as np
import matplotlib.pyplot as plt
# 1. Wine 데이터셋 로드
from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target
# 변수 2개만 선택 (예: 컬럼 0, 1)
X_2d = X[:, :2] # shape: (178, 2)
feature_names = [wine.feature_names[0], wine.feature_names[1]]
이상 탐지(Anomaly Detection)는 정상 패턴과 다른 데이터를 찾아내는 기법이다.
2️⃣이상치 탐지(Outlier Detection)와 유사하지만, 맥락과 패턴 학습 측면에서 조금 더 넓은 범위를 다룬다.
3️⃣대표 알고리즘
금융(카드 사기, 돈세탁)과 제조업(설비 고장 예측, 품질 관리) 등 다양한 분야에서 활용할 수 있다.