본문 바로가기
시계열 자료분석/시계열 회귀모형

Prophet 모형

by be-favorite 2020. 7. 6.

❗️블로그 옮김:  https://www.taemobang.com

 

방태모

안녕하세요, 제 블로그에 오신 것을 환영합니다. 통계학을 전공으로 학부, 석사를 졸업했습니다. 현재는 가천대 길병원 G-ABC에서 Data Science를 하고있습니다. 통계학, 시계열, 통계적학습과 기계

www.taemobang.com

 Prerequisite

GAMs

시계열 평활법

❓ More to read
Tutorial on {prophet} for Korean R users

 

Prophet 모형은 2018년 페이스북에서 제안한 시계열 예측모형이다. Prophet 모형은 시계열의 시간 종속적인 특성을 고려하는 기존의 시계열 모형(e.g. 지수평활법, ARIMA 모형)과 달리 curve-fitting으로 모형을 적합하며, 시계열을 세 가지 요소로 분해하고 각 요소를 시간의 함수로 가법적으로 모형화한다: 

 

$y(t) = g(t) + s(t) + h(t) + \epsilon_t$.  $\cdots$  (Eq 1)

 

여기서 $g(t)$는 비-주기적 변화를 모형화하는 추세 함수, $s(t)$는 주별 또는 연별 계절성과 같은 주기적 변화를 반영하며, $h(t)$는 불규칙하게 발생할 가능성이 있는 휴일효과(holidays and events effects)를 모형화한다. 이때 계절성을 가법적 요소로 고려한 것은 지수평활법에서 쓰인 접근 방법과 동일하며, 로그 변환을 통해 승법적으로 고려할 수도 있다. 마지막 요소인 $\epsilon_t$는 모형으로 설명할 수 없는 오차항을 의미한다.

 

기본적인 모형식을 보면 알겠지만, Prophet은 시계열 $y(t)$의 예측에 GAMs(Generalized additive models : 일반화가법모형)의 아이디어를 사용한다. GAMs의 구조를 가지는 Prophet에서는 시계열 분해, 그리고 필요에 따라 새로운 요소를 추가하는 것이 용이하다는 장점이 있다. 예를 들어 계절성의 새로운 원천(Source)이 확인된다면, Prophet은 이를 새롭게 고려하여 빠르게 적합시킬 수 있다.

 

GAMs의 적합에는 분석자가 모형의 모수를 상호작용하며(Interactively) 바꿀 수 있도록 Backfitting 알고리즘이나 L-BFGS(최적화 알고리즘으로 Quasi-Newton algotirhms에 해당)를 사용한다(후자를 선호함). 또한, Prophet은 예측 문제(The forecasting problem)를 Curve-fitting 문제 (Curve-fitting : 주어진 데이터를 가장 적절히 표현할 수 있는 함수식을 계산하는 방식)로 다루며, 이는 시계열 자료의 시간 종속적인 부분을 명시적으로고려하는 시계열 모형(e.g. ARIMA models)과는 본질적으로 다르다. 이렇게 Curve-fitting 문제로 시계열 자료의 예측 모델링을 수행하는 Prophet은 ARIMA models와 같은 Generative models의 추론적 이점을 잃게되지만, 동시에 다음의 많은 실제적인 장점을 갖게해준다.

 

 ○ 유연성(flexibility) : 여러 주기를 가지는 계절성을 쉽게 반영할 수 있으며, 추세에 대해 다른 여러가지 가정을 할 수 있다. 이러한 prophet이 가지는 유연성은 많은 종류의 Business time series에 유연하게 적용될 수 있음을 말한다.

 ○ ARIMA models와 달리, 시계열 자료의 측정 주기가 일정한 간격일 필요가 없다. 즉, 이상치를 제거하는 등 결측치를 대치시킬 필요가 없어진다.

 ○ 적합이 매우 빨라서, 분석자가 상호작용하며 여러가지 모형들을 고려하고 적합시켜볼 수 있게해준다(e.g. a Shiny application, Chang et al. 2015).

 ○ Prophet의 모수들은 해석이 용이하며, 이는 예측에 어떤 가정이 포함되도록 분석자가 조정할 수 있다(e.g. 휴일효과). 즉, 정상성 가정 또는 자기상관 등의 사전 지식이 필요한 ARIMA models에 비해 이해하기가 쉽다. 그 이유는, Prophet은 이를 구성하는 세 요소(추세, 계절성, 휴일효과)에 대한 세부적 내용에 지식이 없어도 쉽게 조정이 가능한 직관적인 모수들로 고안되었기 때문이다. 즉, Prophet의 최대 장점은 시계열 모형과 방법론들에 대해 지식이 거의 없는 비전문가들도 해당 데이터에 대한 도메인 지식이 충분하다면 쉽게 튜닝이 가능하다는 것이다.

 ○ 필요에 따라, 모형에 새로운 요소가 필요한 상황에 이를 추가해서 반영하기가 쉽다.

 

이제 Prophet을 구성하는 세 요소들에 대해 조금 더 자세히 알아보자.

 

1. 추세 모형 $g(t)$

데이터가 가지는 추세는 다음의 2종류의 모형을 통해 모형화할 수 있다.

 

 (1) Piecewise logistic growth model

 

$g(t) = \frac{C(t)}{1 + exp(-(k+a(t)^T \delta)(t-(m+a(t)^T \gamma)) ) },$ 

where $k$ : growh rate,  $\delta$ : The rate adjustments,  $m$ : an offset parameter  $\cdots$   (Eq 1)

 

 Prophet에서 데이터가 비선형의 추세를 가질 경우 piecewise logistic growth model을 사용한다. 기본적으로 Prophet의 추세 모델링은 변화점(changepoints)을 반영한다. 추세의 모델링에 변화점이 필요한 이유는 간단하다. 예를 들어, 월별 아이폰의 판매량을 모델링한다고 할 때, 신제품이 출시한 이후의 판매 성장률(the rate of growth)은 크게 변화될 수 있다. 즉, 신제품 출시 시기를 변화점으로 탐지할 것이며, 해당 시기 전후로 다른 형태의 추세를 가질 것이다. 이러한 이유로 모형 이름에는 piecewise라는 단어가 들어간다. Piecewise logistic growth model의 기본형은 Logistic growth model으로, 다음의 형태를 가진다.

 

$g(t) = \frac{C}{1+exp(-k(t-m)},$ 

with $C$ : The carrying capacity,  $k$ : the growth rate,   $m$ : an offset parameter  $\cdots$ (Eq 2)

 

식의 형태와 이름을 보면 알겠지만, Logistic growth model은 일반적인 로지스틱 함수(Logistic regression - 1. 모형화 참고)의 특별한 종류에 해당한다. 로지스틱 함수는 머신러닝에서 흔히 시그모이드 함수라 부르기도 한다. (Eq 2)에서 (Eq 1)로 식을 전개해나가는 자세한 과정이 궁금하다면 Taylor and Letham(2018)을 참고하길 바란다.

 

 (2) piecewise constant rate of growth model

 

$g(t) = (k + a(t)^T \delta)t + (m + a(t)^T \gamma),$

where $k$ : growh rate,  $\delta$ : The rate adjustments,  $m$ : an offset parameter  $\cdots$ (Eq 3)

 

 데이터의 추세가 선형이라면, Piecewise constant rate of growth model을 사용하는 것이 모수 절약적 측면에서 더 좋으며, 종종 더 좋은 모형을 제공한다.

 

변화점에 대한 추가적인 설명을 하고 추세 모형에 대한 설명을 마치려고 한다. 변화점은 분석자에 의해 명시될 수도 있고(e.g. 신제품 출시일, 추세에 영향을 미칠만한 사건), 자동으로 선택될 수도 있다. 변화점이 자동으로 선택되는 과정은 (Eq 2)와 (Eq 3)에 희소 사전분포(sparse prior) $\delta$를 추가함으로써 이루어진다. 희소 사전분포로는 $\delta_j \sim \textrm{Laplace}(0, \tau)$를 사용하며, 이때 $\tau$는 성장률의 변화 정도를 통제하는 모수다($\textrm{as}\;\tau \rightarrow 0$, It becomes Stanard(not-piecewise) Logistic or linear growth models). 이러한 희소 사전분포는 근본적인 성장률 $k$에는 영향을 미치지 않는다.

 

2. 계절성 $s(t)$

 

$s(t) = \sum_{n=1}^N (a_n cos(\frac{2\pi nt}{P}) + b_n sin(\frac{2\pi nt}{P})), $ 

where  $P$ : The regular period we expect the time series to have

 

Prophet은 푸리에 급수(Fourier series)를 통해 임의의 계절 효과를 추정한다. $P$는 예를 들어, 연도별 자료이면 $P = 365.25$, 주별로 기록된 자료이면 $P=7$이 될것이다. 계절성의 적합에는 총 $2N$개의 모수 추정이 필요로 된다.

 

$\boldsymbol{\beta} = [a_1, b_1, \cdots, a_N, b_N]^T$

 

이는 각 $t$에 대한 계절성분 벡터들의 행렬을 통해 이루어진다. 연도별 계절성을 가지며 $N=10$인 경우 $t$시점 계절성의 벡터를 통해 예를 들어보자. 먼저, $t$시점 계절성의 벡터는 다음과 같이 주어질 것이다.

 

$X(t) = [cos(\frac{2\pi (1) t}{365.25}), sin(\frac{2\pi (1) t}{365.25}), \cdots, cos(\frac{2\pi (10) t}{365.25}), sin(\frac{2\pi (10) t}{365.25})]$

 

그럼 계절 성분은 다음과 같은 식을 통해 추정이 이루어진다:

 

$s(t) = X(t) \boldsymbol{\beta}$

 

여기서  ${\boldsymbol{\beta}} \sim {\rm{Normal}}(0, \sigma^2)$로 계절성에 대한 평활(smooth) 사전분포를 가정한다. 즉, 계절성도 추세 적합에서처럼 과적합이 일어난 경우 사전분포의 모수 조정을 통해 해결이 가능하다. 그러나, 계절성의 경우 추세와는 달리 과적합은 왠만해선 발생하지 않는다. 아울러, 푸리에 차수(order) $N$도 주기별 계절성에 따라 기본 설정을 가지며, 차수가 커질수록 계절 패턴이 더 빠르게 변화할 수 있도록 허용하여 과적합의 문제를 발생시킬 수 있다. 단, 과적합 또는 과소적합을 조절하기 위해서는 푸리에 차수를 조정하는 것이 아닌 사전분포의 모수  $\sigma^2$을 조정하는 것이 더 효과적이다. 참고로, 연별 또는 주별 계절성를 가지는 경우 각각 $N=10$, $N=3$으로 기본 설정이 되어있으며 대부분의 시계열에서 잘 작동한다.

 

3. 휴일효과 $h(t)$

휴일효과는 많은 Business time series에 큰 충격(shocks) 효과를 주며, 주기적인 패턴을 따르지 않는 경우가 많기 때문에 이들의 효과는 모형화되기 어렵다. 예를 들어, 미국의 추수감사절은 매년 11월의 넷째주 목요일로 주기적으로 발생하지만, 슈퍼볼(super bowl)과 같은 이벤트는 1월 또는 2월의 일요일에 불규칙적으로 발생되므로 모형화하기 어렵다. 또한, 우리나라를 포함한 여러 나라들의 중요한 휴일은 음력을 따르는 문제도 존재하며, 이렇게 불규칙적 패턴으로 나타나는 효과들을 시계열 예측에 반영하는 것은 매우 중요하다.

 

Prophet은 이러한 문제를 해결할 수 있도록, 분석가가 과거에 발생했던 또는 미래에 발생할 사건들의 목록을 만들어 이를 모형에 반영할 수 있도록 한다. 다음의 Table이 그 예시이다.

 

 

휴일효과 목록의 예시

 

이렇게 분석자가 직접 custom하여 제공하는 list는 휴일효과는 독립적이라는 가정하에 모형에 쉽게 반영된다. 각 휴일을 $i$라 하자. 그럼 $D_i$는 휴일의 날짜가 된다. 그리고 휴일 $i$에 포함되는 $t$를 나타내기 위해 지시함수를 사용하고, 휴일에 따라 예측에 변화를 주는 모수 $\kappa_i$를 할당한다. 휴일효과의 적합은 계절성에서 했던 것과 유사한 방식으로 행렬을 이용해 진행된다. 휴일효과의 적합에 이해를 돕기위해 이번에도 $t$시점의 휴일효과 벡터를 예로들어 알아보자:

 

$Z(t) = [\boldsymbol{1}(t \in D_1), \cdots, \boldsymbol{1}(t \in D_L)]$

 

그럼 휴일효과는 다음과 같은 식을 통해 추정이 이루어진다:

 

$h(t) = Z(t) \boldsymbol{\kappa}$

 

여기서 $\boldsymbol{k} \sim \textrm{Normal}(0, \nu^2)$로 휴일효과도 계절성과 마찬가지로 평활 사전분포를 가정한다. 즉, 휴일효과도 regularization이 가능하다. 아울러, 휴일효과에는 특정 휴일의 경우(e.g. 추석, 설, etc) 해당 날짜 전후에도 휴일효과의 반영이 필요로 되는데, 이에 대비하여 휴일의 주변 일자를 지정하여 일차마다 효과를 다르게 줄 수 있다. 이를 휴일효과에서는 휴일의 창(a window of days)이라 칭한다.

 

📝참고 문헌

[1] Sean J. Taylor & Benjamin Letham, 2018. "Forecasting at Scale," The American Statistician, Taylor & Francis Journals, vol. 72(1), pages 37-45, January.

댓글