June is Combung
[KT AIVLE SCHOOL 3기] 이상탐지 본문
1. Anomaly Detection(이상탐지)
이상탐지(Anomaly Detection)는 일반적인 패턴에서 벗어난 이상한 데이터를 식별하는 것을 의미한다. 이상탐지는 보안, 제조, 의료, 금융 등 다양한 분야에서 활용되며, 데이터 분석에서 중요한 분야 중 하나이다.
이상탐지는 다음과 같은 방법으로 구현할 수 있다.
1. 데이터 이해
이상탐지를 위해 먼저 데이터를 이해해야 한다. 이상탐지는 데이터 분포를 파악하고, 이에 대한 이해를 바탕으로 이상 데이터를 식별하기 때문이다.
2. 변수 선택
이상탐지를 위해 변수를 선택해야 한다. 변수는 이상 데이터를 식별하는 데 중요한 역할을 한다. 변수를 선택할 때는 데이터 분포와 이상 데이터의 특성을 고려해야 한다.
3. 모델 선택
이상탐지 모델은 다양한 종류가 있다. 지도학습(Supervised Learning) 모델과 비지도학습(Unsupervised Learning) 모델이 있다. 대표적인 이상탐지 모델로는 One-class SVM, Isolation Forest, Local Outlier Factor 등이 있다.
4. 모델 훈련
선택한 이상탐지 모델을 훈련시킨다. 이상탐지 모델은 일반적인 머신러닝 모델과 마찬가지로 훈련 데이터로부터 학습하여, 새로운 데이터에 대한 예측을 수행한다.
5. 이상 데이터 식별
훈련된 모델을 사용하여 이상 데이터를 식별한다. 이상 데이터는 모델에서 예측값이 매우 작거나 큰 경우로 정의할 수 있다. 이상 데이터를 식별한 후, 추가적인 분석이 필요한 경우에는 해당 데이터를 검토하고, 문제를 파악하여 해결하는 등의 작업을 수행한다.
이상탐지는 데이터 분석에서 매우 중요한 분야이다. 이상탐지를 통해 데이터의 문제점을 빠르게 발견하고, 적절한 대응 방안을 수립하여 데이터의 신뢰성을 높일 수 있다.
2. Isolation Forest
Isolation Forest는 이상탐지(Anomaly Detection) 분야에서 사용되는 알고리즘이다. Isolation Forest는 데이터를 이상값과 정상값으로 분류하는 모델이다. 이상값은 적은 수의 데이터 포인트로 구성되어 있기 때문에, 이상값을 분리하기 위해 데이터의 균형을 깨는 분할 방법을 사용한다.
Isolation Forest의 작동 방식은 다음과 같다.
1. 특성(Feature) 선택
데이터에서 임의의 특성을 선택한다.
2. 임계치(Cut Point) 선택
특성에서 무작위로 값을 선택하고, 이 값을 기준으로 데이터를 두 그룹으로 분리한다.
3. 재귀적 분할
데이터의 두 그룹 중 하나에 대해 1번부터 2번 단계를 반복하여, 데이터가 하나의 데이터 포인트로 분리될 때까지 분할한다.
4. 이상값 식별
분할을 반복하다가, 이상값은 적은 수의 분할을 거쳐 분리될 가능성이 높다는 아이디어에 기반하여, 이상값은 적은 수의 분할을 거치고, 정상값은 많은 수의 분할을 거치게 된다. 이를 이용하여, 이상값을 식별한다.
Isolation Forest는 데이터를 무작위로 분할하여, 빠르고 효과적으로 이상값을 분리할 수 있다는 장점이 있다. 또한, Isolation Forest는 머신러닝 모델에서 사용할 수 있으며, 이상탐지 분야에서 널리 활용되고 있다.
Isolation Forest를 사용하여 이상값을 식별하는 예시 코드는 다음과 같다.
from sklearn.ensemble import IsolationForest
from sklearn.datasets import load_boston
# 데이터셋 로드
boston = load_boston()
# Isolation Forest 모델 생성 후 훈련
model = IsolationForest(n_estimators=100, max_samples='auto', contamination='auto', random_state=42)
model.fit(boston.data)
# 예측 결과 출력
pred = model.predict(boston.data)
print(pred)
위 코드는 보스턴 집값 데이터셋을 사용하여 Isolation Forest 모델을 생성하고, 훈련한 후, 예측 결과를 출력하는 코드이다. `IsolationForest()` 함수를 사용하여 Isolation Forest 모델을 생성하고, `fit()` 메서드를 사용하여 모델을 훈련한다. 이상값 여부를 판단하는 기준인 `contamination` 인자를 디폴트 값인 'auto'로 설정하면, 데이터셋에서 이상값의 비율에 따라 자동으로 설정된다.
마지막으로, `predict()` 메서드를 사용하여 데이터셋 전체에 대한 예측 결과를 출력한다. `pred` 변수에 저장된 값은 이상값인 경우 -1, 정상값인 경우 1로 표시된다.
Isolation Forest는 데이터셋의 특성에 따라 최적의 하이퍼파라미터를 찾아야 한다. 따라서, 훈련 전에 모델의 하이퍼파라미터를 조정하는 작업이 필요하다.
3. One-class SVM
One-class SVM(One-class Support Vector Machine)은 지도학습(Supervised Learning)에서 사용되는 SVM(Support Vector Machine) 알고리즘의 한 종류이다. One-class SVM은 데이터셋에서 이상한 데이터를 식별하는 데 사용된다. SVM은 데이터를 분리하는 초평면(Hyperplane)을 찾는 알고리즘이며, One-class SVM은 데이터셋 내에 이상 데이터가 매우 적은 경우에 사용한다.
One-class SVM은 다음과 같은 방법으로 동작한다.
1. 초평면(Hyperplane) 선택
One-class SVM은 데이터셋에서 이상값이 아닌 정상 데이터만으로 구성된 데이터셋에서 학습된다. 이를 바탕으로 SVM은 초평면을 선택한다.
2. 결정 경계 설정
SVM은 초평면을 사용하여 데이터를 분류한다. One-class SVM은 이상값이 아닌 정상 데이터만으로 구성된 데이터셋에서 학습되었기 때문에, 초평면의 한쪽 영역에 대부분의 데이터가 위치하도록 결정 경계를 설정한다.
3. 이상 데이터 식별
결정 경계를 기준으로, 초평면에서 멀리 떨어진 데이터는 이상값으로 간주된다. 따라서, 이상 데이터는 초평면으로부터 일정 거리 이상 떨어진 데이터로 식별된다.
One-class SVM의 코드는 다음과 같이 구현할 수 있다.
from sklearn.svm import OneClassSVM
from sklearn.datasets import load_boston
# 데이터셋 로드
boston = load_boston()
# One-class SVM 모델 생성 후 훈련
model = OneClassSVM(nu=0.1, kernel='rbf', gamma=0.1)
model.fit(boston.data)
# 예측 결과 출력
pred = model.predict(boston.data)
print(pred)
위 코드는 보스턴 집값 데이터셋을 사용하여 One-class SVM 모델을 생성하고, 훈련한 후, 예측 결과를 출력하는 코드이다. `OneClassSVM()` 함수를 사용하여 One-class SVM 모델을 생성하고, `fit()` 메서드를 사용하여 모델을 훈련한다. `nu`, `kernel`, `gamma` 등의 하이퍼파라미터를 조정하여 최적의 모델을 찾는다.
마지막으로, `predict()` 메서드를 사용하여 데이터셋 전체에 대한 예측 결과를 출력한다. `pred` 변수에 저장된 값은 이상값인 경우 -1, 정상값인 경우 1로 표시된다.
4. Local Outlier Factor(LOF)
Local Outlier Factor(LOF)는 이상탐지(Anomaly Detection) 분야에서 사용되는 비지도학습(Unsupervised Learning) 알고리즘이다. LOF는 데이터 포인트의 군집(Cluster)을 파악하여, 군집에서 멀리 떨어진 데이터를 이상 데이터로 식별하는 방법이다.
LOF의 작동 방식은 다음과 같다.
1. k-최근접 이웃(k-Nearest Neighbors) 결정
각 데이터 포인트에서 가장 가까운 k개의 이웃 데이터 포인트를 선택한다.
2. 이웃 밀도(Neighborhood Density) 결정
각 데이터 포인트의 k개의 이웃 데이터 포인트에 대한 이웃 밀도를 결정한다.
3. 군집(Cluster) 식별
이웃 밀도를 바탕으로 군집을 식별한다. 군집은 이웃 밀도가 높은 데이터 포인트들의 집합으로 정의된다.
4. LOF 계산
각 데이터 포인트의 LOF(Local Outlier Factor) 값을 계산한다. LOF 값은 해당 데이터 포인트의 이웃 데이터 포인트들이 속한 군집의 이웃 밀도를 해당 데이터 포인트의 이웃 밀도로 나눈 값이다.
5. 이상 데이터 식별
LOF 값이 일정 기준값을 초과하는 데이터 포인트는 이상 데이터로 식별된다.
LOF의 코드는 다음과 같이 구현할 수 있다.
from sklearn.neighbors import LocalOutlierFactor
from sklearn.datasets import load_boston
# 데이터셋 로드
boston = load_boston()
# LOF 모델 생성 후 훈련
model = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
pred = model.fit_predict(boston.data)
# 예측 결과 출력
print(pred)
위 코드는 보스턴 집값 데이터셋을 사용하여 LOF 모델을 생성하고, 훈련한 후, 예측 결과를 출력하는 코드이다. `LocalOutlierFactor()` 함수를 사용하여 LOF 모델을 생성하고, `fit_predict()` 메서드를 사용하여 모델을 훈련하고 예측 결과를 출력한다. `n_neighbors` 인자는 이웃의 수를 결정하고, `contamination` 인자는 이상값의 비율을 결정한다.
LOF는 데이터 포인트 간의 거리를 계산하는 데 시간이 많이 소요되므로, 대규모 데이터셋에서는 계산 시간이 길어질 수 있다. 따라서, 대규모 데이터셋에서는 다른 이상탐지 알고리즘을 사용하는 것이 좋다.
'KT AIVLE SCHOOL 기자단 > 강의' 카테고리의 다른 글
[KT AIVLE SCHOOL 3기] 언어지능 딥러닝(1) (2) | 2023.04.25 |
---|---|
[KT AIVLE SCHOOL 3기] 시각지능 딥러닝 (0) | 2023.04.25 |
[KT AIVLE SCHOOL 3기] AI모델 해석평가 (0) | 2023.04.25 |
[KT AIVLE SCHOOL 3기] 딥러닝(2) (0) | 2023.04.24 |
[KT AIVLE SCHOOL 3기] 딥러닝(1) (0) | 2023.04.24 |