신규성 탐지

Python으로 설계하는 Machine Learning 워크플로

Dr. Chris Anagnostopoulos

Honorary Associate Professor

원클래스 분류

이상치가 없는 학습 데이터:

검은 점 두 클러스터.

이상치가 있는 미래/테스트 데이터:

검은 점 두 클러스터와 일부 고립된 점.

Python으로 설계하는 Machine Learning 워크플로

LoF 신규성

우회 방법

preds = lof().fit_predict(
   np.concatenate([X_train, X_test]))

preds = preds[X_train.shape[0]:]

두 개의 검은 점 클러스터와 일부 고립된 빨간 점.

LoF 신규성

clf = lof(novelty=True)

clf.fit(X_train) y_pred = clf.predict(X_test)

두 개의 검은 점 클러스터와 일부 고립된 빨간 점.

Python으로 설계하는 Machine Learning 워크플로

원클래스 서포트 벡터 머신

clf = OneClassSVM()

clf.fit(X_train) y_pred = clf.predict(X_test)
y_pred[:4]
array([ 1,  1,  1, -1])

일부 고립된 점이 있는 두 클러스터. 대부분의 점이 빨간색으로, 클러스터 내부와 고립된 점 모두 포함.

Python으로 설계하는 Machine Learning 워크플로

원클래스 서포트 벡터 머신

clf = OneClassSVM()
clf.fit(X_train)
y_scores = clf.score_samples(X_test)

threshold = np.quantile(y_scores, 0.1)
y_pred = y_scores <= threshold

두 개의 검은 점 클러스터와 일부 고립된 빨간 점.

Python으로 설계하는 Machine Learning 워크플로

아이솔레이션 포레스트

clf = IsolationForest()
clf.fit(X_train)
y_scores = clf.score_samples(X_test)
clf = LocalOutlierFactor(novelty=True)
clf.fit(X_train)
y_scores = clf.score_samples(X_test)

두 개의 검은 점 클러스터와 일부 고립된 빨간 점.

Python으로 설계하는 Machine Learning 워크플로
clf_lof = LocalOutlierFactor(novelty=True).fit(X_train)
clf_isf = IsolationForest().fit(X_train)
clf_svm = OneClassSVM().fit(X_train)
roc_auc_score(y_test, clf_lof.score_samples(X_test)
0.9897
roc_auc_score(y_test, clf_isf.score_samples(X_test))
0.9692
roc_auc_score(y_test, clf_svm.score_samples(X_test))
0.9948
Python으로 설계하는 Machine Learning 워크플로
clf_lof = LocalOutlierFactor(novelty=True).fit(X_train)
clf_isf = IsolationForest().fit(X_train)
clf_svm = OneClassSVM().fit(X_train)
accuracy_score(y_test, clf_lof.predict(X_test))
0.9318
accuracy_score(y_test, clf_isf.predict(X_test))
0.9545
accuracy_score(y_test, clf_svm.predict(X_test))
0.5
Python으로 설계하는 Machine Learning 워크플로

무엇이 달라졌나요?

Python으로 설계하는 Machine Learning 워크플로

Preparing Video For Download...