Anomaly Detection - 이상탐지

이상탐지에는 오토인코더, PCA를 비롯한 다양한 방법론이 있고 최근에는 AutoML로도 탐지 할 수 있지만 이번에 알아 보고자 하는 내용은 쉽게 알 수 있는 비지도 학습의 K means clustering이다.먼저 Kmeans clustering에 대하여 알아 보자. 

1. Kmeans Clustering이란

- Kmeans clustering은 말 그대로 데이터가 모인 라벨을 찾아 내는 알고리즘이다. 단, 비지도 학습으로 데이터에 라벨이 없을 때 해당 라벨을 찾아내는 알고리즘이다. 즉, X → Y' 최적화하는 딥러닝 지도 학습이 아니고 라벨을 모를 때 

1,2,3,4,5 →  A 클러스터

10,20,30,40,50 → B 클러스터 

100, 101, 102, 103, 104 → C클러스터 

이런 방식으로 데이의 패턴을 보고 먼저 학습을 하는 것이다. 그러면 그룹을 할당할 수 있고 해당 그룹에는 중심점이 있다. 예를 들면 1,2,3,4,5에서는 3이 중심점이다. 

이상으로 K means clustering의 설명을 마치겠다. 장단점은 다른 곳에도 설명이 잘 나와 있으니(예. 장점은 구현이 쉽고 단점은 이상치에 변동을 많이 받는 등) 해당 블로그나 논문을 참조하면 될 것이고 이번에는 코드의 구현을 참조 하도록 한다.

2. Kmeans clustering 코드 

2.1 라이브러리 임포트

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

2.2 클러스터 개수 설정 및 데이터 예측

kmeans = KMeans(n_clusters=3, random_state=42)
data['Cluster'] = kmeans.fit_predict(data)

임의로 클러스터의 개수를 설정해주고 데이터를 예측해 준다.(초간단)

2.3 제대로 계산히 되었는 지 검증하기 위해 중심위치와 중심사이즈 계산

 
# Calculating cluster centers
cluster_centers = pd.DataFrame(kmeans.cluster_centers_, columns=data.columns[:-1])
# Calculating cluster sizes
cluster_sizes = data['Cluster'].value_counts().rename('Size').to_frame()

# Printing cluster centers and sizes
print("Cluster Centers:\n", cluster_centers)
print("\nCluster Sizes:\n", cluster_sizes)

 

2.4 시각화(Optional)

plt.scatter(data['LVDT'], data['TEMPERATURE'], c=data['Cluster'], cmap='viridis')
plt.xlabel('LVDT')
plt.ylabel('TEMPERATURE')
plt.title('Cluster Visualization')
plt.show()

모든 값이 0과 1이므로 다음과 같이 나오는 것이 정상

2.5 Scipy의 zscore를 통해 통계적으로 outlier를 계산하여 이상데이터를 계산 

- Zscore: 99.7 %의 값이 Z의 값에 있어야 한다는 것. 그렇지 않으면 이상치로 간주. 

- 이러한 이론에 따라서 다음과 같은 코드를 작성

from scipy.stats import zscore
# Calculating the Z-score for the 'Pump' column
data['Pump_Zscore'] = zscore(data['Pump'])
# Identifying outliers (e.g., using a threshold of 3)
outliers_z = data[abs(data['Pump_Zscore']) > 3]
print("Outliers usi - 이러한 이론에 따라서 다음과 같은 코드를 작성 ng Z-score method:\n", outliers_z)

-3 < Z < 3 사이에 있지 않은 값은 이상 값으로 간주

- 다른 탐지 기술도 그렇지만 실제로 적용 시에는 도메인 지식을 사용하고 회의를 해야 함. 

- 본 예제에서는 다음과 같은 결과 값이 나옴

 

다음에는 오토인코더를 통한 이상탐지를 다뤄보도록한다. 

+ Recent posts