logo

박스-칵스 변환 📂통계적검정

박스-칵스 변환

빌드업

$x > 0$ 에 대해 $g(x) := \begin{cases} \displaystyle {{ x^{\lambda} - 1 } \over { \lambda }} & , \lambda \ne 0 \\ \log x & , \lambda = 0 \end{cases}$ 를 박스-칵스 변환이라 한다.

$g$ 는 원래 멱변환power Transformation이라 불리나, 박스와 칵스에 의해 소개되어 박스-칵스 변환이라고 부르기도 한다. 박스-칵스 변환의 주된 용도는 데이터를 정규분포에 가깝게 만들거나 데이터의 분산을 안정화하는 것으로, 정규성을 가정하는 분석법이나 정상성을 요구하는 분석법을 사용하기에 앞서 데이터의 전처리에 유용하게 쓸 수 있다.멱변환을 취하기 위해서는 데이터가 모두 양수여야한다는 조건이 필요하지만, 보통은 그냥 데이터의 최소값이 양수가 되도록 어떤 값을 더해서 밀어Shift주는 식으로 해결한다. 이 방법이 적절치 못하거나 마음에 들지 않는다면 실수 전체에 대해 일반화된 여-존슨 변환 Yeo-Johnson Transformation 을 고려해볼 수 있다.

수식적으로는 $\displaystyle \lim_{\lambda \to 0} {{ x^{\lambda} - 1 } \over { \lambda }} = \log x$ 이므로 사실 편하게 적자면 $\displaystyle g(x) = {{ x^{\lambda} - 1 } \over { \lambda }}$ 정도만 되어도 알아보는데에는 큰 문제가 없다. 또 $g$ 는 $\lambda$ 에도 종속되어 있으므로 우리가 가진 것은 함수의 패밀리 $\left\{ g_{\lambda} : \lambda \in \mathbb{R} \right\}$ 이다. $g_{\lambda}$ 는 $\lambda$ 에 따라 유연하게 꼴을 바뀌고, 분석자는 목적에 맞게 $\lambda$ 를 제대로 결정할 수 있어야할 것이다.

이때 특히 주목할만한 $\lambda$ 로 $0,1,2$ 가 있다. $g_{0} (x) = \log(x)$ 는 가장 즐겨쓰이는 변환이며, $\displaystyle g_{2} (x) = {{\sqrt{x} - 1} \over {2}}$ 또한 $\displaystyle h(x) = {{x - 1} \over {2}}$ 이 선형변환이므로 $\displaystyle g_{2} (x) \approx \sqrt{x}$ 가 발견됨을 알 수 있다. 변환에 즐겨 쓰이는 루트 $\sqrt{}$ 와 로그 $\log$ 가 박스-칵스 변환에 의해 커버된다는 사실은 이론적으로 흥미로운 동시에 실용적으로 당연해야할 일이다.

$\lambda = 1$ 인 경우 $g(x) = x - 1$ 으로써, 사실상 항등 변환이 된다. 보통의 경우 데이터에서 값이 $1$ 정도 빠지는 것은 변환이라고 부를수도 없기 때문이다. 주어진 데이터에 대해 적절한 $\lambda$ 가 $1$ 이라고 구해졌다면 이것은 ‘변환이 필요없다’라는 뜻으로 받아들여도 무방하다.

같은 센스로 시계열 분석을 생각해보면 박스-칵스 변환의 $\lambda$ 의 신뢰구간을 구하는 것은 곧 데이터의 분산이 일정한지를 가설검정하는 것으로 볼 수 있다. $\lambda$ 의 신뢰구간에 $1$ 이 포함되면 데이터를 변환하나 안 하나 차이가 없는 것이다. 변환을 할 필요가 없다는 것은 다시 말해 분산이 이미 일정하다는 것이다.

가설검정

데이터 $\left\{ x_{t} \right\}$ 가 주어져 있다고 하자.

  • $H_{0}$: $\lambda = 1$ 즉, 데이터 $\left\{ y_{t} \right\}$ 는 정상성을 갖는다.
  • $H_{1}$: $\lambda \ne 1$ 즉, 데이터 $\left\{ y_{t} \right\}$ 는 정상성을 가지지 않는다.

주의해야할 것은 이러한 진단이 분산에 대해서만 일어난다는 것이다. 평균에 대해서는 신경쓰지 않기 때문에 이에 대한 별도의 테스트가 필요하다.

코드

실습

R에서는 TSA 패키지의 BoxCox.ar() 함수를 통해 쉽게 가설 검정을 할 수 있다.

내장데이터 UKgas를 불러와보자.

ukgas.png boxcoxukgas.png

UKgas는 영국에서 가스의 소비량을 분기별로 기록한 데이터로써, 보다시피 해가 가면서 변동이 더욱 심해지는 것을 알 수 있다. 한편 가설검정 결과 신뢰구간에 $0$ 이 포함되어 있고, 이에 따라 박스-칵스 변환은 곧 로그변환이 된다.

logukgas.png boxcoxlogukgas.png

로그를 취하면 실제로 분산이 상당히 안정되는 것을 볼 수 있다. 확인을 위해 한번 더 가설검정을 해보면 신뢰구간에 $1$ 이 포함되어있다. 이는 신뢰수준 $95\%$ 에서 더 이상 변환이 필요하지 않다는 뜻으로 받아들일 수 있다. 하지만 그래프에서 나타나듯이 완전히 분산이 안정된 것은 아니며, $2$ 역시 신뢰구간에 포함되어 있으므로 한 번 더 변환을 취하는 근거로 받아들여도 무방하다. 적어도 이러한 상황에서의 선택은 신뢰수준에 달려 있으며, 신뢰수준이 $95 \%$ 라면 분석자가 선택하기 나름이다.

전체코드

UKgas
win.graph(3.5,3.5); plot(UKgas,main='UKgas')
win.graph(3.5,3.5); BoxCox.ar(UKgas)
win.graph(3.5,3.5); plot(log(UKgas),main='log(UKgas)')
win.graph(3.5,3.5); BoxCox.ar(log(UKgas))