gimmesilver's blog

Agbird.egloos.com

포토로그



pxd talks #70 - 데이터 분석을 통한 게임 유저 모델링 데이터분석

  지난 주 pxd 라는 회사에서 데이터 분석을 이용한 게임 유저 모델링을 주제로 발표를 했습니다. UX 관련 회사이고 직원분들 대부분이 데이터 분석과 직접적인 관련이 없다고 들었는데 예상외로 굉장히 열심히 들어주시고 질문도 많이 주셔서 놀랐습니다. 오히려 제가 충분히 원하시는 정보나 답변을 못드린 것 같아 죄송하네요. 
  혹시 관심있으신 분들을 위해 해당 자료 공유합니다.




선형 회귀 모델에서 '선형'이 의미하는 것은 무엇인가? 데이터분석

1. '선형(linear)'은 x의 1차 다항식을 의미하는 것이 아니다.
  인터넷에 돌아다니는 많은 자료들을 보면 선형 회귀 모델을 잘못 설명하고 있습니다. 이런 자료들을 보면 공통적으로 선형 회귀 모델의 의미를 독립 변수(x)와 종속 변수(y) 간의 관계가 일차식으로 표현되는 것이라고 설명하고 있습니다. 그래서 독립 변수를 제곱근이나 로그 함수 등을 이용해서 적당히 변환하면 비선형 모델을 선형 모델로 만들 수 있다고 설명합니다. 그러나 이것은 '선형'의 의미를 잘못 이해하고 있는 것입니다. 즉, 아래 그림에서 왼쪽 그림은 선형 모델이고 오른쪽 그림은 비선형 모델이라고 설명하는 경우가 많은데 잘못된 예시입니다(둘 다 선형 회귀 모델로 표현 가능합니다).

<그림 1> 선형 회귀 모델과 비선형 회귀 모델로 각각 검색했을때 나오는 대표적인 이미지 예

  선형 회귀 모델은 '회귀 계수(regression coefficient)를 선형 결합으로 표현할 수 있는 모델'을 말합니다. 즉, 독립 변수가 일차식이냐 이차식이냐 로그 함수식이냐가 아니라 우리가 추정할 대상인 파라미터가 어떻게 생겼느냐의 문제입니다. 가령 아래 함수들은 모두 선형 회귀식입니다.

  왜냐하면 위 식들은 x나 y를 적절히 변환하면 모두 아래와 같이 회귀 계수(베타 0, 베타 1, ...)의 선형 결합 함수로 표현이 가능하기 때문입니다. (아래 식에서 log 는 모두 자연 로그)

  비록 위와 같이 데이터 변환을 통해 선형 회귀식으로 표현가능한 회귀식을 좀 더 엄밀하게는 linearizable regression model(우리말로 하면 선형 가능 회귀 모델?)이라고 구분하여 부르기도 하지만 포괄적으로 봤을 때는 그냥 선형 회귀 모델이라고 부르는 것이 맞습니다. 왜냐하면 이런 linearizable regression model 의 파라미터를 추정할 때도 일반적인 선형 회귀 모델과 동일한 기법을 사용하기 때문입니다.

2. 그럼 비선형 회귀 모델은 무엇인가?
비선형 모델은 데이터를 어떻게 변형하더라도 파라미터를 선형 결합식으로 표현할 수 없는 모델을 말합니다. 이런 비선형 모델 중 단순한 예로는 아래와 같은 것이 있습니다. 이 식은 아무리 x, y 변수를 변환하더라도 파라미터를 선형식으로 표현할 수 없습니다.

  선형 회귀 모델은 파라미터 계수에 대한 해석이 단순하지만 비선형 모델은 모델의 형태가 복잡할 경우 해석이 매우 어렵습니다. 그래서 보통 모델의 해석을 중시하는 통계 모델링에서는 비선형 회귀 모델을 잘 사용하지 않습니다.
  그런데 만약 회귀 모델의 목적이 해석이 아니라 예측에 있다면 비선형 모델은 대단히 유연하기 때문에 복잡한 패턴을 갖는 데이터에 대해서도 모델링이 가능합니다. 그래서 충분히 많은 데이터를 갖고 있어서 variance error를 충분히 줄일 수 있고 예측 자체가 목적인 경우라면 비선형 모델은 사용할만한 도구입니다. 기계 학습 분야에서는 실제 이런 비선형 모델을 대단히 많이 사용하고 있는데 가장 대표적인 것이 소위 딥 러닝이라고 부르는 뉴럴 네트워크입니다.

3. 결론
  정리하자면, 선형 회귀 모델은 파라미터가 선형식으로 표현되는 회귀 모델을 의미합니다. 그리고 이런 선형 회귀 모델은 파라미터를 추정하거나 모델을 해석하기가 비선형 모델에 비해 비교적 쉽기 때문에, 데이터를 적절히 변환하거나 도움이 되는 feature들을 추가하여 선형 모델을 만들 수 있다면 이렇게 하는 것이 적은 개수의 feature로 복잡한 비선형 모델을 만드는 것보다 여러 면에서 유리합니다.
  반면 선형 모델은 표현 가능한 모델의 가짓수(파라미터의 개수가 아니라 파라미터의 결합 형태)가 한정되어 있기 때문에 유연성이 떨어집니다. 따라서 복잡한 패턴을 갖고 있는 데이터에 대해서는 정확한 모델링이 불가능한 경우가 있습니다. 그래서 최근에는 모델의 해석보다는 정교한 예측이 중요한 분야의 경우 뉴럴 네트워크와 같은 비선형 모델이 널리 사용되고 있습니다.

실전 데이터 분석에서 염두해야할 사항 데이터분석

링크: http://www.unofficialgoogledatascience.com/2016/10/practical-advice-for-analysis-of-large.html

데이터 분석을 할 때 꼭 필요한 팁이 잘 정리되어 있어 데이터 분석에 관심있으신 분들은 꼭 한번 읽어보면 좋겠습니다. 




회귀 분석을 이용한 시계열 데이터 이상 탐지 데이터분석

준비 중인 논문의 draft 버전입니다.

* * * * *

1. Introduction

  이상 탐지는 보안 분야에서 폭넓게 사용되는 기법이다. 외부에서의 공격자에 의한 시스템 공격, 내부자에 의한 정보 유출, 악성 유저의 어뷰징, 사기 행위 등을 탐지하기 위해 다양한 이상 탐지 기법이 개발되어 적용되고 있다. 기본적으로 이상 탐지는 정상적인 행위에 대한 사전 프로파일링 이후에 이런 정상 범주에서 크게 벗어나는 행위나 이벤트를 탐지하는 것을 말한다. 그런데 실제 이상 탐지를 위해 실전 데이터를 분석하면 정상적인 행위를 정의하기 매우 어렵거나 혹은 정상적인 행위와 비정상 행위를 구분할 수 있는 적절한 특질 데이터(features)를 확보하지 못하는 경우가 많다. 예를 들어, 탐지 대상 데이터가 다양한 특질로 구성된 경우가 아니라면 정상 데이터와 비정상 데이터를 구분할 수 있는 정보가 부족하여 비정상 케이스와 정상 케이스가 모두 비슷한 데이터로 이뤄지기 때문에 정확한 탐지가 어렵다. 반대로 데이터의 양에 비해 특질이 너무 많다면 앞선 경우와 반대로 대부분의 데이터가 제각기 다른 형태로 구분되기 때문에 정상 케이스와 비정상 케이스를 구분하기 어렵게 된다. 따라서 효과적인 이상 탐지를 위해선 충분히 많은 수의 데이터를 이용해 정상 케이스와 비정상 케이스를 구분하기 적절한 특질을 선별해야 한다. 그런데 실전에서는 이런 충분한 수의 데이터를 처리하고 적절한 특질을 선택하기 위해 많은 리소스가 필요하다.
  한편 본 연구에서 이상 탐지를 위해 다룬 대상은 시계열 데이터이다. 보통 시계열 데이터의 경우 특정 시간 주기 패턴을 파악하여 모델이나 룰을 만들고 이 패턴에서 크게 벗어나는 이벤트가 발생할 때 이를 이상 현상으로 탐지한다. 예를 들어 웹 서비스에서 발생하는 네트워크 트래픽은 보통 사용자의 생활 패턴에 따라 24시간 주기로 트래픽이 변한다. 따라서 만약 일반적으로 트래픽이 낮은 새벽 시간에 비정상적으로 높은 트래픽이 발생할 경우 이상 현상으로 탐지하는 것이다. 이런 방법은 비교적 구현이나 탐지 모델링이 단순하기 때문에 적용이 쉽지만 오탐이 많이 발생한다. 게다가 예로 든 웹 서비스 트래픽처럼 시간 주기 패턴이 명확한 데이터가 아니라면기존에 시계열 데이터에 많이 사용되는 기법을 적용하기 어렵다.
  따라서 본 연구에서는 특정 시간 패턴을 갖지 않으며 데이터 양이 많지 않은 시계열 데이터에 대해서 효과적으로 이상 탐지를 하기 위해 예측 모델링을 이용한 탐지 기법을 제안한다. 만약 어떤 시계열 데이터가 있을 때 이 데이터와 상관성이 높은 다른 데이터를 이용하면 대상데이터의 수치를 비교적 정확히 예측하는 모델을 만들 수 있다. 그렇게 되면 정상적인 상황에서는 예측치와 실측치 사이의 오차가 작게 유지될 것이다. 그러나 만약 이상 현상이 발생한다면 정상 상황에서 생성한 예측 모델의 예측치와 이상 시점에서의 실측치 사이의 오차가 커질 것이다. 우리는 바로 이런 상황을 탐지하여 이상 현상이라고 판단하는 기법을 제안한다.
  예를 들어 웹서비스에서 시간 당 각 페이지의 방문자 수(Page View, PV)와 순 방문자 수(Unique Visitor, UV)는 서로 밀접한 관련이 있다. 따라서 PV를 predictor로 하고 UV를 response variable로 하는 예측 모델을 만든다면 PV 수치를 이용하여 UV의 예상치를 계산할 수 있다. 가령 A라는 웹 서비스의 과거 시간 당 PV와 UV에 대해 회귀 분석을 하면 아래와 같은 회귀 모델을 만들수 있다고 가정해 보자. 그러면 우리는 PV 수치를 이용하면 UV를 직접 측정하지 않더라도 아래 회귀식을 이용해 UV에 대한 추정이 가능하다.

UV = 0.43 * PV + 0.1

  그런데 DDoS 공격과 같은 이상 현상이 발생한다면 평소에 비해 PV 대비 훨씬 큰 UV가 측정될 것이다. 그러면 이렇게 회귀식을 통해 예상한 UV 수치와 실측 UV 사이의 오차가 비정상적으로 커질 것이고 이를 통해 이상치를 탐지할 수 있다.
  본 연구에서 제안한 방법은 이상 탐지 대상이 되는 시계열 데이터 자체가 정상 상황에서 갖는 특성이나 패턴을 따로 분석할 필요가 없다.따라서 시계열 패턴이 명확하지 않거나 정상과 비정상을 구분하기 모호한 특성의 데이터에 대해서 적용 가능하다는 장점이 있다. 물론 적절한 예측 모델을 만들어야 하기 때문에 모든 경우에 보편적으로 적용할 수 있는 방법은 아니다. 다만 앞서 언급했듯이 대상 데이터 자체에서 이상 탐지를 위한 특성을 효과적으로 찾기 어려운 상황에서 주변 데이터를 활용하여 이상 탐지를 하는 것이 더 효과적인 도메인에 적합하다. 본 연구에서는 이 기법을 ETL 시스템 오류나 장애를 조기에 탐지하기 위해 적용하였고 실제 장애 발생 데이터를 이용하여 그 효과를 측정하였다.
  이 논문은 다음과 같이 구성된다. 2장에서는 우리가 이상 탐지를 위해 사용한 데이터에 대해 설명한다. 3장에서는 기존에 알려진 이상 탐지 기법에 대해 소개하고 각 기법이 우리가 목표로 한 시계열 데이터의 이상구간을 탐지하는데 왜 적절하지 않은지 각각의 한계점에 대해 언급한다. 4장에서는 본 연구에서 제안하는 이상 탐지 기법에 대해 자세히 소개한다. 5장에서는 제안한 기법을 실제 데이터에 적용하여 탐지 성능을 측정한 결과를 보여준다. 마지막으로 6장에서는 전체 연구내용을 정리하였다.

2. Data Description
  본 연구에서 이상탐지를 하고자 한 대상 데이터는 하루 단위로 집계되는 A사의 매출 관련 데이터이다. 데이터를 집계하는 ETL 시스템이 부분적으로 장애가 발생하여 일부 데이터가 집계에서 누락되었는데 이런 누락 데이터를 탐지하기 위해 이상 탐지 기법을 적용하고자 하였다. 그러나 이 데이터는 다음과 같은 특징 때문에 기존의 이상 탐지 기법을 적용하기 어려웠다.
  장애로 인해누락된 데이터의 비율이 크지 않았다. A사의 ETL 시스템은 분산 시스템에 의해 집계 로직이 병렬로 실행되는데 전체 시스템 중 일부 모듈만 장애가 발생할 경우 집계 결과 상으로는 정상적인 상황에서의 매출 하락과 차이를 구분하기 어렵다.
시계열 패턴이 명확하지 않다. A사는 비정기적으로 진행하는 프로모션이나 이벤트로 인해 발생하는 매출의 비중이 매우높다. 따라서 일별 매출의 편차가 크고 시간 주기성이 뚜렷하지 않은 특성이 있다.
  이상 구간의 다른 데이터는 정상적으로 집계되었다. 매출과 관련된 여러 가지 집계 데이터 중에서 장애가 발생한 모듈의 집계 데이터만 누락이 발생했기 때문에 다른 매출 관련 집계 데이터는 정상적으로 수집되었다. 또한 A사는 매출 관련 집계 항목이 많고 각 항목 별 계산 방식이 복잡하기 때문에 특정 항목의 부분적인 오류를 감지하기 더 어려운 면이 있다.

<그림. 1> A사 매출 관련 시계열 데이터. 빨간색 타원으로 표시한구간이 적재 장애가 발생한 데이터

3. Previous Approaches
  이 장에서는 기존에 시계열 데이터의 이상 탐지를 위해 널리 활용되는 기법들을 나열하고 각각의 한계점을 정리함으로써 본 연구에서 제안한 기법이 기존 방법의 한계점을 어떻게 극복할 수 있는지 소개한다.

1) Outlier detection
  기존의 데이터 분포와 비교해서 정상 데이터 분포에서 크게 벗어나는 데이터를 이상치로 탐지하는 방법이다. 정상 데이터의 편차가 크지 않고 정규 분포 형태에 가까울수록 효과적인 기법이다. 그러나 본 연구에서 사용한 데이터는 정상 구간 데이터 자체가 일별 편차가 큰 반면 이상 구간의 데이터가 정상 구간 데이터의 분포에서 크게 벗어나지 않는 특성을 갖고 있어 이 기법을 적용하기에는 적절치 않다.
<그림. 2> outlier detection이효과적인 케이스
<그림. 3> 실험데이터에서 이상 데이터 구간 (빨간색 표시 부분) - 일반적인 outlier 분포와 다름

2) Exponential Moving Average(EMA),Exponential Moving Standard Deviation(EMS)
  많은 시계열 데이터는시간에 따라 어떤 추세에 따라 상승하거나 하락하는 경우가 많다. 따라서 단순히 과거 데이터 분포를 보고 outlier 를 탐지한다면 점점 상승하거나 하락하는 추세를 갖는 시계열 데이터의 경우 시간이 갈수록 오탐율이 올라갈 것이다. 그래서 이런 추세 패턴을 반영하여 이상치를 탐지하기 위해 사용할 수 있는 방법이 이동 평균과 표준편차를 이용하는 이상 탐지 모델이다. EMA와 EMS는각각 아래와 같은 수식으로 정의한다.

EMA = w*EMA + (1-w)*x
EMS = sqrt(w*EMS^2 + (1-w)*(x-EMA)^2)


  이 기법은 특정 시점 이전까지의 데이터에 대해서 계산한 평균 혹은 표준편차와 해당 시점에 측정한 값 x를 이용해서 평균/표준편차를 갱신하는데 이 때 현재 시점의 값 x를 (1-w)만큼의 가중치로 반영하여 계산하는 방식이다. 따라서 w가 작을수록 최근 데이터의 영향력이 더 커진다. 이제 이렇게 구한EMA와 EMS를 이용하여 outlier detection 기준을 아래와 같이 정할 수 있다.

Alarm = abs(x-EMA) > n * EMS (n은 사용자가 지정)

  이렇게 EMA와 EMS를 이용하면 시간에 따른 추세를 반영하여 outlier 를 탐지하는 것이 가능하다. 다만 seasonal 요소가 강한 시계열 데이터의 경우 정상 데이터의 주기적 특성과 이상 데이터의 경계가 불분명하여 잦은 오탐이 발생할 수 있다. 이런 문제를 피하기 위해 시계열 데이터를 시간 주기 특성에 따라 별도의 모델을 만들어서 적용할 수 있다. 가령 시간대마다 편차가 큰 웹 트래픽 데이터라면 EMA와 EMS를 각 시간대별 데이터로 분류하여 총 24개의 이상 탐지 모델을 만들어 활용할 수 있다.

3) Seasonal decomposition of Time-series by Loess (STL)
  만약 대상 시계열 데이터가 seasonal 요소가 강한 데이터라면 위와 같이 주기에 따라 여러 개의 모델을 만들지 말고 STL 기법을 이용할 수도 있다. STL은 시계열 데이터가 갖는 시간 주기를 이미 알고 있는 경우 시계열 데이터를 seasonal, trend, remainder 요소로 분해하여 분석하는 기법이다. 아래 그림은 STL 을 이용하여시계열 데이터의 성분을 분해한 예이다.

<그림. 4> 시계열데이터를 seasonal, trend, remainder 요소로 분해한 예

  만약 대상 데이터의 시계열 성분이 정확히 분해된다면 remainder 데이터는 원래 정상 데이터가 갖는 seasonal 요소와 trend 요소가 분리된 나머지 데이터가 되는데 이것은 일반적인 상황이라면 단순한 variance error 이기 때문에 정규 분포 특성을 가질 것이다. 따라서 이 remainder의 평균 표준편차 대비 크게 벗어나는 시점의 데이터를 이상치로 탐지할 수 있다. 그러나 이 방법은 주기성이 없거나 약한 데이터에서는 사용할 수 없다.

4. Methodology
  이 장에서는 예측모델을 이용해 이상 탐지를 하는 방법을 자세히 소개한다. 본 연구에서 제안하는 기법은 크게 예측 모델을 생성하는 단계와 이렇게 생성한 예측 모델을 이용해서 이상치를 탐지하는 단계로 나눌 수 있다. <그림. 5>는 우리의 이상 탐지 시스템 전체 프로세스를 도식화한 자료이다.

<그림. 5> 이상 탐지 시스템 전체 프로세스

1) 예측 모델 생성
  이상 탐지 대상데이터를 종속 변수로 하는 예측 모델을 생성한다. 본 연구에서는 다중 선형 회귀 모델을 이용하였다. 비록 예측 모델을 생성하는 목적이 예측 자체에 있는 것은 아니지만 효과적인 이상 탐지를 위해선 예측 모델 역시 높은 예측 정확도를 갖고 있어야 한다. 예측 모델의 성능에 가장 큰 영향을 주는 요소는 feature selection 이다. 이를 위해 우리는 대상 데이터와 관련 가능성이 높은 주변 데이터를 수집한 후 subset 기법을 이용하여 가장 대상 데이터에 대해 설명력이 좋은 (다시 말하면 adjust R^2 가 높은) feature sub set을 선택했다.
  이렇게 선택한 특질들을 이용하여 아무런 장애가 발생하지 않았던 매출 집계 구간의 데이터를 학습 데이터로 사용해 회귀 모델을 생성하였다.

2) 이상 탐지
  앞서 설명했듯이 이상 탐지를 위해 먼저 1)에서 생성한 예측 모델을 이용해 주변 데이터로 대상 데이터의 예상치를 생성한다. 이후 이렇게 생성한 예측치와 실측치 사이의 차이를 계산하여 이 값이 미리 설정한 신뢰 구간을 벗어나는 경우 이상치로 판단한다. 그런데 이렇게 단순히 예측치와 실측치 사이의 잔차만 이용한다면, 신뢰 구간을 지나치게 넓게 잡을 경우 부분적인 장애를 탐지 못할 수 있으며 반대로 미탐을 줄이기 위해 신뢰구간을 좁게 잡을 경우 지나치게 민감한 탐지를 하게 되어 오탐이 늘어날 것이다. 따라서 우리는 이상탐지를 아래와 같은 2 단계로 적용하였다.

  a) 1차 이상 감지(잔차에 대한 신뢰 구간 이용): 회귀 모델을 이용해 예측치와 해당 예측치에 대한 상/하한 신뢰 구간을 생성한다. 만약 실측치가 이 상/하한 선을 벗어나면 이상 데이터로 판단한다. 다만 이 경우 과도한 오탐을 방지하기 위해 신뢰 구간을 충분히 넓게 선정한다.

<그림. 6> 예측치에대한 상/하한 구간을 이용하여 이상 데이터 검출

  b) 2차 이상 감지(잔차의 누적치에 대한 이상 탐지): 잔차의 누적치가 임계치를 벗어날 때를 이상치로 탐지한다. a) 단계에서 오탐을 줄이기 위해 신뢰 구간을 넓게 잡으면 반대로 약간의 장애로인한 이상치를 정상 데이터로 생각하는 미탐 케이스가 늘어난다. 따라서 신뢰 구간 이내에서 지속적으로 발생하는 이상치를 탐지하기 위해 잔차의 누적치를 이용한다. 일반적으로 예측 모델과 데이터가 정상인 상황이라면 예측치와 실측치 사이의 차이값인 잔차는 해당 모델의 bias error를 기준으로 +/- 값이 임의적으로 발생한다. 따라서 잔차를 계속 누적해 나가면 이 값이 서로 상쇄되기 때문에 일정 수준 이상 값이 커지지 않는다. 그러나 2장에서 소개한 사례와 같이 시스템 장애로 인해 이상 데이터가 지속적으로 발생한다면 잔차는 특정 방향으로 편향되어 값의 크기가 계속 커질 것이다. 따라서 잔차 자체는 신뢰 구간 내에서 움직이더라도 잔차의 누적치는 어느 시점이 지나면 정상 구간을 크게 벗어날 것이다. 예를들어, <그림. 7>은 정상 데이터에 대한 잔차와 시스템 장애로 인해 일부 데이터가 누락된 상태에서의 잔차의 변화와 그 누적치를 비교한 시계열 자료이다. 정상데이터(왼쪽)의 경우 잔차의 누적치가 0에서 크게 벗어나지 않는 반면 이상 데이터(오른쪽)의 경우 잔차가 음수로 계속 발생하면서 누적치가 점점 음의 방향으로 커지는 것을 확인할 수 있다.

<그림. 7> 잔차의누적치 비교 (좌: 정상 기간의 잔차 누적치 변화, 우: 장애 발생 기간의 잔차 누적치 변화)

5. Experiments
  실험에 사용한 데이터는 2장에서 설명했듯이 A사의 매출 데이터 및 관련자료이다. 해당 자료는 1일 단위로 집계되면 매월 한번씩 정산하는 프로세스를 갖고 있다. 매출 자료는 여러 가지 항목으로 구성되는데 상품별 판매 및 환원 금액 등으로 구성되며 이와 관련해서 결재 건수나 구매한 상품 개수 등의 보조 자료도 같이 집계된다. 또한 매출과 직접 연관된 자료는 아니지만 상관성이 높은 서비스 관련 수치나 프로모션 관련 정보 역시 예측 모델에 사용될 수 있다. 비록 이상 탐지를 위해 고려할 만한 특질들은 많이 존재하지만 실험 데이터는1일 단위 집계 데이터이기 때문에 그 양이 수백 개 정도 밖에 되지 않는다. 따라서 차원의 저주를 피하기 위해선 많은 수의 특질을 사용할 수 없다. 참고로 실험에 사용한 데이터와 사용 변수는 민감한 정보이기 때문에 구체적으로 밝힐 수 없어서 이 장에서는 구체적인 항목명 대신 임의적으로 정한 변수명만 사용하겠다.

1) Feature selection &modeling
  적절한 모델을 만들기 위해 이상 탐지 대상 항목과 연관성이 높다고 판단한 12개 변수 중에서설명력이 가장 높은 변수들을 선정하였다. 이를 위해 각 부분 집합에 대해 adjust R^2 를 측정했으며 이 값이 가장 큰 부분 집합 중 가장 적은 개수의 변수로 구성된 항목을 선정하였다. 선정 결과는 <그림.8> 에 나와 있다.

  <그림. 8> X축은 각 변수, Y축은 각 변수의 부분 집합을 선택했을 경우 측정되는 adjust R^2 값을의미한다. 빨간색 라인으로 표시한 변수 집합이 최종 선택한 featur

2) Evaluation
  생성한 모델을 이용하여 실제 장애가 발생한 구간과 정상 구간에 대해 테스트하여 오탐/미탐률을측정하였다. 4장의 <그림. 5>에 나와 있듯이 두 단계의 이상 탐지를 통해 측정된 미탐/오탐율은 아래와 같다.
  • 장애 발생구간을 정상으로 탐지한 비율(미탐율): 2%
  • 정상 구간을장애 발생으로 탐지한 비율(오탐율): 7%

<그림. 9> 실험데이터에 대한 1단계 이상치 탐지 결과와 2단계 누적 잔차탐지 결과

<그림. 10> 장애발생 구간과 정상 구간의 이상 탐지 결과 (빨간색: 이상치로탐지한 데이터, 파란색: 정상으로 판단한 데이터)

6. Conclusions
  본 연구에서는 일부 시스템의 장애로 인해 오류가 발생한 시계열 데이터의 이상 여부를 조기에 효과적으로 파악하기 위한 이상 탐지 기법을 제안하였다. 기존에 많은 이상 탐지 기법들이 있지만 대부분의 이상 탐지 기법은 정상 데이터와 이상 데이터를 효과적으로 구분하려면 패턴 탐지에 많은 비용이 들며 효과적인 탐지를 위해선 대규모 데이터가 필요한 경우가 많다. 그러나 본 연구에서 제안한 방법은 주변 데이터를 이용한 예측 모델링을 통해 비교적 적은 데이터에 대해서도 이상 탐지를 할 수 있다. 특히, 대상 데이터 자체가 정상과 비정상을 구분하기 힘든 반면 주변데이터와의 상관성이 높은 특성을 갖고 있는 경우 매우 효과적으로 적용할 수 있다. 또한 단발성의 이상치 발생 경우가 아니라 시스템의 부분적인 장애와 같이 그 영향력이 지속되는 경우에 특히 효과적이다.
  이렇듯 본 연구에서 제안한 기법은 범용적인 이상 탐지 기법이라고 볼 수는 없지만 위에서 정리한 특정 영역에서는 다른 이상 탐지 기법보다 매우 적은 리소스만으로 효과적으로 실전에 적용할 수 있다는 장점을 갖고 있다. 여기서 제안한 기법은 실제 A사에서 ETL 시스템의 부분적인 장애를 조기에 탐지하기 위해 실전에 적용하여 서비스 중에 있다.

7. References
[1] A. Kejariwal,“Introducing practical and robust anomaly detection in a time series”, https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series
[2] I. Flaounas,“Data Science tricks: Simple anomaly detection for metrics with a weekly pattern”, https://medium.com/@iliasfl/data-science-tricks-simple-anomaly-detection-for-metrics-with-a-weekly-pattern-2e236970d77?imm_mid=0e0878&cmp=em-data-na-na-newsltr_20160217#.f3gxz4kad
[3] A. Patcha, J. M.Park, “An overview of anomaly detection techniques: Existing solutions and latest technological trends”, Computer networks 51. 12 (2007): 3448-3470

회귀 모델에서 '회귀'란 무엇인가? 데이터분석

  페이스북에서 'regression model에서 regression 이라는 용어는 잘못되었다' 는 글(https://www.facebook.com/dgtgrade/posts/1153483458043852) 을 봤습니다. 우선 '회귀(regression)' 라는 단어가 일상에서 잘 안쓰이는 단어이고 직관적이지 못하다는 점은 저도 공감합니다. 수학이나 과학 용어 중에는 이렇게 비직관적이고 어려운 용어들이 많이 있죠. 따라서 이런 용어들을 좀 더 쉬운 단어로 바꿔야 한다고 생각합니다. 그러나 비록 회귀 모델의 '회귀'라는 용어가 비직관적이긴 하지만 잘못된 용어라고는 생각하지 않습니다.
  이 글에서는 그 이유를 설명하기 위해 제가 이해하는 '회귀'의 의미와 함께 회귀 모델에 대해 정리합니다.

* * * * *

0. 회귀 모델이란 무엇인가?
  이 글은 이미 회귀 모델이 무엇인지에 대해서 기본적인 지식은 있다는 전제하에 내용을 전개해 나가겠지만 명확한 소통을 위해 회귀 모델에 대해 다음과 같이 정의를 내리고 시작합니다.
  회귀 모델은 어떤 연속형 데이터 Y와 이 Y의 원인이 되는(엄밀히 말해 원인이라고 추정되는) X간의 관계를 추정하기 위해 만든 아래와 같은 형식의 관계식을 말합니다.

Y = f(X)

  그런데 실제 데이터는 측정상의 한계나 기타 여러 가지 원인으로 인해 데이터 자체에 잡음이 들어가거나 유실이 발생합니다. 따라서 실제로는 수학이나 물리학의 수식들처럼 정확한 관계식(equation function)을 만들 수 없기 때문에 다음과 같이 확률 변수인 오차항을 두게 됩니다.

Y = f(x) + e

  예를 들어 온도에 따른 어떤 물질의 부피 변화에 대한 관계식을 물리학에서는 '부피 = w*온도' 라고 정의할 것입니다. 그러나 실제 실험에서 온도에 따라 물체의 부피를 측정하면 정확하게 위 관계식에 맞는 w를 찾을 수 없습니다. 왜냐하면 측정상의 오차나 실험 환경 상에서 발생하는 여러 가지 변수(이를 테면 습도)들이 영향을 줄테니까요. 물리학에서는 이런 오차는 무시하고 수식을 만들지만 통계학에서는 이런 오차를 모두 e라는 확률 변수로 대신 표기합니다.
  얼핏 생각하기에 여기서 중요한 것은 부피와 온도 사이의 관계이기 때문에 e 라는 오차항은 그냥 무시하면 될 것 같습니다. 그리고 실제로 만약 우리가 f(x)를 정확하게 알고 있다면 e는 무시해도 됩니다. 심지어 E=MC^2 같은 수식을 생각해 보면, 물리학에서는 관계 계수인 w의 구체적인 값도 그냥 적당히 무시해 버리는 대인배의 풍모를 자랑합니다. 그러나 데이터 분석가들은 매우 쪼잔한 존재이기 때문에 모델링을 할 때는 f(x)를 모르는 상태에서 이것을 추정하는 것부터 시작하기 때문에 이 오차항을 무시할 수 없습니다. 다시 말해 내가 추정한 회귀 모델인 f(x)를 실제 데이터에 적용했을 때 나오는 오차항이 무시해도 좋은 정도인지 먼저 확인해 본 후, 무시해도 좋다고 판단될 때만 무시해야 합니다. 그러나 대개는 이런 사실을 모르거나, 귀찮거나 아니면 이 검정을 통과할만큼 정확한 모델을 만들 방법이나 시간이 부족해서 무시하고 넘어갑니다.
  여기서 오차항에 대해 이렇게 강조하는 이유는 바로 이 오차항이 회귀 모델에서 '회귀'의 의미를 이해하는 것과 깊은 관련이 있기 때문입니다.

1. 무엇이 어디로 '회귀'하는가?
  회귀의 사전적 정의는 '한바퀴 돌아 제자리로 돌아가다' 입니다. 따라서 회귀 모델에서 말하는 '회귀'의 의미를 이해하려면 무엇이 어디로 회귀하는 것인지 아는 것이 중요합니다. 위 링크 글을 비롯하여 많은 글에서는 이 회귀에 대해 골턴이 제시했던 '평균으로의 회귀'를 예로 들며 데이터가 회귀 모델이 제시한 추세선으로 회귀하는 것이라고 설명합니다.
  그러나 위 링크의 댓글에도 나와 있듯이 데이터가 추세선으로 회귀한다는 설명은 뭔가 어색합니다. 오히려 반대로 추세선이 데이터를 따라 간다는 것이 더 맞는 설명같습니다. 그렇기 때문에 'regression' 보다는 'progression' 이라고 해야 한다는 주장이 나오는 것 같습니다. 그러나 제가 생각하기에 이 설명은 제대로된 설명이 아닙니다.
  제가 이해하기에 회귀 모델에서 '회귀'는 '잔차(residual: 데이터의 실측치와 모델의 예측치 사이의 차이. 즉, 회귀식에서 오차항에 대한 관측치)가 평균으로 회귀하는 것'을 의미합니다. 그리고 이런 맥락에서 회귀 모델은 '잔차가 평균으로 회귀하도록 만든 모델'이라고 정의할 수 있습니다. 이렇게 정의를 내리고 나면 아래 문장은 부정확하다는 것을 알 수 있습니다.

'회귀 모델링은 오차의 합이 최소가 되도록 만드는 작업이다.'

  회귀 모델을 만드는 작업을 '데이터와의 오차합이 가장 작은 선'을 찾는 작업이라고 얘기한다면 엄밀히 말해 절반만 맞습니다. 실제 회귀 모델링을 할 때는 잔차가 최소가 되는 선을 찾기에 앞서 다음과 같은 전제 조건이 선행되어야 합니다.

'데이터의 실측치와 모델의 추정치 사이의 잔차가 i.i.d.(Independent and Identically Distributed random) 성질을 만족해야 한다.'

  위 전제 조건을 만족하지 않으면 설령 오차가 최소가 되는 선이라 하더라도 제대로 된 회귀 모델이 아닙니다. 그 이유를 설명하려면 먼저 모델링이란 무엇인가에 대해 먼저 이해해야 합니다.

2. 모델링 = 모델의 관계식 추정 + 파라미터 추정
  회귀식을 모델링할 때는 X와 Y 간의 관계에 대해 먼저 추정을 한 후 구체적인 파라미터를 추정하게 됩니다. 가령 앞부분에서 예로 든 물체의 부피와 온도에 대한 회귀식의 경우 X(온도)와 Y(부피) 사이에는 선형 관계가 있고 그 가중치가 w일 것이라는 추정을 먼저 한 것입니다. 그리고 이렇게 추정된 관계식 안에서 구체적으로 w가 무엇인지 계수에 대한 추정을 합니다.
  그런데 위의 예에서 만약 실제로는 물체의 부피와 온도 사이에 아무런 관계가 없거나 혹은 온도의 제곱과 선형 관계에 있거나(부피 = w * 온도^2)아니면 온도 뿐만 아니라 습도와도 밀접하게 관련이 있다면(부피 = w1*온도 + w2*습도) 비록 오차의 합이 최소가 되도록 w를 추정하더라도 그 회귀식은 정확한 회귀 모델이 되지 못합니다. 따라서 이 회귀식을 이용해서 부피를 예측하면 실제 부피와 차이가 생길 수 밖에 없습니다.
  한편, 만약 실제로 부피는 온도와 선형 관계에 있는 것이 맞다면 이 회귀 모델은 부피와 온도의 관계를 잘 추정한 모델이기 때문에 이 관계식을 이용해서 파라미터인 w를 추정하면 정확한 회귀식을 만들 수 있습니다. 그런데 설령 이렇게 정확한 모델을 만들더라도 앞서 언급했듯이 현실 세계에서의 여러 가지 오차(잡음)로 인해 이 모델을 이용해서 부피를 예측한 값과 실제 부피 사이에는 여전히 약간의 차이가 발생합니다. 
  결국 우리는 정확한 회귀 모델을 만들든 그렇지 못하든 항상 모델의 예측치와 실측치 사이에는 차이가 존재합니다. 다만 부정확한 회귀 모델로 인한 차이와 정확한 회귀 모델에서 발생하는 차이 사이에는 근본적으로 다른 성질이 있습니다. 즉, 정확한 모델을 만들었다면 잔차는 평균인 0으로 회귀하지만 부정확한 모델에서는 그렇지 못합니다. 이것이 위에서 얘기한 잔차의 성질입니다. 따라서 이렇게 내가 추정한 관계식이 제대로 된 회귀 모델인지 여부를 판단할 때는 내가 만든 모델의 예측치와 실제값 사이의 잔차의 기대치(평균)이 0이고 평균으로 회귀하는지 살펴 봐야 합니다. 
  다시 말해, 내가 추정한 모델과 실제 데이터 사이의 오차가 단순히 현실 세계에 존재하는 잡음 때문인지 아니면 내가 고려하지 못한 어떤 속성 때문인지를 알려면 잔차가 i.i.d. 한 속성을 갖고 있는지 확인해야 합니다. 이를 위해선 다음과 같은 조건을 모두 만족하는지 살펴 봐야 합니다.
  • 잔차의 분포는 정규 분포이어야 한다.
  • 잔차와 독립변수 X 사이에 상관 관계가 없고 자기 자신과도 상관이 없어야 한다(잔차는 독립이어야 한다).
  • 잔차의 분포가 일정해야 한다(잔차는 등분산성을 만족해야 한다).
  위 조건을 모두 만족한다면 해당 모델의 예측치와 실제 데이터 사이의 차이인 잔차는 평균으로 회귀하게 됩니다. 다시 말하면, 비록 실제 세계에서 어쩔 수 없이 존재하는 잡음으로 인해 완전히 예측치와 실측치가 일치하지는 않으며 그래서 어떤 데이터에 대해서는 그 차이가 클 수 있지만, 전체 추세로 볼 때는 잔차의 평균(대개는 0)으로 수렴합니다.
  그럼 위에서 나열한 잔차의 조건에 대해서 좀 더 자세히 알아 보겠습니다.

3. 잔차의 정규성
  만약 어떤 데이터에 대해 정확한 모델을 만들었다면 그 모델과 실제 데이터 사이의 오차의 확률 분포는 정규 분포를 따릅니다. 그 이유는 정규 분포 자체가 원래 오차에 대한 확률 분포이기 때문입니다. 즉, '왜 오차의 분포가 정규 분포를 따르는가?' 라는 질문은 '왜 당근 케익에서는 당근 맛이 나는가?' 라는 질문과 같습니다(어찌보면 통계학에서 먼저 바꿔야 할 용어는 '회귀' 모델이 아니라 '정규' 분포인 것 같습니다).
  비록 정규 분포는 여러 수학자들에 의해서 각기 다른 방식으로 연구되었긴 하지만 이들 중에서 가장 큰 기여를 한 가우스(그래서 정규 분포를 '가우스의 분포'라고도 하죠)의 경우 천체 관측 시 발생하는 오차의 성질을 연구하던 중 이 정규 분포를 발견했습니다. 당시에는 기술이 발달하지 못해 천체를 눈으로 관측하다 보니 매번 관측을 할 때마다 조금씩 오차가 발생했습니다. 그런데 이런 차이값들 사이의 관계를 분석해 보니 이 값들이 평균에 근접할 수록 발생확률이 높고 평균에서 멀어질수록 확률이 떨어지는 아래와 같은 분포 규칙을 따른다는 것을 발견한 것이죠. 
  따라서 만약 어떤 모델이 데이터의 성질을 정확히 설명한다면 이 둘 사이의 차이는 잡음만 남게 되며 이런 잡음의 분포는 정규 분포입니다. 반대로 말해 만약 모델과 데이터 사이의 차이의 분포가 정규 분포가 아니라면 이 둘 사이의 차이에는 단순한 잡음 뿐만 아니라 내가 반영하지 못한 어떤 특징이 포함되어 있다는 것을 의미합니다.
  아주 간단한 예로 다음과 같이 R에서 테스트를 해보겠습니다.

x <- 1:100
# model1
y1 <- 0.5 * x + rnorm(100)*5
m1 <- lm(y1~x)
e1 <- y1 - m1$fitted.values

# model2
y2 <- 0.5 * x^2 + rnorm(100)*5
m2 <- lm(y2~x)
e2 <- y2 - m2$fitted.values

  위에서 y1은 x와, y2는 x^2와 선형 관계를 갖는 데이터입니다. 그리고 m1은 y1 ~ x 라는 관계식으로 추정한 회귀 모델이고 m2는 y2 ~ x라는 관계식으로 추정한 회귀 모델입니다. 따라서 m1은 관계식으로 정확히 추정했지만 m2는 잘못된 회귀 모델입니다(원래는 x^2 에 대해서 모델을 추정해야 합니다). 이 상태에서 두 모델의 예측치와 실측치 사이의 잔차인 e1, e2의 히스토그램을 그려보면 아래와 같이 나옵니다.

<그림 1> 두 모델의 잔차에 대한 히스토그램

  이렇듯 m1의 잔차인 e1은 종모양의 분포를 띄는 반면 잘못 추정된 모델인 m2의 잔차인 e2는 왼쪽으로 쏠린 분포를 갖습니다. 이렇게 잔차의 정규 분포 여부는 히스토그램으로도 어느 정도 추정이 가능합니다. 하지만 히스토그램은 bin(막대)의 개수나 넓이를 어떻게 주느냐에 따라 모양이 크게 달라질 수 있기 때문에 다소 부정확한 자료입니다. 따라서 좀 더 정확하게 정규성 여부를 측정하고 싶다면 다른 여러 가지 방법을 사용할 수 있습니다.
  이 중에서 R에서 간단하게 확인할 수 있는 방법은 아래와 같습니다.

<그림 2> Shapiro-Wilk normality test

  위 방법은 Shapiro-Wilk normality test 라고 합니다. 결과로 나온 p-value가 높으면 정규 분포를 따른다고 볼 수 있으며 반대로 낮을 수록 정규 분포일 가능성이 낮습니다. 위 그림에 나와 있듯이 e1은 p-value가 0.9599 로 매우 높으며 e2는 거의 0에 가깝습니다. 따라서 이것을 통해 m2 모델의 잔차인 e2는 정규 분포를 따르지 않으며 모델이 잘못 추정되었다고 판단할 수 있습니다.
  그 외에 normal quantile plot을 그려서 확인하는 방법도 있습니다. 사용 방법은 아래와 같습니다. 왼쪽 그림처럼 데이터가 qqline에서 크게 벗어나지 않으면 정규 분포를 띈다고 판단할 수 있습니다.

<그림 3> normal quantile plot

  실상 데이터의 정규성을 검정하는 방법은 널리 알려진 것만해도 열 가지가 넘기 때문에 이 중에서 적절한 것을 사용하면 됩니다. 어쨌든 이렇게 잔차가 (평균이 0인) 정규 분포를 갖는다는 의미는 잔차가 평균에서 크게 벗어날 확률이 매우 낮다는 의미이며 따라서 골턴이 얘기한 '평균으로의 회귀'와도 연관이 깊습니다.

4. 잔차의 독립성
  잔차의 분포가 정규 분포를 갖는다고 하더라도 회귀 모델을 잘 추정했다고 섣불리 판단하면 안됩니다. 더 나아가 잔차의 독립성을 확인해야 합니다. 잔차가 독립이 아니라는 말은 잔차가 어떤 패턴을 갖고 있다는 것을 의미합니다. 앞서 설명했듯이 모델을 정확히 만들었다면 잔차는 단순 잡음이기 때문에 아무런 특징을 갖고 있지 않아야 합니다. 그런데 패턴을 갖고 있다는 것은 단순 잡음이 아님을 의미하며 모델이 정확하지 않다는 뜻이 됩니다.
  잔차의 독립성은 아래와 같은 두 가지 관계를 확인해야 합니다.
  • X와의 상관성
  • 자기 자신과의 상관성

  상관성을 확인하는 가장 쉬운 방법은 피어슨 상관 계수를 구하는 것입니다. 그러나 피어슨 상관 계수는 위 예제처럼 잔차가 x에 대해서 일정한 추세를 갖지 않고 높았다가 낮아지는 관계를 갖는다면 일정한 패턴을 갖더라도 낮은 값이 나올 수 있습니다. 따라서 이럴 때는 scatter plot을 찍어 보면 쉽게 확인이 가능합니다.

<그림 4> 잔차의 독립성 검정 - e2와 x 간에 피어슨 상관 계수는 낮게 나오지만 scatter plot을 그려보면 일정한 패턴을 갖고 있는 것을 확인할 수 있습니다. 

  한편, 잔차의 독립성을 검정할 때는 독립 변수인 X와의 상관성뿐만 아니라 자기 자신과의 상관성도 확인해야 합니다. 이것은 특히 시계열 데이터에서 매우 중요합니다. 시계열 분석에서 흔히 사용하는 auto regression 류의 모델은 모두 잔차의 자기 상관성을 반영한 모델입니다. 그래서 만약 독립변수와는 독립이지만 잔차가 자기 상관성을 갖는다면 이 잔차에 대한 자기 상관 관계를 모델에 반영해줘야 합니다. 예를 들어 바로 직전의 잔차와 자기 상관을 갖는 데이터라면 아래와 같이 auto regression 모델을 만들 수 있습니다.

y = f(x) + e(i)
e(i) = a1*e(i-1) + a0 + e'

  물론 여기서 e(i)에 대한 잔차인 e' 에 대해서도 동일하게 i.i.d. 성질을 만족하는지 확인해야겠죠.
  이렇듯 잔차가 독립성을 가지면 데이터의 특성에 영향을 받지 않고 원래의 확률인 정규 분포를 그대로 따르게 되기 때문에 전체 추세로 볼 때 평균으로 회귀합니다. 다시 말해 '예측치가 데이터의 값에 영향을 받아 실측치에서 크게 벗어날 확률'이 매우 낮습니다.

5. 잔차의 등분산성
  마지막으로 확인해야 할 것은 분산이 항상 일정한지 여부입니다. 아래 예를 먼저 살펴 보겠습니다.

y3 <- 0.5 * x + rnorm(100)*5 + rnorm(100)*0.2*x
m3 <- lm(y3 ~ x)
e3 <- y3 - m3$fitted.values
plot(x, y3)
abline(m3)
plot(x, e3)


<그림 5> 잔차의 등분산성을 만족하지 않는 예

  단순히 x와 y 사이의 관계만 보면 모델을 잘 추정한 것 같지만 잔차와 x 사이의 관계를 scatter plot으로 그려 보면 x가 커질수록 잔차인 e3의 퍼짐 정도가 점점 커지는 것을 볼 수 있습니다. 반면 <그림 4>의 왼쪽 그림의 경우 e1은 x와 상관없이 퍼짐 정도가 일정합니다. 이런 경우 역시 추정한 모델이 정확한 모델이 아님을 의미합니다.
  잔차의 분산이 일정치 못하다면, 특히 위 예처럼 점점 발산하는 형태를 취한다면 설령 정규 분포를 띄고 있더라도 x값이 커질수록 점점 평균에서 크게 벗어난 값을 가질 확률이 커져서 평균으로 회귀하지 못합니다. 따라서 이 모델은 실제 데이터의 성질을 잘 반영한 모델이 아닙니다.

6. 결론
  잔차가 1) 정규 분포를 띄고 2) 데이터와 상관이 없으며 3) 분산이 항상 일정하다면 평균으로 회귀하는 속성을 갖습니다. 그리고 이렇게 잔차가 평균으로 '회귀'하도록 만든 모델을 '회귀 모델'이라고 합니다. 결국 회귀 모델에서 '회귀' 라는 용어가 잘못되었다는 주장은 잔차의 성질을 고려하지 않은 채 회귀 모델을 이해함으로써 생긴 오해라고 생각합니다.
  사실 위에서 정리한 잔차에 대한 조건은 보통 선형 회귀 모델에 대해 설명할 때 변수간의 선형 결합 관계에 대한 조건과 함께 거론됩니다. 그런데 이런 잔차의 성질은 꼭 선형 회귀 모델이 아니더라도 데이터 모델을 만들 때 염두해 둬야할 매우 중요한 정보입니다. 보통 데이터 모델의 성능을 측정할 때 R^2, RMSE, AUC 등의 값만 측정하는 경우가 많은데 보다 엄밀한 모델링을 위해선 이렇게 잔차가 어떤 특성을 갖고 있는지를 분석하는 것이 필요합니다.

1 2 3 4 5 6 7 8 9 10 다음