이상탐지: 일반적인 값과 다른 특이한 값(outlier)이나 드문 사건을 탐지하는 기법
문제 유형은 지도 학습이나 학습 방법은 비지도 학습의 형태이다. (모델 평가를 위해 Label이 필요하다.)
평가 지표: F1-score
Isolation Forest: 랜덤하게 feature를 선정하고, 랜덤하게 split 기준을 삼아 Tree를 생성
- 훈련 셋으로 부터 256개 이상 데이터 샘플링
- 정상 데이터 depth가 길다. / 비정상 데이터 depth가 짧다.
- 경로의 길이를 점수화(Scoring)하여 1에 가까울 수록 Abnormal
- 파라미터
✓n_estimators: 하나의 데이터를 고립시키기 위해 생성하는 tree의 개수 / Default : 100
✓max_samples: Default : 256
✓contamination: Score 계산 후, 이상치로 간주할 비율(0.5 보다 작아야 함)
# contamination
# 높으면: 정상 간주 영역이 좁아진다, 확실한 정상만 보겠다. > 조금이라도 의심되면 비정상
# 낮으면: 정상 간주 영역이 넓어짐 왠만하면 다 정상으로 받아주어라. > 확실히 고장이면 고장
model = IsolationForest(contamination = 0.1, n_estimators = 50 )
model.fit(X1)
pred = model.predict(x_val)
# 분류 결과 평가
print(confusion_matrix(y_val, pred))
print(classification_report(y_val, pred))
범위를 이동하며 F1_score를 저장하고 시각화
result = []
conts = np.linspace(0.01, 0.5, 100)
for c in conts:
model = IsolationForest(contamination=c, random_state=20)
model.fit(x_train)
pred = model.predict(x_val)
pred = np.where(pred==1, 0, 1)
result.append(f1_score(y_val, pred))
print(round(max(result),3), round(conts[np.argmax(result)], 3) )
plt.plot(conts, result, marker = '.')
plt.grid()
plt.show()