소개
새로운 관측치가 기존 관측치와 같은 분포에 속하는지, 아니면 다른 분포에 속하는지를 식별하는 기술인 신규성 및 이상치 탐지가 있습니다. 이러한 기술은 일반적으로 실제 데이터 세트를 정리하여 비정상적이거나 특이한 관측치를 식별하는 데 사용됩니다.
이 맥락에서 두 가지 중요한 차이점이 있습니다.
- 이상치 탐지: 학습 데이터에는 다른 관측치들로부터 멀리 떨어져 있는 이상치가 포함되어 있습니다. 이상치 탐지 추정치는 학습 데이터가 가장 집중된 영역에 맞추려고 시도하며, 이탈 관측치는 무시합니다.
- 신규성 탐지: 학습 데이터는 이상치로 오염되지 않았으며, 새로운 관측치가 이상치인지 탐지하는 것이 목표입니다. 이 맥락에서 이상치는 신규성 (novelty) 이라고도 합니다.
scikit-learn 프로젝트는 신규성 및 이상치 탐지를 위해 사용할 수 있는 머신 러닝 도구 세트를 제공합니다. 이러한 도구는 지도 학습 알고리즘을 사용하여 구현됩니다. 즉, 레이블이 지정된 예시 없이 데이터에서 패턴을 학습합니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
필요한 라이브러리 가져오기
먼저 필요한 라이브러리를 가져와야 합니다. 이 예제에서는 scikit-learn 의 sklearn 모듈을 사용합니다.
from sklearn import neighbors
데이터셋 로드
다음으로, 이상치 탐지를 수행할 데이터셋을 로드해야 합니다. 원하는 데이터셋을 사용하거나 사용자 정의 데이터셋을 만들 수 있습니다. 이 예제에서는 X_train이라는 샘플 데이터셋을 사용합니다.
X_train = [0.5, 1.5, 2.5, 3.5, 4.5, 10.5, 11.5, 12.5, 13.5, 14.5]
이상치 탐지 추정기 생성
이제 neighbors.LocalOutlierFactor 클래스에서 이상치 탐지 추정기 객체를 생성할 수 있습니다. 이 클래스는 이상치 탐지를 위한 인기 있는 방법인 Local Outlier Factor 알고리즘을 구현합니다.
estimator = neighbors.LocalOutlierFactor()
모델을 학습 데이터에 맞춤
다음으로, fit 메서드를 사용하여 이상치 탐지 추정기를 학습 데이터에 맞출 수 있습니다.
estimator.fit(X_train)
이상치 예측
모델이 학습되면 predict 메서드를 사용하여 새로운 관측치가 이상치인지 여부를 예측할 수 있습니다. predict 메서드는 내부 데이터 (inlier) 에 대해서는 1, 이상치 (outlier) 에 대해서는 -1 을 반환합니다.
X_test = [5.5, 8.5]
predictions = estimator.predict(X_test)
print(predictions)
이상치 점수 확인
이상치 예측 외에도 각 관측치에 대한 이상치 점수를 negative_outlier_factor_ 속성을 통해 확인할 수 있습니다. 점수가 낮을수록 이상치일 가능성이 높습니다.
outlier_scores = estimator.negative_outlier_factor_
print(outlier_scores)
요약
이 실습에서는 scikit-learn 라이브러리를 사용하여 신규성 및 이상치 탐지 방법을 배웠습니다. 이상치 탐지 추정기를 생성하고, 학습 데이터에 맞추고, 새로운 관측치에서 이상치를 예측하고, 이상치 점수에 접근했습니다. 이러한 기법은 데이터 세트에서 비정상적이거나 특이한 관측치를 식별하는 데 사용될 수 있으며, 일반적으로 이상 탐지 작업에 사용됩니다.