logo

시계열분석에서의 이분산성과 변동성 군집현상 📂통계적분석

시계열분석에서의 이분산성과 변동성 군집현상

정의 1

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

  1. $\left\{ p_{t} \right\}$ 의 분산이 $t$ 에 종속되어있을 때, $\left\{ p_{t} \right\}$ 는 이분산성heteroscedasticity을 가진다고 한다.
  2. 이분산성을 가지는 $\left\{ p_{t} \right\}$ 의 분산이 커졌다 작아졌다를 반복하는 현상을 변동성 군집현상volatility Clustering이라고 한다.
  3. 다음과 같이 정의된 $r_{t}$ 를 $t$ 에서의 (로그) 리턴return이라 한다. $$ r_{t} := \nabla \log p_{t} = \log {{ p_{t} } \over { p_{t-1} }} $$

설명

Heteroscedasticity는 [헤테로스케다스틱시리]라고 읽고, Volatility Clustering는 [볼라터러티 클러스터링]이라고 읽는다. 두 단어 모두 한국어로 설명된 문서가 별로 없는데, 아무래도 이것을 공부한 사람들이 순화할 필요성을 못 느끼기 때문일 것이다. 실제로 이분산성이나 변동성 군집현상을 글로 적고 읽으면서는 크게 어색할 게 없지만, 말을 할 때는 헤테로스케다스틱시리, 볼라터러티 클러스터링이라는 긴 단어를 그대로 발음하는 경우가 많다.

이분산성

아리마 모델은 거의 대부분의 통계적 분석이 그러하듯 데이터의 평균에 관심을 가진다. 실제 값이 어떻게 움직이는지가 중요한 것이다. 그런데 데이터의 값 자체만 시간에 종속적인 것이 아니라 그 변동 자체도 시간의 흐름에 따라 바뀐다는 가정을 할 수도 있다. 이분산성이라는 단어 자체가 그래서 만들어졌다. 시계열 데이터의 분산이 시간에 무관하게 항상 일정하다면 필요 없는 말이다.

시계열의 분산에 관심을 가지는 것은 보통 경제, 금융 분야다. 데이터의 변동은 가치의 변화를 나타내며, 어떤 자산의 위험성을 논할 때 곧바로 쓰일 수 있다. 위험은 이익의 다른 모습일 뿐이므로 관심의 대상이 될 수밖에 없다. 시계열 데이터를 표현할 때 보통은 $\left\{ y_{t} \right\}$ 이라고 쓰는데, 이분산성에 관심을 둘 때는 $\left\{ p_{t} \right\}$ 이라고 쓰는 것도 그 때문이다. $p_{t}$ 의 $p$ 는 Price에서 나온 것이다.

변동성 군집현상

분산이 커졌다 작아졌다를 반복하는 것을 변동성 군집현상이라고 부르고, 이러한 단어가 있는 이유는 간단하다. 시장에서 변동성이 계속 커지거나 작아지기만 하는 경우는 없고, 있다고 해도 통계적 분석을 해야할만큼 복잡한 데이터는 아닐 것이기 때문이다. 통계학적으로 좀 더 우아하게 표현할 수도 있지만, 우선은 이 정도 설명으로 넘어가자.

리턴

리턴은 이러한 이분산성을 파악하고 분석하는데에 유용한 표현이다. 로그를 취함으로써 $p_{t}$ 가 $p_{t-1}$ 보다 크면(가격이 오르면) 양수, 작으면(가격이 떨어지면) 음수가 되며, 백분율로 보기 편하도록 100을 곱하기도 한다. 단순히 값의 차이가 큰지 작은지가 아니라 그 전 데이터와의 비율을 사용하는 것이므로 데이터의 고유한 특징에 크게 구애받지 않는 것 역시 좋은 점이다.

실습

1.png

위의 그래프는 내장데이터 EuStockMarkets에서 DAX만 뽑아내서 그린 것으로, 1991년부터 1999년까지 독일 DAX지수를 나타낸다.

2.png 20190901\_170714.png

리턴은 위와 같이 그려지는데, 하이라이트가 들어간 그림을 보고 변동성의 크고 작음이 번갈아가면서 나타나는 것처럼 보인다면 변동성 군집현상이 무엇인지 이해했다고 보아도 좋다.

사실 그렇게 보이지 않아도 좋다. 이렇게 ‘감에 의존한 주장’을 견고하게 만드는 것이 통계학의 역할이고, 아직은 아무런 통계 기법도 쓰지 않았기 때문이다.

코드

returnize <- function(data) {return(diff(log(data)))}

win.graph(6,4)
plot(EuStockMarkets[,1],main="EuStockMarkets",ylab='DAX')

DAX <- ts(EuStockMarkets[,1],start=1)
r.DAX <- returnize(DAX)
win.graph(6,4)
plot(r.DAX,type='h',main='DAX의 리턴')

  1. Cryer. (2008). Time Series Analysis: With Applications in R(2nd Edition): p277~279. ↩︎