본문 바로가기
Machine Learning

38. 이상(사기) 탐지 : Anomaly Detection System 개요

by 대소니 2016. 8. 24.

Anomaly Detection

우리가 사용하는 dataset에는 수많은 데이터들이 있습니다. 이중에서 모든 데이터가 정상일 수도 있지만 그렇치 않을 수도 있을 것입니다. 이제부터는 특정 데이터가 이상이 있는지를 파악하기 위한 방법에 대해서 알아보고자 합니다.

이상한(비정상적인) 데이터를 검출하는 것을 Anomaly Detection 이라고 합니다. 아래 그림에서와 같이 예를들어서 살펴보겠습니다. 비행기 엔진을 만드는 제조사를 생각해보겠습니다. 엔진은 열이 높아짐에 따라서 엔진의 회전이 빨리질 것이라고 생각해볼수 있을 것입니다. 아래 그래프의 데이터들과 같이 분포되어 있는 것을 볼 수 있습니다. 이때 녹색의 x 데이터와 같이 다른 데이터들과 밀접한 부분에 존재하는 경우는 정상적인 데이터라고 볼수 있으나 나홀로 포지션에 위치해 있는 데이터 x는 뭔가 이상하다는 것을 알 수 있습니다. 이 데이터가 바로 anomaly data가 되겠습니다.


m 개의 dataset이 아래와 같이 있을때 x test 데이터가 anomalous 인지를 어떻게 판단할 수 있을까요? 바로 p(x)라는 모델을 이용해서 확인을 할 수 있습니다. 이 함수는 데이터들의 밀도를 이용하는 함수가 될 것입니다.(Density estimation) 

이 p 함수는 이 데이터가 정상적인 데이터일 가능성(probability)을 의미합니다. 이 함수를 사용해서 데이터를 확인을 한 결과 값이 어떤 특정한 값(ε)보다 작을 경우에는 이 데이터는 비정상적이다(flag anomaly) 라고 판단할 수 있습니다. 물론 그 반대의 경우에는 정상적인 데이터가 되겠지요


이러한 이상 탐지 알고리즘이 활용되는 분야는 다음과 같습니다.

- 사기 탐지 : 웹사이트의 많은 사용자들 중에서 특별하게 이상한 행동을 취하는 사용자를 판별하여 문제 있는 사용자를 파악합니다.
                    이때 다양한 features들을 만들 수 있습니다.(로그인 여부와 위치정보나 행동 패턴이 유사한지, 접속시간등)
                    만약 이상하다고 판단이 되면 해당 사용자를 block 처리 하여 다른 문제가 발생하는 것을 방지할 수 있겠습니다.

- 생산제품 QA : 제조한 물건에 이상 또는 불량 여부를 확인하는데 활용될 수 있습니다. 위의 예제와 비슷하지요

- 모니터링 : 데이터 센터에 수많은 컴퓨터들을 모니터링하여 메모리, 디스크, CPU 사용등에 대한 문제가 발생할 소지가 있는
                   항목들을 모니터링 하는데 활용이 가능합니다. 아마존 같은 클라우드 서비스에서 사용이 가능하겠습니다


Gaussian Distribution

이번에는 Gaussian Distribution(가우스 분포)에 대해서 알아보겠습니다. 또는 Normal Distribution(정규분포) 라고도 합니다.

어떤 x data에 대해서 이 데이터들이 가우스 분포를 따른다면 평균값이 되는 u(mu)와 분산인 σ^2(sigma squared)로 표현이 될 수 있습니다. 여기서 sigma(σ) 를 standard deviation(표준편차)라고 하고 σ^2 은 variance(분산)이라고 합니다.

이것을 공식으로 표현을 하면 다음과 같이 표현이 가능합니다. ~ 의 기호는 어떤 분포를 따르고 있다는 것을 의미합니다.

X ~ N(μ,σ^2 )

이것을 그래프로 그리면 하단의 모습과 같이 나타납니다. 분포의 중심점이 u가 되고 분포의 넓이가 σ 만큼 넓어지게 됩니다. 이것을 수학적으로 표현을 하면 p(x; u, σ^2) 의 공식과 같이 연산이 가능합니다. 이것은 가우스 분포의 곡선을 나타내는 함수가 됩니다.


두가지 변수가 변할 때 분포도가 어떻게 변하하는지 알아보겠습니다. 아래 그림의 4가지의 경우와 같이 u 의 값을 중심축으로 하여 분포 그래프가 만들어지고 sigma의 값의 크기에 따라 분포도의 넓이가 커지거나 작아지거나 하는 것을 알 수 있습니다.


x data의 데이터들로 부터 가우스 분포를 찾아낼 수도 있습니다. x 데이터가 하나의 축에 아래 그래프와 같이 나열이 되어 있다고 생각해보겠습니다. 그러면 파란색 분포 그래프와 같이 대략적으로 이런 분포를 보일 것이다 라고 추정을 할 수 있습니다.

더 정확히는 하단의 공식으로부터 두가지 변수인 μ 와 σ의 값을 찾을 수도 있습니다.

μ 는 중심점이므로 모든 데이터의 평균 값이 될 것이고 (아래 그림의 왼쪽의 파란색 공식)
σ 는 각 데이터들이 중심점과의 거리 제곱에 대한 평균 값이 됩니다. (아래 그림의 오른쪽 파란색 공식) 이때 m 으로 나누는 것이 일반적이기는 하지만 다른 강의에서는 m-1 을 사용할 수도 있습니다. m 의 값이 충분히 크기 때문에 두가지 값에 대한 큰 차이는 없으니 때에 따라서 두가지 중 하나로 쓰인다는 것을 알고 있으면 되겠습니다.


Algorithm

x data에 대한 training set이 있다고 생각해보겠습니다.

x data가 가지고 있는 n 개의 features에 대하여 각 feature 마다 고유한 분포를 이루고 있을 것입니다. 이 모든 features의 가우스 분포를 곱하면 p(x)가 됩니다. 아래 그림의 분홍색 박스 안에 공식과 같이 표현이 됩니다. 이것을 좀 더 심플하게 표현을 한 것이 바로 아래줄의 대문자 PI로 이루어진 공식이 됩니다.

Summation은 모든 값의 합을 의미하는 기호이며,  PI (Π)는 모든 값의 곱을 의미하는 기호입니다. 그러므로 j 번째 feature에 대한 p 함수들의 곱이 되겠습니다.

이렇게 어떤 분포를 형성하는 것을 density estimation 이라고 합니다.


지금까지 배운 내용을 정리하여 Anomaly detection algorithm이 동작하는 방식에 대해서 살펴보겠습니다.

먼저 x features 중에서 특이하게 값이 크거나 작거나 하여 이상이 생길 만한 feature를 선택합니다. 또는 어느 feature가 일반적인 속성을 가지고 있어 분포를 보일 가능성이 있는 것을 선택합니다.

그리고 각 feature 마다 가우스 분포를 이루는 parameter인 μ 와 σ 의 값을 찾습니다. 아래 그림의 2번 공식과 같이 벡터 연산을 통하여 구할 수 있습니다.

마지막으로 p(x) 함수의 결과 값을 PI 공식을 이용해서 구합니다. 그리고 이 값이 특정 값(ε)과 비교하여 작을 경우에는 anomaly로 판단 할 수 있습니다. 결과 값이 아주 작은 값이 된다는 것은 이 데이터가 정상 데이터일 가능성이 아주 작다는 의미가 되기 때문입니다.


아래 그림은 예제를 들어 설명하는 내용입니다.

x1, x2의 데이터가 그래프와 같이 존재합니다. 각각의 x1 feature가 나타내는 가우스 분포는 오른쪽 위의 그래프와 같이 넓직한 그래프의 분포를 이루고 있습니다. 또 x2 feature가 나타내는 가우스 분포를 구해보니 3, 1의 값을 가지고 있는 가우스 분포를 오른쪽 아래 그래프와 같이 조금 뽀족하게 나타나고 있습니다.

이때 녹색의 두개 x 를 샘플링하여 test를 해보려고 합니다. x test(1)은 분포 내에 존재하고 있어 p(x test(1))의 값이 0.0426으로 ε = 0.02 보다 큰 값으로 나타나 정상 데이터라고 판단할 수 있습니다. 반면에 x test(2)는 멀찌감치 위치하고 있어서 p(x test(2))의 값이 0.0021로 작은 값이 되어 anomaly 데이터라고 판단이 됩니다.

이 두가지 features가 나타내는 p(x) 를 3차원 그래프로 그림 아래 왼쪽의 모양과 같이 됩니다. 이 p(x)는 x1, x2가 어떠한 값을 가지고 있을때 높이 값을 의미하게 됩니다. 분포 그래프 표면에 높이가 되는 것이지요.


그리고 아래 그림의 빗금친 부분과 같이 이 분포 밖에 부분에 위치하는 데이터들이 있다면 이 데이터들이 anomaly 로 판단이 되는 것입니다.



댓글4

  • myeong 2017.05.09 02:39

    안녕하세요! 개인적으로 러닝머신 공부하면서 게시글 너무 잘보고 있습니다. 혹시 위에서 이상여부가 입실론의 값에의해서 판별이되는 것으로 이해했는데 , 입실론의 값은 어떻게 결정하며,입실론의 값을 구하는 방법이 있는지 궁금합니다!
    답글

    • Favicon of https://daeson.tistory.com 대소니 2017.05.09 15:48 신고

      안녕하세요. 데이터에 대해서 정상인 것과 그렇치 않은 것을 구분하는 경계값인데요. 그 값을 구하는 방법은 데이터 마다 다르겠지만 사람이 지정을 해줘야 하는것이 일반적입니다.

      경험적으로 혹은 실제 데이터를 확인하면서 혹은 값을 변경해보면서 grid search를 통해 찾아내게 되는 것입니다.

  • 증증 2020.10.18 00:54

    안녕하세요 글 잘보고 공부중입니다. 좋은 글 감사합니다. 마지막 부분 Anomaly detection algorithm 설명하는 부분에서 '먼저 x features 중에서 특이하게 값이 크거나 작거나 하여 이상이 생길 만한 feature를 선택합니다. 또는 어느 feature가 일반적인 속성을 가지고 있어 분포를 보일 가능성이 있는 것을 선택합니다' 부분이 1.choose feature xi(아래첨자) that you think might be indicate of anomalous examples 에 해당하는 설명으로 이해했습니다. 그리고 저는 이상이 생길만한 특정 i번째 '변수'를 선택하라고 이해했는데요, 이것이 뒤에 두단계. 첫번째 변수부터 n번째 변수 각각의 mu와 sigma를 구해 p(x) 함수를 구하고 새로운 x 데이터 (첫번째 feature,...,n번째 feature 값으로 이루어진)를 p(x)함수에 대입하여 입실론과 비교하는 과정까지 봤을때 1번째 과정이 어떤 영향을 미치는지 잘 모르겠습니다. 1의 과정이 없어도 2,3 과정만으로 anomaly detection model이 완성되는 것 같은데 (입실론은 구했다고 가정) 1번 단계가 어떤 의미를 갖는 것인가요?
    답글

    • Favicon of https://daeson.tistory.com 대소니 2020.11.11 14:03 신고

      네~ 말씀하시고 이해하신 내용이 맞는것 같습니다. 단순히 알고리즘만을 만들어내는 과정이라고 보면 2,3번에 영향력이 크다고 생각할 수 있습니다. 1번의 과정은 그에 적절한 또는 조금더 유용하고 좋은 결과를 만들어 낼 수 있도록 하기 위해서 x 라고 하는 데이터가 가지고 있는 특성중에서 어떤 특성을 사용하는지에 따라 결과가 달라질 수 있다고 생각하시면 될 것 같습니다.
      x 가 만약 사람이라고 예시를 한다면 사람이 가지고 있는 키, 몸무게, 성격, 혈액형 등이 features가 되고 이들 중에 어떤 항목을 사용하여 이상유무에 주요 데이터 특성을 이루게 되는지를 살펴본다고 보면 좋을 것 같습니다.