일반적인 값과 다른 특이값이나 드문 사건을 탐지하는 기법이다.
특징
•
지도 학습의 특성을 갖는다.
◦
정상(normal) 과 비정상(abnormal) 을 평가할 수 있어야 해서 y(label)이 필요
•
비지도 학습의 특성을 갖는다.
◦
비정상 데이터가 일반적으로 매우 부족하기 때문에 정상 데이터를 가지고 어디까지가 정상인지 추정한다.
•
보통 모델의 성능이 높지 않다.
◦
재현율과 정밀도의 조화 평균인 f1 score 를 평가지표로 많이 사용한다.
이상탐지 플로우
•
abnormal 이 그렇게 적지 않다면
◦
classification 문제로 가기 → Class Imbalance 해결하기
•
abnormal 이 매우 적다면
◦
anomaly detection 문제로 가기 → Isolation Forest
1. 이상탐지 모델 - Isolation Forest
1-1. 절차
다음의 절차로 normal 과 abnormal 을 구분한다.
1.
Train set으로부터 데이터를 샘플링한다.
a.
샘플링개수는 256개(default) 정도면 충분하다고 알려짐
2.
Isolation Tree 만든다.
a.
랜덤하게 feature를 선정하고, 랜덤하게 split기준을 삼아 Tree를 생성(규제 X)
b.
정상 데이터일수록 Isolation시키려면 많은 split이 필요 → depth가 커짐
c.
비정상 데이터일수록 Isolation시키는게 쉬움 → depth가 작아짐
3.
Scoring으로 정상과 비정상을 구분한다.
1-3. 구현방식
•
샘플링된 데이터에서 각각의 tree를 생성할때마다 개별 데이터 포인트들의 깊이가 생성된다.
•
생성된 깊이들의 평균 Depth 를 구했을 때 depth가 매우 작다면 이상치일 확률이 높아진다.
1-4. Scoring
어디까지가 normal 인가?
•
depth 를 점수화해서 1에 가까울수록 abnormal
1-5. hyper parameter
•
n_estimators
◦
생성할 tree 개수
◦
default = 100
•
max_samples
◦
default = 256
•
contamination
◦
Score 계산 후, 이상치로 간주할 비율(0.5 보다 작아야 함)
◦
시작할 때 학습데이터의 abnormal 비율로부터 시작
▪
y_train.value_counts(normalize=True) 확인 가능
1-6. 모델링 절차
1.
Contamination 조정
2.
Validation 예측 및 성능 평가
3.
Score 계산 및 최적의 cut-off 찾기
a.
x_val로 모델 생성 후 스코어 산출
b.
cut-off를 조금씩 조절하면서 F1을 최대화하는 cut-off 찾기
4.
하이퍼 파라미터 튜닝
a.
n_estimators, max_samples 각각 조절하면서 튜닝
b.
단, for loop 사용해야 함
1-6-1. Contamination 조정
# contamination=0.06, max_samples=256 지정하고 모델 생성
model = IsolationForest(contamination=0.06, max_samples=256)
# 비지도 학습
model.fit(x_train)
# 예측
pred = model.predict(x_val) # normal = 1, abnormal = -1
# 예측 결과를 Isolation Scoring 에 맞게 변환 : abnormal = 1
pred = np.where(pred == 1, 0, 1)
Python
복사