이상 감지 - Anomaly Detection

개요

이상한 것을 찾는 것을 이상감지라고 한다. 확장해서 미래에 이상한 상태로 진입할 여지가 있는지 미리 찾는 것을 이상징후감지라고 한다. 이상징후감지라고 하기도 한다.

이상감지(Anomaly Detection)는 데이터 분석 기법 중의 한가지이며 최근에 생긴 것이 아니고 꽤 오래전부터 있어왔지만 빅데이터와 더불어 최근에 다소 각광 받고 있는 분석 분야이다.

이상감지는 특별한 알고리즘이나 방법이 정해진 것이 없다. 단지 특정 도메인(특정 업무) 또는 특정한 문제에 대해 별개의 방법을 고안해서 사용하거나 기존의 통계나 기계학습 방법을 응용해서 사용한다.

각 개별 도메인(업무 영역)에 경험이 없는 경우 당장 뛰어들어 진행 하기에는 문제를 정의하고 좋은 방법을 선택하는 것부 어렵기 때문에 진입 장벽(learning curve)이 매우 높다.

기술적으로 잘 알려진 몇개의 알고리즘으로 단순하게 알고리즘을 사용하는 사용자의 관점에서는 현실에서 주어지는 문제를 해결하기는 어렵고 분야 전문가(Domain Expert)의 통찰을 얻어서 그것을 찾기 위한 감지 모델을 직접 여러 알고리즘을 이용해서 구현하거나 아니면 스스로 규칙을 찾아내고 찾을 수 있는 방법도 고안해야 한다.

이상감지라는 것이 단순히 생각하면 생각하면 그냥 뭔가 이상한 것을 찾는 것이지만 단순한 생각을 실현에 옮기기 어려운 경우가 현실적으로는 상당히 많다.

데이터의 이상치 즉, 노이즈를 감지하는 것과 맥락이 같으며 보통 쉽게는 중심값이나 대표값들에서 크게 벗어난 것은 이상한 것이라다는 전제로 이상한 것을 찾아내는 것이다. 그래서 관련 기법들은 모두 비교적 단순한 것들과 단순한 것들에서 발전시킨 것들을 사용하지만 실제 수행에는 많은 노력이 필요한 것이 특징이다.

진행 요령

이상감지의 목표는 이상감지라는 타이틀 자체를 보면 단순히 이상치를 찾는 것인데 이상치를 찾으려면 “이상하지 않은 것” 즉 평범한 것(normal) 부터 정의를 해야한다. 당연한 것이지만 이것부터 정의가 제대로 되지 않으면 하기 어렵다. 그리고 “이상하지 않은 것”을 정의한 후에 “이상한 것”을 정의하고 그것을 찾는 모형(model)을 만들거나 적합한 것을 찾는다.

특징

이상징후의 문제는 데이터분석, 데이터마이닝 보다 데이터 전처리 단계에서 수행해야 할 항목이 많으며 연산량도 비교적 많다. 보통 실제 문제에서는 학습데이터(training set)를 사용할 수 없는 경우가 많아 분류(classification) 모델을 만들 수가 없는 경우가 대부분인데 이를 위한 방법들을 말하며 이상한 것에 대한 샘플이 없기 때문에 사실상 이상치를 정확히 찾아내기 어렵다.

하지만 대략 예측하지 못했던 노이즈나 중심값에서 벗어난 데이터들을 찾아내고 조합시켜서 인사이트를 도출하는데는 유용하며 비즈니스에 대한 이해도가 높은 경우 결과물의 활용도가 매우 높아질 수 있다. 학습데이터가 없으므로 이상한 것(anomaly)을 찾기전에 이상하지 않은것(normal)이 무엇인지 제대로 정의를 해야 하는 - 매우 어려운 문제를 - 먼저 해결해야 한다.

학습데이터가 있다면 분류모델을 만드는 것을 시도해 볼 수 있을텐데 실제 환경에서는 그러지 못한다. 결국은 클러스터링을 하거나 밀도 추정을 해서 확률이 낮은 것들을 뽑거나 해야 한다.

활용분야

시스템 운영, 보안 관련 시스템, 제조업과 같은 공정 데이터 관리 등에 많이 활용되고 있으며, 사용자 행동(behavior)에 대해서도 활용이 가능하다. 그 외에 대부분의 비즈니스에 모두 활용이 가능하다.

참고

영어 스펠을 abnormal로 하지 않고 anomaly로 하는 것은 오타인것로 생각하는 사람이 있는데 anomaly가 사전에 등록된 단어이며 정의상으로도 맞다. abnormal은 외관이나 모양에 대한 이상함을 뜻하며 anomaly는 속성, 성격, 성질 것들이 이상한 것을 표현할 때 구분해서 쓴다고 알려져 있다. 사실 영어를 Native 언어로 사용하지 않는 사람들에게는 뉘앙스 차이를 구분하기가 어렵다고 한다.

이상징후 관련 알고리즘

이상징후감지는 특별히 잘 알려진 알고리즘이 없는 것이 문제이다. 이상징후라는 것으로 정의할 수 있는 것이 매우 다양하고 각 비즈니스별 정의별 문제와 데이터도 각기 다양하게 다르기 때문이다. 그래도 일반적으로 가장 잘 알려진 알고리즘은 LOF(Local Outlier Factor)이며 그 외 방법은 여러가지 방법으로 패턴을 찾는 것과 관련이 있는 방법들이다.

이상징후에서 말하는 패턴는 매우 광의적인 것으로 정의하기가 모호하지만 세분화하면 다음과 같다.

  • 과거에 발생하지 않았던 것인데 최근에 발생한 것들
  • 확률적으로 매우 드물게 발생한 것들이 갑자기 빈발하게 발생
  • 논리적으로 함께 발생할 수 없거나 발생하지 않아야 하는 어떤 규칙(금지된 행위 또는 물리적으로 발생 불가능한 사건)이 발생
  • 일반적인 상황에서 크게 벗어난 예측하지 못한 패턴. 즉 평소의 추이에서 크게 벗어난 극단값

이상징후는 그 특징상 훈련데이터(Training set)을 확보하기가 매우 어렵다. 그렇기 때문에 분류(classification) 알고리즘들은 이상징후감지에 사용하기 어렵다. 때문에 대부분의 이상징후감지는 룰 기반(rule based)이거나 군집화 계열, 패턴을 찾아내는 탐색형 알고리즘들이거나 이런 것들을 조합한다. 또한 확류 모델을 사용해 확률이 떨어지는 행위들을 이상징후로 판단하기도 한다.

이상감지의 실패 원인

보통 데이터사이언스 또는 빅데이터에서 이상감지 과제(proejct)를 실패하는 경우는 초보자들의 흔한 문제로 기계학습만으로만 이 문제를 해결하려는 경향이 크기 때문이다.

“이상하다”는 매우 상대적인 개념이며 그 자체로는 정의와 명세가 매우 부족하다는 것을 인지하고 더 구체화하지 못하면 대부분의 사례에서 문제를 해결할 수 없는 것을 흔히 볼 수 있다.

기계학습으로 이상감지를 잘 하지 못하는 이유

현실적인 기계학습으로 이상감지 또는 이상징후문제를 해결하기 매우 어렵다. 기계학습에 심취한 사람이거나 전공한 사람은 이상징후 감지 문제를 기계학습으로 해결할 수 있다고 주장하거나 맹목적으로 믿는 경향이 많다.

불가능하다는 것은 아니지만 이런 진입을 생각하는 사람들은 경험부족으로 인해 현실적인 문제를 간과한 경우가 많다.

엄밀히 말하면 지금까지 이상징후에 사용하는 알고리즘들은 대부분 통계기반의 기법이나 그냥 수리적 모형이 많다. 넓은 의미에서는 모두 기계학습이라고 볼 수 있기도 하지만 좁은 의미에서는 아니다.

기계학습으로 이상징후감지를 잘하지 못하는 몇가지 이유는 다음과 같다. (아직까지는 그렇다)

학습 데이터(ground truth)가 없거나 매우 부족하다

어떤 문제에 과거의 경험을 기반으로 이상한 것을 찾아본 경험이 있고 발견된 사례가 충분히 있다면 지도학습이든 비지도학습이든 이상징후감지를 수행할 수 있다. 하지만 그런 경우 대부분 기계학습 이전에 임계치기반으로 이상징후를 감지하는 모형이나 구현체를 이미 적용해서 사용하게 된다.

지도학습(supervised learning)에서의 문제

앞서 말했지만 학습데이터중에서도 ground truth 즉, 정답데이터가 없거나 매우 부족한 경우이다. 모든 지도학습 모형은 충분한 정답데이터가 확보되지 않으면 모델을 쉽게 만들 수 없다.

비지도학습(supervised learning)에서의 문제

연산력과 모델 작성에 소요되는 시간과 반복작업에 소요되는 시간이 많다. 비지도학습은 계산에 필요한 연산량(computation power)가 많이 소요되는데 모델을 만들어서 사용해 볼 수는 있겠지만 현실성이 매우 떨어지고 정확도도 높지 않은 문제가 있다.

이상한 것 같기도 하고 아닌것 같기도 한 것들

이것은 정의가 명확하지 않기 때문에 생기는 문제이다. 심증적으로 이상한 것 같지만 단정지을 수 없고 확신할 수 없는 경우가 많다. 대부분 문제는 이것이 정말 이상한 것인지 아닌지 알아내야 한다는 요구사항에 대해서 답을 할 수 없기 때문이다.

어떤 발견된 사례가 이상한 것인지 아닌지를 결정하는 것은 현업을 담당하는 domain expert가 결정을 해야하는 것이 가장 좋지만 domain expert 마저도 위험부담때문에 결정을 하지 못하는 경우가 많다. 데이터사이언스는 아웃라이어 감지 기법 중 적당한 것을 결합해서 EDA등을 통해 이상한 것을 결정할 수 있도록 도와줄 필요가 있다.

향 후 이상한 상황이 발생할지 미래에 대해 지금 알려달라고 하는 것

현실적으로 대부분 이런 요구사항을 받았다면 요구사항을 제공한 사람이 공상과학소설에 가까운 상상을 하고 있을 가능성이 크다. 인간의 기술로는 1초 뒤의 미래도 정확한 예측이 불가능하다.

과거의 데이터를 기반으로 추이를 보거나 회귀분석 같은 방법으로 예측을 해볼 수 있겠지만 틀리는 것이 다분히 많을 것이다. 기술적으로 시도하는 것은 충분히 가능하지만 요구사항에 대한 기대치를 만족시키기 어려운 경우가 많다.

false alarm에 대한 문제

오인하는 경우에 대한 위험부담이 크다면 매우 어려운 문제가 된다. 모든 기계학습이 비슷한 문제를 가지고 있듯이 false alarm으로 인한 비용부담이 크다면 높은 정확도를 요구하기 마련인데 이것은 쉽게 해결할 수 있는 문제가 아니다. 어느 정도의 정확도를 원하는지 얼마만큼의 false alarm을 수용할 수 있는지 요구사항을 주는 사람이 정확히 정의해 주어야하며 그렇지 않은 경우에는 업무를 담당하게 된 데이터사이언티스트가 제안을 해 주어야 한다.

알려진 관련 알고리즘

  • Sigma rule
  • Rosner’s Outlier Test
  • student t-distribution
  • Extreme Studentized Deviate (ESD) test
  • Generalized ESD
  • Linear Regression
  • LOESS
  • STL
  • LOF (Local Outlier Factor)