CoDIP을 활용하여 1차원 시계열 데이터에 포함된 change point들을 자동으로 탐지하자.(1)

글쓴이 Inforience 날짜

클릭 >> Hello, world !! (from ShadowEgo)

Go to English ver. of this article. (https://inforience.net/2018/03/12/changepoints1d-1/)

다음과 같은 일을 하는 시스템을 생각해 보자.

  • 당신의 집중력이 갑자기 떨어지기 시작하는 순간을 자동으로 탐지
  • 자동차의 주행 상태가 갑자기 변화하는 순간을 자동으로 탐지
  • 기계의 동작 상태가 갑자기 변화하는 순간을 자동으로 탐지
  • 새벽 시간의 낯선 소리나 움직임을 자동으로 탐지
  • 기후가 갑자기 더워진 순간을 자동으로 탐지
  • 주가가 갑자기 폭락하는 순간을 자동으로 탐지
  • 성적이 떨어지기 시작한 순간을 자동으로 탐지

데이터의 변화를 당신이 직접 계속 관찰할 수 있다면, 이런 작업은 별로 어렵지 않을 것이다. 데이터가 변화하는 순간을 직접 찾아내면 되니까. 그러나, 24시간 내내 눈에 힘을 주고 데이터를 쳐다볼 수 있는 사람은 없다. 이러한 관찰 작업은 컴퓨터에게 맡겨야 한다. 다시 말해서, 컴퓨터에게 이렇게 말하는 것이다. “나는 데이터를 계속 넘겨줄 테니, 이상한 패턴이 발견되면 알려 줘”.

IoT 장치가 폭발적으로 늘어나 누구나 직접 센서 데이터를 모을 수 있고, 웹이나 클라우드에서도 다양한 데이터를 쉽게 얻을 수 있게 되었다. 앞으로는 데이터 과학자나 엔지니어가 아니더라도 자신의 데이터로부터 중요한 순간을 직접 탐지하고자 하는 사람들이 늘어날 것이다. 따라서, 내가 모은 데이터를 계속 전송하면 중요한 패턴을 지능적으로 탐지해서 알려주고 관련작업까지 수행하여 주는 기능이 있다면 참 좋을 것이다.

이 주제에 대해서는 Outlier Detection, Change Point Detection, Anomaly Detection 등과 같은 분야에서 세계적으로 많은 연구가 진행되고 있다. 데이터에 대한 사전지식이 없는 상황에서도 중요한 패턴들을 스스로 탐지하는 효율적인 알고리즘을 만들기 위한 연구들이다.

그런데, 패턴을 탐지하는게 그렇게 어려운 일인가?

F1

그림 1. 지난 2년간 온라인 뉴스에서 ‘가상화폐’가 언급된 추세

패턴을 간단한 룰로 표현하여 입력하면 탐지할 수 있다. 예를 들어, 온도가 섭씨 20도 이상으로 올라가면 탐지하게 하거나, 주가가 10% 상승하면 탐지하게 할 수 있다. 이러한 룰은 간단한 코드로 표현할 수 있다. 그러나 데이터에는 다양한 패턴들이 무수히 포함될 수 있으므로, 탐지하고자 하는 모든 패턴을 사전에 예측하여 정의할 수는 없다. 중요한 패턴들과 중요하지 않은 패턴들을 미리 구분하는 것도 쉽지 않다. 설상가상으로, 데이터에는 노이즈가 많이 들어있을 수 있다.

쉽지 않은 일에 도전해 보자.

이번 포스팅에서는 인포리언스가 독자적으로 개발하고 있는 change point detection 방법을 sample data에 적용한 결과를 설명한다. 이 방법은 CoDIP에 탑재된 자동 패턴 분석 기능(CoDIP-PA)에 속한다. 실제 데이터에 적용한 예들과 이 기술을 바탕으로 지능적인 서비스를 구축하는 방법은 추후에 소개한다.

(1) 적정 수준을 유지하던 데이터가 갑자기 변화하는 순간을 탐지한다.

학업 또는 업무 성적이 이미 충분히 좋다면 계속 유지하는게 좋겠지만, 떨어지는 순간이 있을 수 있다. 이러한 변화가 생기면 그 타이밍과 이유를 알아야 한다. 내가 좋아하는 아이돌 그룹이 갑자기 뉴스에서 많이 언급되면 왜 그런지 궁금하다. 집에 아무도 없을 때 출입문은 움직이지 않는 것이 당연한데, 움직임 레벨이 갑자기 상승하면 비상상황일 수 있다. 습도를 적정 수준으로 유지해야 하는 환경에서는 습도가 갑자기 떨어지게 되면 문제가 될 수 있다. 이러한 상황들을 빨리 탐지하면 문제를 잘 해결할 수 있다.

F2a

그림 2-(a)

F2b

그림 2-(b)

그림 2-(a)는 데이터의 값이 갑자기 변화한 상황을 나타내며, 그림 2-(b)는 CoDIP-PA가 변화의 타이밍을 찾아낸 결과를 나타낸다. 사실, 이 정도의 change point를 찾는 작업은 그다지 어려워 보이지 않는다. 데이터가 특정 값 이상으로 상승하는 순간을 탐지하게 하면 된다. 그러나, 그러한 탐지 기준을 구체적으로 미리 다 정하는 것은 불가능하다.

F3a

그림 3-(a)

F3b

그림 3-(b)

그림 3-(a)는 다양한 규모의 급격한 상승과 하강 패턴이 여러 번 나타난 상황을 보여준다. 그림 3-(b)는 CoDIP-PA가 변화가 발생한 타이밍을 탐지한 결과를 나타내는데, 변화의 규모에 상관없이 모두 찾아내었다. 그러나 사실, 이것도 그다지 어려워 보이지는 않는다.

F4a

그림 4-(a)

F4b

그림 4-(b)

그림 4-(a)는 노이즈와 급격한 변화가 모두 포함된 데이터에서 노이즈에 의한 모든 변화를 탐지한 경우를 보여준다. 이에 비해 그림 4-(b)는 노이즈는 무시하고 크고 중요한 변화만을 탐지해 낸 결과이다. CoDIP-PA는 초기에 확인한 일부 데이터의 특성을 바탕으로 노이즈의 존재를 확인하고 중요한 변화만 찾아낸다.

(2) 일정한 변화 패턴을 유지해야 하는 데이터가 급작스레 다른 패턴의 변화를 나타내는 순간을 탐지한다.

F5a

그림 5-(a)

그림 5-(a)는 sinusoidal 데이터이다. 온도와 습도 데이터를 측정해 보면, 낮에는 온도가 높지만 밤이나 새벽에는 온도가 낮다. 습도는 온도의 변화와 반대의 움직임을 보이는 경우가 많다. 이렇게 늘 일정한 패턴을 보이던 데이터에 생소한 패턴이 나타난다면 탐지할 수 있을까?

F5b

그림 5-(b)

F5c

그림 5-(c)

그림 5-(b)는 낯선 패턴이 포함된 경우를 나타낸다. 그리고 그림 5-(c)는 CoDIP-PA가 낯선 패턴을 탐지한 결과를 보여준다. 낯선 패턴을 보인 이후, 그래프가 다시 원래의 패턴으로 돌아가면 정상적인 상황으로 인식한다.

F5d

그림 5-(d)

그림 5-(d)은 낯선 패턴이 여러 번 나타난 경우이다. CoDIP-PA는 낯선 패턴이 나타난 모든 순간들을 빠짐없이 탐지해 낸다. 급격하게 꺾인 형태를 나타내는 위치들을 잡아내고 나머지는 정상 패턴으로 인식한다.

(3) (데이터 범위의 변화가 없는 가운데) 주파수의 변화가 나타나는 순간을 탐지한다.

어떤 장비가 일정하게 움직이다가 갑자기 움직임이 빨라지는 경우를 생각해 보자. 혹시 고장 아닐까? 아니면 적어도 장비의 상태가 악화되고 있는 것은 아닐까? 이러한 패턴 변화를 찾아내는 것은 중요하다.

F6a

그림 6-(a)

F6b

그림 6-(b)

그림 6-(a)는 일정한 반복 패턴을 보이던 데이터가 어느 순간부터 주기가 점점 짧아지는 경우를 나타낸다. (데이터 수치의 범위에는 변화가 없다.) 그림 6-(b)는 주기가 변화한 타이밍을 CoDIP-PA가 탐지한 결과를 보여준다.

F7

그림 7

그림 7은 주기에 변화가 생겼다가 원래의 주기적 패턴으로 돌아온 경우이다. CoDIP-PA는 정확하게 주기가 변화한 타이밍만 탐지한다.

(4) Main fluctuation에 작은 fluctuation 또는 노이즈가 포함되었을 경우 Main fluctuation의 변화만 탐지한다.

F8a

그림 8-(a)

F8b

그림 8-(b)

F8c

그림 8-(c)

그림 8-(a)는 작은 fluctuation이 main fluctuation에 섞여 있는 데이터를 보여준다. Main fluctuation의 주기는 점점 작아지고 있다. 지능이 부족한 방법을 적용하면 작은 fluctuation들을 모두 탐지하는 반면에 main fluctuation의 변화를 제대로 구분하지 못한다. (그림 8-(b)) 그러나 CoDIP-PA는 데이터의 성격을 파악하여 main fluctuation의 주기가 변화하는 순간만을 탐지한다. (그림 8-(c))

F9a

그림 9-(a)

F9b

그림 9-(b)

F9c

그림 9-(c)

그림 9-(a)는 main fluctuation에 심한 노이즈가 섞인 경우를 나타낸다. 이 경우에도 CoDIP-PA는 데이터의 성격을 파악하여 main fluctuation의 주기가 변화하는 순간만을 탐지한다. (그림 9-(c))

다른 알고리즘들은 어떨까?

위의 결과들은 CoDIP-PA가 스스로 데이터의 특성에 적응하여 찾아낸 결과들이다. 다른 알고리즘들은 동일한 데이터에 대해 어떠한 탐지결과를 만들까? 오랫동안 연구되어 온 Bayesian Changepoint Detection[1, 2, 3] 및 유명한 luminol 라이브러리[4]를 동일한 데이터 패턴에 대해 적용한 결과를 살펴보자.

F10-a

F10-b

그림 10. Bayesian Changepoint Detection 방법 및 luminol 라이브러리를 적용한 결과

그림 10에서 볼 수 있듯이, Bayesian Changepoint Detection 방법과 luminol 라이브러리는 간단한 형태의 change point는 탐지하는 듯 했으나, 복잡한 형태의 change point들을 탐지하는 데에는 실패했다. 특히, 부드러운 곡선 형태의 시계열 데이터에 포함된 변화 포인트를 탐지하는데에는 크게 실패했다. 또한 중요하지 않은 point들을 탐지하는 경우도 많다. 이 결과를 통해 우수한 chage point detection 방법을 개발하는 것이 얼마나 어려운 지를 확인할 수 있다. 또한 이것은 인포리언스가 개발한 chage point detection 기술의 성능이 상대적으로 우수함을 의미한다.

참고문헌

[1] Paul Fearnhead, Exact and Efficient Bayesian Inference for Multiple Changepoint problems, Statistics and computing 16.2 (2006), pp. 203–213

[2] Ryan P. Adams, David J.C. MacKay, Bayesian Online Changepoint Detection, arXiv 0710.3742 (2007)

[3] Xuan Xiang, Kevin Murphy, Modeling Changing Dependency Structure in Multivariate Time Series, ICML (2007), pp. 1055–1062

[4] https://github.com/linkedin/luminol