인투더데이터 데이터과학 위키 - 이상감지
한글 및 한국어로는 흔히 “이상감지” 또는 “이상징후감지”라고 읽고 쓴다. 영어로는 “anomaly detection” 라고 쓰고 “어노멀리 디텍션” 이라고 발음한다. 이상감지(이하 이상감지 와 anomaly detection을 혼용)는 데이터 분석의 관점에서 용어를 만들어 분류한 것인데 이상감지는 학술적으로 데이터마이닝의 일부라고 볼 수 있다. 즉, 이상감지를 대학에서 배운다면 데이터마이닝이나 기계학습을 전공하면 되지만 실제 학부과정이나 대학원과정에서도 잘 다루지는 않고 일부 대학에서 가르치고 있다.
데이터마이닝이 이상감지와 가장 가까운 이유는 다루는 데이터로 부터 쓸만한 가치, 특이한 것을 찾는 것이 데이터마이닝이기 때문이다. “이상”이라는 것도 가치가 있는 특이한 패턴이기 때문이다. “이상감지”라는 기법은 근래에 갑지기 생긴 것은 아니며 상당히 오래전 부터 연구되어 왔지만 빅데이터와 더불어 비교적 최근에 다시 조명받고 있다. 이상감지에서 빅데이터 플랫폼이 중요한 이유는 대상이 되는 이상 데이터는 데이터량이 많을 수록 이상여부를 찾기 어렵고 많은 데이터 안에서 매우 적은 이상 데이터를 찾아야 하는 현실적인 문제때문이다.
즉, 뒤져야 할 데이터는 엄청나게 많으면서도 실제로 찾을 수 있는 사례는 거의 없기 때문에 빅데이터 플랫폼을 이용할 수 밖에 없다.
이상감지의 실제 업무에 적용하려고 하면 찾아야 하는 이상한 패턴은 매우 적고 정상인 데이터가 대부분인 경우가 많다. 대량의 데이터를 뒤져서 얼마 되지 않는 이상한 패턴의 데이터를 찾아내거나 빠르게 감지해야 하기 때문에 소모되는 비용대비 결과물의 가치가 매우 떨어진다.
과연 “이상감지가 쓸모가 있는가”라는 의문이 재기되는데 이상감지 자체는 쓸모가 많다. 단지 이상감지 프로그램 또는 모델을 실행하는데 컴퓨팅 자원이 굉장히 많이 소모되는 경우가 대부분이라는 것이다. 이상감지를 현업에 적욜하기 전에 고려할 것은 찾아내야 하는 이상 패턴을 만약 찾아내지 못했을 때 비즈니스에 사용하는 컴퓨팅 자원의 비용 보다 더 큰 손실을 준다면 충분히 가치가 있는 것이고 그렇지 않다면 사실 가치가 떨어지는 것이므로 과감하게 포기하고 다른 방법을 사용하는 것이 좋다.
이상감지는 시계열 또는 시퀀스 분석의 일종이라고 생각하는 것이 기술적인 측면에서 처음 개념을 잡을 때 편할 것이다. 하지만 통계학에서 말하는 시계열, 시퀀스 분석과 완전히 동일한 것이 아니라는 것에 주의할 펼요가 있다. 이상감지는 이상한 패턴을 찾아내는 것이고 패턴이라는 말은 반복되는 모양, 위치와 같은 것도 있지만 시간의 흐름에서 과거의 흐름과 다르게 나타나거나 다수의 데이터의 흐름과는 다르게 나타나는 것을 찾는 것이다. 앞서 말했듯이 이상감지는 데이터마이닝의 한 분야로 데이터마이닝에서는 통계적이 기법이 되었든 수학적인 방법이든 기계학습이든 가리지 않고 사용한다.
용어를 보면 직관적으로 알 수 있는 것이지만 “이상한 것을 찾는 것”을 이상감지라고 한다. 이상한 것을 찾는 것은 ”보편적이 아닌 것을 찾는다”는 것이며 이 용어에 모든 내용이 들어 있다. 이상감지는 온라인, 오프라인 데이터 모두 적용할 수 있지만 데이터를 주어진 시간내에서 가능한 빨리 수집해서 이상한 것을 감지해야하는 하므로 온라인, 오프라인 모두 실시간 또는 준실시간으로 데이터를 수집할 수 있는 환경에서 적용하는 경우가 많다.
현재 온라인 비즈니스에서 사람들이 주로 얘기하는 이상감지에 대한 정의는 다음과 같다.
시계열 데이터에서 과거 또는 비슷한 시점의 다른 데이터의 보편적인 패턴에서 벗어나거나 벗어나려는 징후가 있는 드문 패턴이나 사실, 대상 개체를 찾아내는 것이다. 흔히 말하는 이상감지는 모두 여기에 해당한다.
이상감지는 실시간으로 현재의 이상한 것 또는 가까운 미래에 큰 위험을 만들 여지가 있는 패턴을 발견했는지가 중요하기 때문이다.
시계열이 아닌 것 중에 이상한 것을 찾는 것은 대부분 아웃라이어 감지에서 다루고 있다. 아웃라이어 감지와 이상감지를 동일하게 취급하거나 구분하지 않는 경우도 있는데 이상감지도 넓은 의미에서는 아웃라이어 감지라고 볼 수 있기 때문이다. 아웃라이어를 찾는 것은 원론적으로 말하면 이상감지에 포함되지 않는다. 아웃라이어가 이상하다는 의미가 아니기 때문이다.
아웃라이어를 찾는 방법은 흔히 통계학에서 기술통계(descriptive statistics)에서 다루고 있다.
이상감지를 처음 접하는 사람들중에 기계학습에 대한 사전지식이 있거나 학습이 되어 있는 사람들은 오히려 전혀 모르는 사람에 비해서 이상감지가 기계학습으로 해야 하는 것인지 아니면 통계적인 방법인지 또는 그 외에 방법으로 접근해야 하는지 구별하지 못하는 경우가 많다.
결론을 말하면 이상감지는 기계학습 알고리즘을 사용할 수도 있고 통계학의 방법을 사용할 수도 있다. 이상감지에서 사실 수단은 별로 중요하지 않으며 결과를 더 우선한다. 하지만 보편적으로 지금까지 지도식 기계학습 방법으로는 잘 되지 않는다. 현재까지 가장 많이 사용되는 이상감지 기술은 통계학에서 사용하는 통계적 기술이 더 많이 사용되고 일부 딥러닝(Deep learning)이나 비지도 학습(Unsupervised learning)이 사용된다.
이상감지에 대한 문제를 처음 접하는 사람들중에 기계학습에 대한 지식이 있는 사람들은 이상감지를 위해서 지도학습모형(supervised learning model)을 사용하려고 하는 경향이 많은데 이것 자체는 잘못된 접근방법은 아니다. 하지만 현실에서 부딪히는 문제는 이렇게 접근할 때 몇 가지 장벽을 만난다. 쉽게 말하면 이제 이 방법으로 이상감지를 해결하는 시도는 잘 하지 않는다.
지도학습 기반의 기계학습으로 이상감지를 해야 한다면 흔히 다음과 같은 생각이 먼저 떠오를 것이다.
위에서 생각하는 것은 흔히 기계학습기법으로 분류, 예측 모델(prediction model)을 만드는 것과 완전히 같다.
하지만 문제가 되는 것은 실제 이상사례라는 케이스가 너무 적어서 제대로된 학습데이터(training set)를 확보하기가 어렵다는 것이다.
즉, 다음과 같은 문제가 생긴다.
딥러닝을 선호하는 사람들을 위해서 그 관점에서 말한다면 실제사례(ground-truth)가 별로 없다는 것이다. 학습데이터가 턱없이 부족하다. 따라서 학습데이터의 증폭 또는 정답 데이터를 자동으로 수집해주는 모델이 아닌 경우는 현실성이 없다.
이런 문제로 흔히 기계학습의 지도학습 중에서 분류(prediction, classification)문제를 해결하기 위해서 사용하는 Decision Tree, SVM, Regression, DNN 같은 알고리즘들은 이상징후감지에 사용하기 어렵다고 알려져 있다.
냉정하게 말하면 이런 쉬운 방법은 이미 많은 학자들이 이미 시도를 해서 쓸모가 없다는 것을 확인했다.
지도학습으로 이상감지를 하기 어렵다면 비지도학습을 통해서 문제를 해결하려는 생각도 할 것이다. 여러분이 지도학습을 어디선가 배웠다며 비지도학습도 배웠을 것이고 비지도학습이 정답데이터가 없어도 자동으로 데이터를 분류해 준다는 판타지같은 말을 들었을 것이 분명하다.
비지도학습도 사실 어려운데 이상감지는 판별의 문제이기 때문에 비지도학습과 같이 멋대로 분리해 해내는 방식으로도 어렵다. 어떻게 하든 이상한 것이라고 정의된 어떤 것들을 찾아내야 한다는 것이다. 비지도학습은 정답을 주고 비슷한 것을 찾는 문제를 해결하는 것은 일반적으로 부적합하다. 이상한 것이 아니라 따로 묶인 군집들을 구분해서 제시해 줄텐데 분리된 군집들 중에 이상한 것만 모여있는 모델을 만드는 것은 매우 어렵다.
그래도 비지도학습에서는 최근에 랜덤컷포레스트(Random Cut Forest)라는 알고리즘이 알려졌고 이상감지에 가장 유력하게 쓸 수 있는 모델 알고리즘으로 알려졌다. 실제 성능도 다른 알고리즘에 비해 보편적으로 좋은 편이다.
기계학습을 이용한 방법 중에 가장 유력한 방법일 것이다. 소량의 정답데이터를 이용해서 비슷한 것을 찾아내거나 학습데이터를 확장시키는 방법이다. 문제는 이 기법자체나 매우 어려운 기법이고 좋은 모델을 만드는데 시간이 너무 오래 소요되는 것이다. 또 확장한 정답데이터가 어느 수준까지 정답으로 인정해야 할 것인지를 결정해야 하는 문제가 남게 된다.
이상감지에 통계적인 방법이 주로 사용되는 이유는 통계학이 다루는 가장 기본적인 것이 보편성에 어긋나는지 아닌지를 확인하는 것이기 때문이다. “이상한 것”이라는 것은 좁은 의미로는 보편성에서 벗어난 것을 말하기 때문이다. 기억할지 모르겠지만 보편성을 어긋난 것을 “아웃라이어”라고 한다. 아웃라이어를 다루는 것은 통계학이 전문이다.
통계학을 통한 이상감지를 하기 위해서는 다음과 같은 갈래에서 출발하는 것이 일반적이다.
위와 관련된 것은 너무 많아서 여기에 일일히 나열하기 어렵다. 즉 위와 관련된 모델이나 알고리즘 중에서 대부분의 문제를 해결할 수 있는 가장 유력하고 좋은 알고리즘이나 방법은 아직 없다.
위의 것 중에 가장 좋은 성능을 보이는 것은 베이지안 모델이라고 알려졌지만 두각을 나타내는 특별한 알고리즘은 없다.
이상감지는 찾아내고자 하는 문제가 발생하는 시점을 기준으로 두 분류로 나눌 수 있다.
두 가지는 거의 같은 말처럼 보이지만 난이도가 매우 다르며 접근 방법도 매우 달라진다. 아직까지 현실에서의 이상감지는 1번의 경우를 처리하는 것이 대부분인데 2번에서 말한 미래에 발생한 문제가 있는지는 예측(forecasting) 분야와도 겹치는 것이 많으며 미래를 예측하는 것은 매우 어려운 일이기 때문이다.
1번은 일종의 광범위한 모니터링이라고 할 수 있지만 일반적으로 말하는 임계치(Threshold)기반을 말하는 것이 아닌 가변임계치나 상황이 이전의 흔한 패턴과 다른 빨리 찾는 것이다.
2번은 사실 **시계열 예측(time-series forecasting)**의 일부라고 볼 수 있지만 시계열 예측(time-series forecasting)은 미래에 발생할 일을 정확히 예측하지만 이상감지는 미래에 이상해질 위험이 있는지 이상한 것이 발생할 확률이 높아질지를 예측하는 것으로 기술난이도가 훨씬 높다. 현실에서 이런 요구를 데이터과학자에게 빈번하게 하는데 이런 모델을 만드는 것이 가능성이 없는 것은 아니지만 사실은 판타지에 가깝다.
이상한 행동을 만들어내는 대상체의 특징은 다음과 같다.
이상감지에서 찾으려고 하는 패턴은 뚜렷하지 않은 경우가 많다. 패턴이 뚜렷하고 쉽게 인지할 수 있는 것이라면 규칙기반의 방법을 조합해서도 감지를 해낼 수 있다. 하지만 애매하거나 잘 보이지 않는 것은 그것부터 찾아서 밝혀내야하고 그 자체가 쉽지 않다.
이상징후에서 말하는 패턴은 매우 광의적인 것으로 정의하기가 모호하지만 조금 더 구체적으로 하면 다음과 같다. 사실상 모두 아웃라이어를 뜻하는 것이다.
이것들은 사실 앞서 말한 것과 크게 다르지 않다.
이상감지는 아웃라이어를 찾는 것이라고 보면 되는데 아웃라이어를 찾을 때의 비교대상이 과거의 시간, 다른 비슷한 군집등이 되고 이런 것들의 조합이 경우도 많다.
이상감지와 함께 자주 볼 수 있는 용어로는 아웃라이어 감지(또는 이상치 감지)가 있다. 간단히 설명하면 아웃라이어는 시간과 관련이 없이 대상을 표현하는 숫자들의 위치를 보고 보편적인 대상과 벗어난 것을 찾아내는 것이고 이상감지는 시간 또는 순서가 있는 흐름에 따른 패턴이 보편적인 상황 또는 보편적인 패턴들과 다른 것들을 찾아내는 것이다.
이상감지는 시계열과 관련이 깊고 아웃라이어는 시간과는 대부분 관련이 없다.
좁은 의미로는 다음과 같다.
이상감지의 목표는 감지이다. 이상한 것을 가능한 빨리 찾아야 하는 것이 주된 목표이다.
다음과 같은 정의하는 단계를 명확히 하고 시작해야 한다.
다음 단계로는 탐지 방법을 선택해야 하는데 이 부분이 가장 어렵다. 정해진 방법이 없기 때문이다.
다음에 대한 체크리스트를 확인해하는 것부터 시작한다.
1번의 경우에 정답데이터가 있다면 지도학습, 반지도학습을 통해서 문제를 해결하는 것을 시도해볼 수 있다. 다음과 같은 알고리즘을 후보에 두고 진행하는 것이 일반적이다.
정답데이터가 없거나 매우 적다면 분류기반의 기계학습 알고리즘으로 이상감지를 찾아내는 것은 매우 어렵다.
2번의 문제는 outlier detection과 anomaly detection을 구분하는 것이며 anomaly detection이 연산량이 많이 들고 더 어렵다. 이상감지는 일반적으로 시계열 데이터인 경우가 많다. 만약 시계열 데이터가 아니라면 outlier를 찾는 각종 알고리즘이나 잘 알려진 모형들을 찾아서 사용하면 된다.
3번의 문제 단변량과 다변량의 문제는 보통 시계열에서 문제가 되는데 다변량은 여러 변수를 모두 보고 이상한 상태를 종합적으로 판단하는 것으로 매우 어렵다. 현재 잘 알려진 유력한 알고리즘은 없다.
4번의 문제는 “이상하다”라고 표기만 해주면 되는지 “이상한 정도”가 얼마나 되는 점수화해서 후에 임계값으로 감지의 정확도와 민감도를 조절할 것인지이다. 역시 후자가 더 어렵다.
결국 대부분의 경우 학습데이터를 사용할 수 없으므로 이상한 것(anomalous object)을 찾기전에 이상하지 않은것(normal)이 무엇인지 개념 정리를 해야하고 이상하지 않은 것과 이상한 것을 구별하는 것으로 접근해야 한다.
이상징후의 문제는 알고리즘도 중요하지만 연산량이 매우 많이 소모되는 경향이 있다.
기계학습으로 이상감지를 접근하기 어려운 이유가 현실에서는 이상한 패턴이라고 발견하고 규정할 수 있는 학습데이터(training set)가 없거나 매우 부족해서 분류 모델을 만들 수 없는 경우가 대부분이므로 비지도학습(unsupervised learning)이나 통계 및 수리 모형을 만들게 되는데 이때 이상한 것을 찾기 위해 대량의 데이터를 여러 방법으로 결합하고 뒤져봐야 하는 경우가 많으며 특히 시계열 데이터는 이상감지와 같은 것을 하려면 처리 연산량이 매우 많다.
이상을 감지했는데 오감지로 인해 발생하는 것 손실이 크다면 이상감지는 더욱 어려운 문제가 된다. 모든 분류 및 예측에 관련된 기계학습 기술이 동일한 문제와 부딪히지만 오탐지(false alarm)으로 인한 손해비용이 크다면 매우 높은 정확도를 탐지모델에 요구하게 되고 문제를 또다시 더 어렵게 만든다.
어느 정도의 정확도를 원하는지 얼마만큼의 오탐지(false alarm)를 수용할 수 있는지 요구사항을 주는 사람이 정확히 정의해 주어야하며 그렇지 않은 경우에는 업무를 담당하게 된 데이터사이언티스트가 제안을 해 주어야 한다.
이삼가지와 사기감지는 관련이 깊다. 하지만 사기감지가 이상감지 보다는 범위가 넓고 까다롭다.
사기꾼은 언제나 들키지 않기 위해서 매우 노력하는데 이를 찾아내기 위해서는 아직 나타나지 않은 이상한 것과 매우 간헐적인 이상한 패턴, 또는 매우 드물지만 이상한 패턴을 찾아내야 하기 때문이다.
이상감지는 시스템 운영, 보안 관련 시스템, 제조업과 같은 공정 데이터 관리 등에 많이 활용되고 있으며, 사용자 행동(behavior)에 대해서도 활용이 가능하다. 그 외에 대부분의 비즈니스에 모두 활용이 가능하다. 매우 광범위하다고 할 수 있다. 이상징후와 아웃라이어는 데이터마이닝에서 찾고자 하는 가치와 부합되는 것이 많기 때문이다.
비즈니스 분석에 있어서 이상감지는 대부분 데이터마이닝의 문제와 비슷하다. 관련된 현실에서의 이상감지와 관련된 문제를 찾으려고 하면 무궁무진하게 많다.
어떤 리테일(retail) 제품을 판매하는 회사의 특정 판매채널이 전에 비해서 또는 다른 판매채널에 비해서 매출이 증가했거나 감소했는지를 찾는다. 찾고난 후에는 문제가 무엇인지 확인하고 조치하는데 사용할 수 있다. 하지만 소비자에게 판매되는 것은 계절요인(seasonal components), 외생요인(external components)의 문제가 있기 때문에 쉬운 것은 아니다.
이것은 이상감지가 아니고 단지 BI(Business Intelligence)를 이용한 경영 분석이 아닌가라고 물을 수 있다. 하지만 기준치를 넘지 않았지만 예전에 비해서 주문량이 증가하는 거래처를 찾는 것은 쉽지 않다. 주문량이 매우 크게 늘어난 것은 아니지만 거래처의 비즈니스가 실제 호황인지 이유가 무엇인지를 알아내야 할 것이다. 그리고 더 늘어날 조짐이 있는 거래처가 다수 늘어났다면 판매를 위해서 미리 제품의 생산을 늘려야 할 것이다.
위와 유사한 사례로 구매량이 이전에 비해 소폭 감소했지만 크게 떨어진 것은 아니며 잠깐 동안의 스파이크성으로 구매량이 감소한 것이 아닌 중, 장기로 볼 때 구매량이 떨어질 것 같은 것을 감지하는 것이다.
컴퓨터 시스템 관리는 이상감지가 가장 잘 적용되어 왔고 이상감지를 많이 발전시킨 분야 중의 하나이다. 특히 서버, 스토리지, 네트워크 장비의 이상발생은 장애와 직결되고 장애는 매출 및 운영비와 직결되는 경우가 많기 때문이다.
참고
영어 단어를 abnormal로 하지 않고 anomaly로 하는 것을 철자 오류라고 생각할 수 있는데 anomaly는 영어사전에 등록된 단어이며 명확한 의미를 볼 때도 적절한 단어다. abnormal은 외관이나 모양에 대한 이상함을 뜻하며 anomaly는 속성, 성격, 성질 같은 것들이 이상한 것을 뜻한다고 한다. 영어 문화권의 네이티브(navive) 원주민이 아니면 이 뉘앙스를 구분하기 어렵다고 한다.
이상감지 알고리즘을 찾는 사람들이 많을텐데 생각보다 이상감지라고 정의되어 있는 알고리즘 수는 적다. 아래에 소개하는 것들은 비교적 잘 알려진 알고리즘들이며 이 것외에도 활용에 쓰이는 것은 매우 많다는 것을 알려둔다. 아웃라이어에 해당하는 알고리즘이나 방법은 제외하였다.
Twitter Anomaly Detection 이라고 부르는데 Twitter에서 발표한 이상감지 알고리즘이 있다. 알고리즘의 정식 명칭은 S-H-ESD이라는 매우 복잡해 보이는 이름이다. 하지만 정식 명칭 보다는 “트위터 이상감지 알고리즘”이라고 더 많이 부른다.
소스는 아래의 깃헙 저장소에서 볼 수 있다.
R언어로 작성되어 있으며 Python으로 포팅된 것도 있다.
이것은 알고리즘 이름이라고는 할 수 없는데 이베이에서 사용하는 통계적인 방법을 사용한 이상감지에 대한 내용이다.
이베이의 블로그에서 볼 수 있다.
트위터 알고리즘의 원형으로 알려져 있다. 트위터 이상감지 알고리즘이 이 알고리즘을 개량한 것이다.
다음의 두 페이지에서 내용을 확인할 수 있다.
이상감지에도 많이 사용되는 홀트윈터스 필터이다. Elastic에서 X-pack의 이상감지 알고리즘을 홍보하면서 X-pack의 이상감지가 이 알고리즘과 비교(벤치마크)했을때 더 성능이 좋다고 주장하고 있다.
알고리즘이라기 보다는 엔진이라고 불러야 하는 것이 더 맞을 것이다. 여러가지 방법을 섞은 것으로 알려져 있고 소스코드는 오픈되어 있다고 하지만 실제로 찾을수는 없다.
비지도학습으로 가장 성능이 좋은 것으로 알려진 것은 Robust Random Cut Forest(로버스트 랜덤 컷 포레스트)인데
이 알고리즘은 아마존(Amazon)에서 만들었다. 유명한 앙상블 결정트리(Ensemble Decision Tree)알고리즘인 랜덤포레스트의 컨셉을 사용하고 있다.
여러가지 좋은 기능을 가지고 있으며 성능도 좋지만 모델을 생성하는 속도가 느리다는 단점이 있다. 즉, 학습이 매우 느리고 컴퓨팅 자원을 매우 많이 사용한다.
내용 추가 예정
내용 추가 예정