태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

엑기스 | 쉽게 이해하는 시계열데이터 비정상탐지

기술이야기/엑.기.스 2018.09.05 13:29


"엑기스"라는 단어, 어떤 느낌이신가요?

무언가 알차게 꽉- 농축되어 있는 그 느낌!

지금부터 엑셈의 기술 스토리, 엑기스를 알차게 전해드립니다!

엑기스 첫 번째 스토리, 지금 시작합니다.


불과 1개월 전만해도 111년만에 한국 사상 최고의 더위가 찾아왔었다.

Figure 1. 정말 너무 더웠다...

<출처 | YTN NEWS(http://www.ytn.co.kr/)>


현재 낮기온은 1개월 전보다 섭씨 10도씨 이상 낮아지고 일교차는 크게는 15도정도 난다.

이런 비정상'스러운' 날씨를 어떻게 발견할 수 있을까? 미리 예측은 할 수 있을까?

웹 어플리케이션을 운영하는데 디도스(DDOS) 공격이 온 것을 빠르게 알아낼 수 있을까?


시계열 데이터


위에 언급한 문제들을 풀기 위한 답은 '데이터'에 있다. 날씨의 경우에는 우리나라의 역사적으로 기록된 기온과 주변 국가, 지구의 기온 변화 등이 모두 데이터로 사용될 수 있다.

또한 DDOS 공격으로부터의 빠른 탐지는 '기존 데이터'를 잘 분석한다면 비정상 움직임을 캐치할 수 있을 것이다. 이처럼 매력적인 시계열 데이터에 대해서 조금 더 알아보자.


시계열 데이터를 다루는 사람들의 관심 있는 주제는 보통 크게 2가지이다.


1.데이터 예측

2.비정상데이터 탐지


오늘 이 글에서 얘기하고자 하는 것은 1번 예측이 아닌 2번 비정상데이터 탐지이다.


비정상데이터


Figure 2 비정상회담과 비정상탐지는 아무 관련이 없고 이 글은 상사가 시킨 글쓰기가 아니다.

<출처 | JTBC 비정상회담 화면 캡쳐(http://tv.jtbc.joins.com/nonsummit)>


시계열 데이터에서 비정상이라고 하면 뭘까? 일반적인 비정상에 대해서 사전을 통해 알아보도록 하자. 

네이x 사전에 의하면 비정상의 사전적 의미는 '정상이 아님'이라고 정의한다.

그렇다면 정상 또 정상이 뭔지 찾아보도록 하자.

Figure 3 정상의 정의

<출처 | 네이버 국어사전(https://ko.dict.naver.com/search.nhn?query=%EC%A0%95%EC%83%81&kind=all)>


그렇다. 우리가 직관적으로 예상할 수 있는 대로 탈 없는 상태이다. 

결국 비정상 데이터라고 하면 '탈이 있는 데이터'이고 우리는 이를 잘 탐지하기만 하면 된다.


흔히 비정상 데이터를 다음의 3가지 경우로 분류한다.


1.평소보다 데이터가 심하게 크거나 작을 경우

2.일시적인 데이터의 패턴 변경

3.데이터의 크기 변경


대부분의 비정상 데이터들은 위의 3가지 분류에 속하게 된다.


어떤 데이터로


데이터분석은 같은 데이터의 모양이라고 하더라도 도메인에 따라서 접근법이 많이 다를 수 있다. 

결국 고객이 무엇을 원하는지 요구사항을 잘 파악하여야 문제를 잘 정의하고 이에 따른 분석방법, 해결책이 나올 수 있다.


필자의 의견인데 좋은 알고리즘과 모델을 찾는 것보다 요구사항을 분석하고 문제를 정의하는 과정이 제일 중요하다고 생각한다.

온천수가 나오는 땅을 찾기 위해 삽질을 해야하는데 이를 은삽으로 팔지, 금삽으로 팔지, 모종삽으로 팔지, 혹은 포크레인 기사를 불러서 땅을 파야할 지 고민하기 전에 우리 집 마당인지 뒷 산인지, 이 땅의 성분 요소는 무엇인지 잘 아는 것이 더 중요하다. 아무리 좋은 삽을 고르더라도 남의 땅을 파면 안되는 것 아닌가?


이 글에서는 서버 위에 가상 쇼핑몰을 만들고 부하를 만들어서 얻어낸 데이터베이스의 Active session data를 가지고 여러가지 시도를 해보도록 하겠다.


가장 쉬운 접근 방법


STL decomposition

STL Decomposition은 시계열 데이터를 Seasonal, Trend and residual로 분해하여 분석하는 알고리즘이다.

Figure 4 Y(t) = S(t) + T(t) + R(t)


STL은 트렌드를 찾아내는 곳에서도 사용될 수 있지만 Residual Graph를 잘 보면 비정상포인트를 찾을 수 있다. 

python에 STL library들이 많기 때문에 구현이 쉽고 데이터의 특성을 확인하기 편하다.


장점

장기적 데이터에서 뚜렷한 주기, 트렌드를 구분 짓고 구현이 쉽다.

단점

데이터가 많이 출렁이거나 등락이 강할 경우에 트렌드함을 가지지 못해 분석 결과를 결론 짓기 애매한 경우가 많다.


Classification and Regression Trees

필자도 학습자이기에 Anomaly detection in time series 이런 식으로 구글링을 해보면, 자주 나오는 것이 CART(Classification and Regression Trees)이다.

정상과 비정상데이터가 레이블링(Labeling)이 되어있는 데이터를 가지고 있을 때 사용할 수 있다. 

최근 캐글(Kaggle)을 통해서 핫해진 xgboost의 경우도 CART의 진보된 버전이다.

Figure 5 CART의 시작


장점

Supervised learning이므로 다른 알고리즘보다 한단계 더 직관적 결과를 얻을 수 있다.

단점

Labeling data가 없으면 분석이 불가능하다.


Moving Average

Moving Average(a.k.a 이동평균선)은 데이터의 추세를 볼 수 있는 가장 고전적이고 쉬운 방법이다. 

간단하게 앞선 특정 기간의 데이터값의 평균값을 데이터로 하여 전 구간의 평균값을 구하는 것이다.

이동평균선을 구하고 각 지점에서의 표준편차값을 이용해 신뢰구간을 그린 다음에 실제 데이터들이 이 신뢰구간을 벗어났다면 비정상이라고 판단할 수 있다.


(빨간 동그라미) 이동평균선을 통해 비정상탐지를 할 때 가장 중요한 점은 '어느 기간의 이동평균'을 잡느냐가 중요하다. 

데이터의 성격에 따라 달라지니 반복된 수행을 통해 최적의 윈도우 사이즈를 찾아야한다.

Figure 6 이동평균선을 이용한 비정상탐지 - 빨간 원


장점

계산이 빠르고 직관적이고 어느 데이터에서든 사용이 가능하다.

단점

많은 테스트가 필요하고 사용자의 경험치가 중요하다. (윈도우 사이즈 결정 시) 추가적으로 비정상 케이스 1번의 경우에만 잘 맞는 경향이 있다.


Prophet

페이스북에서 만든 비정상탐지 알고리즘이다. 이 알고리즘의 가장 큰 장점은 사용하기 쉽다는 점이다. 그 이상은 없는 것 같다.

아주 예쁜 데이터의 경우 잘 들어 맞지만 예측 커브를 아주 예쁘게 그리는 바람에 진폭이 큰 데이터의 경우 정확도가 떨어지는 경향이 많다.


아래 그림에서 보면 회색 밴드를 벗어난 붉은 원으로 표시된 곳이 비정상으로 벗어난 곳이라고 할 수 있다.

Figure 7 Prophet library를 이용한 비정상탐지

장점

구현이 쉽고 Daily, Weekly, Montly 등 장기적 데이터에 적합하다.

단점

Library에 종속되어서 데이터에 따른 디테일한 변경이 쉽지 않다.


조금 더 심도있게


Clustering

K-means Clustering을 이용하여 비정상탐지를 할 수도 있다. 

이 때 주요 개념으로 rolling(혹은 moving) window를 이용하여 클러스터링을 위한 데이터셋을 만들고 이를 K-means를 이용하여 모델을 학습한다.


그리고 새로운 데이터(혹은 기존 데이터)를 분석하여 기존에 가지고 있던 클러스터(군집)에 분류시켜 이상치를 벗어난 데이터들을 발견해낸다.

Figure 8 Clustering을 이용한 비정상탐지


장점

데이터의 크기와 패턴을 고려해 비정상탐지를 하여 비정상 포인트를 포함한 구간을 찾는데 유용하다.

단점

메모리 사용량이 꽤 많고 정확한 지점을 찾기 힘들다.


Neural Networks - LSTM

좋은 연구 과제이다. 정확도 높은 네트워크를 찾는다면 이보다 좋은 모델은 없을 것이다. 

LSTM은 특히 NN에서 time을 고려한 모델인만큼 데이터의 성격에 따라 효과가 클 것이라고 생각한다.


하지만 이 분야는 계속 연구 중이고 데이터 의존성이 크기 때문에 많은 시도와 모델 튜닝이 필요하다.

Figure 9 여러분의 과거 데이터를 봤을 때 새벽 1시에 치킨을 먹는 것은 정상입니다. ???


그래서 뭐가 좋은지?


그래서 어떤 알고리즘을 써야 하는지 알고 싶으면? 정답은 데바데(데이터 바이 데이터, Data by Data). 


그럼 어떤 데이터의 경우 가장 맞는 알고리즘인지 알려면? 

가장 쉬운 알고리즘부터 하나씩 적용해보면서 좋은 결과가 나오는 알고리즘을 택하는 것이다. 


글의 서두에 말한 데이터베이스의 active session 수를 파악하는 데에는 단기적으로는 Moving average가, 장기적으로는 Prophet이 적용가능한 범주에 있었고 결과 또한 좋았던 것 같다.

이래나 저래나 비정상이라고 탐지한 것들이 정확성을 체크하기 위해서는 그 역으로 판단을 해봐야한다. 

메모리 사용에 제한이 없는 report 하기 위한 데이터분석 과정이라면 여러 알고리즘을 사용해서 중복된 포인트들을 찾는 것도 나름의 방법이다.




(급)마무리


시계열 데이터로 미래 예측, 비정상탐지, 인과관계 분석 등을 팀에서 연구하고 있다. 비정상탐지의 경우에는 Moving average를 기반으로 단기적 변화에 대해서 탐지하고 있고 Prophet library에서 아이디어를 발전 시켜서 장기적 비정상을 탐지하고 있다.

우리가 잘 해결한 부분도 있고 부족한 부분도 있지만 문제 해결을 함께 해 나감에 있어 도메인 지식이 있는 동료들과 분석에 함께 아이디어를 내주는 동료들의 도움이 큰 것 같다.

추가로, 비정상탐지 후에 다음 단계가 인과관계 분석, 근본원인 분석인데 서비스 개발이 완료된 후에 공유하도록 하겠다.






기고 | 강남연구소 김정우

편집 | 사업기획팀 박예영