[코세라 강의 정리] 앤드류 응의 머신러닝 - Anomaly Detection
1. Density Estimation
[Problem Motivation]
항공기 엔진의 품질 보증 테스트를 한다고 생각해보자.
위와 같이 두 개의 feature만으로 측정한다고 가정하면, 새로운 엔진 \(x_{test}\)가 기존 샘플들과 비슷한 위치에 있으면 정상으로 판단할 수 있다. 반대로, 기존 샘플들과 떨어진 위치에 있으면 이상이 있다고 볼 수 있을 것이다.
Density estimation은 아래와 같이 정상일 확률 \(P(x)\)를 구해서 이상 유무를 판단하는 것이다.
새로운 샘플이 기존 데이터가 많은 곳에 위치한다면 확률이 높을 것이고, 기존 데이터가 별로 없는 곳에 위치한다면 확률이 낮을 것이다. 즉, 위와 같이 원의 중앙에 있으면 정상일 확률이 높고 바깥으로 갈수록 확률이 낮아진다. 그리고 다음과 같이 \(\epsilon\)과 확률을 비교해서 정상/비정상을 판단한다.
Anomaly detection은 사용자의 행동을 바탕으로 사기 탐지, 제조업에서 품질 확인 등에서 활용될 수 있다.
[Gaussian Distribution]
가우시안 분포는 정규분포(Normal Distribution)라고도 불린다.
\(x \in \mathbb{R}\), 평균이 \(\mu\)이고 분산이 \(\sigma^2\) 인 정규분포를 따른다고 할 때 다음과 같이 표기한다.
$$ x \sim N(\mu, \sigma^2) $$
그리고 가우시안 분포를 그래프로 그려보면 다음과 같이 생겼다.
중간은 평균 \(\mu\)이고, 너비는 표준편차 \(\sigma\)로 표현된다.
x의 확률 \(p(x;\mu,\sigma^2)\)는 다음 공식으로 구할 수 있고, 중심에서 멀어질 수록 확률도 낮아진다.
$$ p(x;\mu,\sigma^2) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$
그리고 \(\mu,\sigma\)의 값에 따라 모양이 다음과 같이 달라진다.
이제 머신 러닝을 위해 데이터에 적용해보자.
다음과 같이 데이터 셋이 있을 때, 우리는 \(x^{(i)}\)별로 평균과 분산을 구하고, 정규분포 \(x^{(i)}\sim N(\mu, \sigma^2)\)를 구할 수 있다.
[Algorithm]
\(n\)차원의 \(x\)에 대한 확률은 모든 \(p(x_i; \, \mu_i, \, \sigma^2_i)\)의 곱으로 구할 수 있다. (각 feature는 각각의 평균과 분산으로 가우시안 분포를 따른다)
수식으로 보면 다음과 같이 나타낼 수 있다.
$$ p(x) = p(x_1;\mu_1,\sigma^2_1)*p(x_2;\mu_2,\sigma^2_2)\cdots p(x_n;\mu_n,\sigma^2_n) $$
$$ = \prod_{j=1}^{n}\,p(x_j;\mu_j,\sigma_j^2) \qquad \qquad \qquad \qquad \quad \; \, $$
여기서 \(\prod\)는 모든 항의 곱을 의미한다.
이제 이상 탐지 알고리즘을 알아보자.
- 이상 샘플을 나타낸다고 생각하는 특성 \(x_i\)를 선택한다.
- 각 특성의 평균 \(\mu_j\)와 분산 \(\sigma^2_j\)를 구한다.
- 새로운 샘플 \(x\)가 주어졌을 때, 위의 공식을 이용해서 확률 값 \(p(x)\)를 구하고, \(\epsilon\)과 비교하여 이상 유무를 판단한다.
두 개의 특성을 가진 데이터 셋을 예시로 살펴보자.
\(x_1, \, x_2\)에 대해 평균과 분산을 구하고 확률 값을 구했다. 위의 3D 그래프의 높이가 \(p(x)\)를 나타낸다.
그리고 기준값 \(\epsilon=0.02\)라고 정했다.
- \(x_{test}^{(1)}\)은 0.02보다 크기 때문에 정상이라고 판단할 수 있다.
- \(x_{test}^{(2)}\)는 0.02보다 작기 때문에 이상이라고 판단할 수 있다.
2. Building an Anomaly Detection System
이제 이상 탐지 시스템을 어떻게 만들고 평가할 지에 대해서 알아보자.
[Developing and Evaluating an Anomaly Detection System]
알고리즘을 개발할 때 정량적인 평가 지표가 있으면 의사 결정을 하기 쉬워진다.
우리가 정상/비정상으로 분류된 데이터를 가지고 있다고 생각해보자. Training set과 Cross Validation set, Test set으로 나누고, 학습시킨 것을 CV와 Test set을 통해 평가하는 방법을 사용할 것이다.
구체적인 예를 들어보자.
항공기 엔진 데이터에서 10000 개의 정상적인 엔진과 20 개의 비정상 엔진이 있다고 했을 때, 다음과 같이 60%, 20%, 20%로 데이터를 나눌 수 있다. (60%, 40%로 CV set 없이 나눌 수도 있는데, 이 방법은 권장하지 않는다.)
알고리즘의 평가는 다음과 같이 할 수 있다. (Supervised learning과 유사하다.)
- \(P(x)\)를 Training set으로 학습시킨다.
- Validation/test set에서 \(\epsilon\)을 기준으로 0과 1로 분류한 뒤 F1-score 등의 metric으로 평가한다.
일반적으로 비정상의 샘플이 매우 적은 불균형 데이터기 때문에 다음과 같은 평가 지표를 사용하는 것이 좋다.
- True positive, false positive, false negative, true negative
- Precision/Recall
- F1-score
그리고 CV를 임계값 \(\epsilon\)을 결정하는 데 사용할 수도 있다.
[Anomaly Detection vs. Supervised Learning]
- Anomaly Detection은 positive 샘플이 매우 적은 불균형 데이터지만 Supervised learning은 둘 다 많은 데이터를 가지고 있다.
- Anomaly Detection은 매우 다양한 'types'가 존재해서 지금까지 보지 못한 유형의 이상 샘플이 나올 수 있다.
아래는 Anomaly detection과 Supervised learning을 사용하는 예시들이다.
위와 같이 나뉠 수 있지만 만약 Anomaly detection에서 이상 데이터(y=1)가 매우 많다면 Supervised learning으로 해결할 수도 있다.
[Choosing What Features to Use]
이제 Anomaly detection을 디자인 할 때 feature를 어떻게 선택할 지에 대해서 알아보자.
- Non-gaussian features
Anomaly detection을 할 때, feature들이 가우시안 분포를 따르는 지를 확인해줘야 한다.
만약 가우시안 분포를 따르지 않는다면, 위의 사진 처럼 log 스케일로 바꿔줘서 가우시안 분포를 따르게 만들어준다. (꼭 log를 쓰지 않고 \(\sqrt{x}\)등 다른 방법을 써도 된다.)
- Error analysis for anomaly detection
Anomaly detection에서 가장 이상적인 데이터는 많은 정상 샘플과 적은 비정상 샘플을 갖는 것이다. 하지만, 실제의 경우 정상과 비정상 샘플 모두 비슷한 정도(둘 다 큰)가 많다.
이렇게 되면 비정상 데이터도 \(P(x)\)가 커질 수 있기 때문에 새로운 feature를 추가해서 데이터를 분리하는 것이 필요하다.
예를 들어, 아래 처럼 하나의 feature만 봐서는 비정상 샘플도 높은 확률을 가진다.
따라서 \(x_2\)를 추가해서 데이터를 분리시키면 정상과 비정상 데이터의 구분이 더 뚜렷해진다.
- Monitoring computers in a data center
Data center에서 컴퓨터를 모니터링하는 예를 생각해보자.
만약 비정상적인 상황이 발생했다면(High CPU, 비정상적인 트래픽 발생), 비정상적으로 크거나 작은 값이 나타난 feature들을 선택하는 것이 좋다. 위의 경우에는 \(x_3, \, x_4\) 가 되겠고, 이를 조합하여 새로운 feature를 만들 수도 있다.
이번 강의에서는 이상 탐지(Anomaly Detection)에 대해서 알아봤다.
다음 강의에서는 추천 시스템(Recommender Systems)에 대해서 알아볼 것이다.
* 공부 정리 목적으로 쓴 글입니다. 오타나 수정사항이 있으면 바로 알려주세요.