사전백화
정의
사전백화prewhitening란 CCF를 계산할 때 시계열을 백색 잡음으로 만들어 두 데이터 간의 상관관계를 더욱 정확하게 파악하는 방법이다.
실습 1
가능하다면 이것이 어떻게 가능한지 수식적으로도 완전히 이해하는 것을 추천하는데, 우선은 예로써 다음의 데이터를 살펴보자.
bluebird
는 뉴질랜드에서 감자칩을 제조하는 회사인 블루버드에 대한 데이터로써, 평균 가격과 판매량에 로그를 취한 두 시계열 데이터를 포함하고 있다. 데이터만 보았을 땐 판매량과 가격은 강한 음의 상관관계를 가지는 것 같은데, 이를 CCF로 확인해보자.
눈으로 본 것처럼, 생각한것처럼 두 데이터는 서로 음의 상관관계를 가진다. 하지만 시차 $k = 0$ 뿐만이 아니라 그 주변 시차에도 상관관계가 있다는 것은 어떻게 받아들여야할 것인지 생각을 잘 해야한다. 기본적으로 어떤 패턴이 있든 없든 $X_{t}$ 와 $X_{t-1}$, $X_{t+1}$ 은 본질적으로 그 값에 큰 차이가 없다. 폭등과 폭락이 없는 건 아니지만, 어쨌든 바로 이전과 바로 다음이라면 어느정도 그 엇비슷한 값인 게 정상이기 때문이다.
그런데 $X_{t}$ 와 $Y_{t}$ 가 상관관계를 가진다면 $X_{t}$ 와 $Y_{t-1}$, $Y_{t+1}$ 역시 어느정도 희석된 상관관계를 가지는 것이 정상이다. 이것은 정말 이들의 상관관계가 있다기보단, 없다기보단, 수식적으로 너무 당연한 귀결이라서 진짜 상관관계가 있어도, 없어도, 무어라 단언할 수 없는 상황인 것이다.
한편 사전백화를 거치면 위와 같이 깔끔하게 $k=0$ 에 대해서만 상관관계가 있음이 드러난다. R 에서는 간단하게도 ccf()
대신 prewhiten()
을 사용함으로써 사전백화 데이터의 CCF를 볼 수 있다.
사전백화는 이렇게 수식적으로 생겨나는 상관관계를 제거해준다. 사전백화된 데이터끼리의 CCF를 계산했을 때도 상관관계가 있다는 게 드러난다면 이들 변수끼리는 서로 상관관계가 있다고 본다. 반면 사전백화를 거침으로써 CCF 가 유의하지 않은 것으로 드러나면 그것은 진짜 상관관계가 아니었다고 본다.
수식적인 설명
수식적으로 보면 왜 이 방법이 사전백화인지 한결 납득하기 쉬울 것이다. 간단한 예로써 $X_{t}$ 가 아리마 모형 $ARIMA(1,1,0)$ 에서 나왔다고 생각해보자. $$ \nabla X_{t} = \phi \nabla X_{t-1} + e_{t} $$ 이것을 $e_{t}$ 에 대해서 나타내보면, $$ e_{t} = \nabla X_{t} - \phi \nabla X_{t-1} $$ 차분 $\nabla$ 을 백쉬프트 $B$ 에 대해 풀어보면, $$ \begin{align*} e_{t} =& (1 - B ) X_{t} - \phi (1 - B ) B X_{t} \\ =& \left[ 1 - ( 1 + \phi ) B + \phi B^2 \right] X_{t} \\ =& \left(1 - \pi_{1} B - \pi_{2} B^2 \right) X_{t} \end{align*} $$ 이러한 수식을 만족시키는 리니어 오퍼레이터 $\pi ( B) := 1 - \pi_{1} B - \pi_{2} B^2$ 를 필터filter라 부르며, 필터에 의해서 $X_{t}$ 가 백색 잡음 $\tilde{X_{t}}$ 으로 바뀌는 프로세스를 사전백화라 한다2.
일반적인 아리마 모형 역시 이런식으로 수단과 방법을 가리지 않고 사전백화를 한다. 사람의 손이 아니라 컴퓨터로 한다면 변수선택기준을 따라 오토매틱하게 모델을 피팅하고 그 잔차를 사용하면 된다.
$\tilde{X_{t}}$ 는 백색 잡음이라고는 하나, 어디까지나 $X_{t}$ 그 자체만의 정보를 통해서 그들 사이에서만 $e_{t}$ 와 같이 취급된다. 만약 새로운 변수 $Y_{t}$ 와 어떤 관계를 가지고 있다고 하더라도 사전백화를 할 때 그에 대한 정보는 없으므로, 둘 사이의 상관관계는 잔차 속에 남아있게 된다. 따라서 사전백화된 $\tilde{X_{t}}$ 와 $\tilde{Y_{t}}$ 사이의 CCF를 계산하면 진짜 어떤 시차를 갖고 교차상관관계를 가지고 있는지 알 수 있게 된다.
여기서 CCF를 사용해도 되는 근거는 필터 $\pi (B)$ 가 리니어기 때문에 $X_{t}$ 와 $Y_{t}$ 의 성질을 보존하며 $X_{t}$ 와 $Y_{t}$ 가 서로 독립이라고 했을 때, sCCF $r_{k}$ 가 다음과 같이 정규분포를 따르기 때문이다. $$ r_{k} \sim N \left( 0 , {{1} \over {n}} \left[ 1 + 2 \sum_{k=1}^{\infty} \rho_{k} (X_{t}) \rho_{k} (Y_{k} ) \right] \right) $$ 물론 여기서 $\rho_{k}$ 는 자기상관함수를 의미한다. 그런데 사전백화를 하고나면 $\rho_{k} \left( \tilde{X} \right) = 0$ 이므로, 실제 가설검정은 귀무가설 $H_{0}$ 하에서 다음을 가정한다. $$ r_{k} \sim N \left( 0 , {{1} \over {n}} \right) $$ 쉽게 말해, 사전백화를 한 뒤에도 가설검정 자체는 바뀌지 않는다는 것이다.
코드
library(TSA)
data("bluebird")
win.graph(6,5); plot(bluebird,yax.flip = T)
win.graph(6,4)
ccf(bluebird[,1],bluebird[,2],main="가격과 판매량의 CCF",ylab="CCF")
win.graph(6,4)
prewhiten(bluebird[,1],bluebird[,2],main="가격과 판매량의 사전백화 CCF",ylab="CCF")
out<-lm(log.sales~price,data=bluebird); summary(out); plot(rstudent(out))