상세 컨텐츠

본문 제목

[시계열 스터디 1주차(조성윤)]: 3장 Review

본문

*본 글은 Practical Time Series Analysis (O'Reily) 교재를 바탕으로 작성하였습니다.

 

[3장: EDA for Time Series]

 

시계열에서는 크게 2가지 EDA 방식을 고려해볼 수 있다:

 

(1) Familiar Methods

기존의 데이터 분석 EDA 과정과 별반 다르지 않다. Summary statistics, histogram, scatterplot, correlation, column mean&variance 측정 등의 방법론을 적용할 수 있다. 그러나 무작정 적용해서는 안 되고, 시계열 데이터에는 몇 가지 주의해야할 점이 있다.

 

*Histogram, Scatterplot을 생성 시 유의할 점

시계열에서 특이점은 data 그 자체에 대한 히스토그램을 생성하지 않고, "differenced data"에 대한 히스토그램을 주로 사용한다는 것이다. 한 예시를 통해 살펴보도록 하겠다:

## R
> hist( EuStockMarkets[, "SMI"], 30)
> hist(diff(EuStockMarkets[, "SMI"], 30))

R base의 "EUStockMarkets" 데이터셋의 SMI 주가지수에 대한 histogram, difference histogram을 각각 나타낸 것이다. 원래 데이터의 histogram의 경우 폭이 굉장이 넓고 정규분포를 따르지 않음을 확인할 수 있다. 하지만 data간의 difference를 구하여 transform 해주면 아래 그림에서 확인할 수 있듯이 정규분포를 따르게 된다. 또 difference histogram을 통해 stock price가 등락을 반복했음을 확인할 수 있다.

 

데이터 간의 차이를 정보로 사용하는 이유는 시계열 분석에서의 주된 관심사가 데이터 그 자체라기 보다, 시간의 흐름에 따라 데이터가 어떻게 변하는 지 관심이 있기 때문이다. 즉, Temporal Scale을 사용하는 것이 중요하다.

 

Scatterplot의 경우도 마찬가지다. 

## R
> plot( EuStockMarkets[, "SMI"], EuStockMarkets[, "DAX"])
> plot(diff(EuStockMarkets[, "SMI"]), diff(EuStockMarkets[, "DAX"]))

SMI와 DAX 두 주가간의 상관관계와 가격변동을 살펴보고자 한다. histogram에서와 같이 diff() 함수를 통해 차이를 계산하여 시간의 변화에 따라 매일 두 주가지수가 어떻게 변화하는지 확인할 수 있다.

언뜻보면, SMI와 DAX 주가간의 강한 양의 상관관계가 존재한다고 생각할 수도 있다. 하지만 이것은 잘못된 해석이다. 동일 시점에서의 값을 고려했기 때문이다. 우리가 원하는 상관관계는 과거의 어느 한 시점의 주가의 변화가 미래 시점에서 다른 주가의 변화를 예측할 수 있는지다. 이를 고려하기 위해 한 주식의 차이를 1만큼 뒤로 옮겨 scatterplot을 형성한다. 이러한 과정을 difference time series에 "lag"를 적용하는 것이라고 말한다.

## R
> plot(lag(diff(EuStockMarkets[, "SMI"]), 1),
 diff(EuStockMarkets[, "DAX"]))

전혀 다른 scatterplot이 생성되었다. correlation은 착시였음을 확인할 수 있고, SMI 지수가 DAX 지수를 predict한다고 보기에는 어렵다.

 

결론적으로 EDA에서 주의할 사항들은 다음과 같다:

- 기존 알려진 EDA 방식을 시계열 데이터에 맹목적으로 적용해서는 안 된다. 데이터를 적절히 변형하여(ex) differenced data) EDA를 분석하는 것이 중요하다.

- 시간의 흐름에 따라 데이터가 어떻게 변화하느지, 혹은 서로 다른 두 시점에서 데이터의 상관관계가 어떻게 되는지를 파악하는 것이 유의미하다.

 

(2) Time Series-Specific EDA

시계열 데이터만의 EDA 전용 기법도 존재한다. 서로 다른 시점에서 데이터 간의 관계를 파악하는 것을 목적으로 한다.

 

1. Stationary

데이터의 안정성을 측정하는 척도다. 데이터가 안정적인 통계적 성질(property)를 지닐수록 평균과 분산 같은 요약 통계량을 파악하기 수월해지고 장기적 추세를 알아볼 수 있다. 그러나 실제 데이터에서 stationary인 경우를 명확히 구분짓는 것은 어렵고, 오히려 non-stationary한 데이터를 찾는 것이 더 효과적이다.

Non-stationary한 시계열 데이터 사례다. 시간의 흐름에 따라 데이터의 평균이 증가하고, peak와 trough간의 차이가 점점 커지고 있다(분산이 커지는 중이다.) 그리고 seasonality(계절성 요인)도 보이고 있다.

 

Stationary를 검증하는 대표적인 hypothesis test로 Augmented Dickey-Fuller(ADF) test가 있다.

Random Walk Characteristic Equation

위의 characteristic equation이 unit root를 가진(1을 solution으로 가짐) 경우 non-stationary로 판단할 수 있다는 것이 test의 논리다. 즉, "귀무가설(H0): unit root가 시계열에 내제한다(nonstationary)"로 볼 수 있다. 여기서 주의할 점은 unit root가 없다고 해서 stationary로 해석해서는 안 된다는 것이다. 또 샘플 크기가 너무 작을 경우, 가짜 unit root가 존재한다고 판단하는 false positive 사례가 흔하기 때문에 주의해야 한다.

 

Stationary 성질의 중요성

- 많은 고전 시계열 모델들이 해당을 가정한다

- mean, variance들이 nonstationary하여 시시각각 변화할 경우 요약 통계를 명확히 제시하기가 어렵다.

 

* Window Functions(그래프)

i) Rolling Windows데이터를 축적하여 압축 혹은 평활하기 위해 사용한다. rolling(moving) average를 계산할 수 있다.

## R
> ## calculate a rolling average using the base R
> ## filter function
> x <- rnorm(n = 100, mean = 0, sd = 10) + 1:100
> mn <- function(n) rep(1/n, n)
> plot(x, type = 'l', lwd = 1)
> lines(filter(x, mn( 5)), col = 2, lwd = 3, lty = 2)
> lines(filter(x, mn(50)), col = 3, lwd = 3, lty = 3)

ii) Expanding Windows

시간에 따라 변화하거나 변동을 심하게 하는 데이터에 대한 요약 통계량을 제시한다. 주의할 점은 stationary data에서 사용해야 한다.

 

2. Self-Correlation(자기상관)

특정 시점의 시계열 값이 다른 시점의 값과 어느 정도의 상관관계를 가지고 있는지 파악한다.

유사 개념인 autocorrelation의 경우 특정 시점을 잡지 않고 좀더 일반화하여 서로 다른 무작위의 아무런 두 시점간에 어떤 상관관계가 존재하는지 파악하려고 한다. 자기 상관을 사용하면 서로 다른 시점의 데이터 점이 시간 차이의 함수로 서로 선형적으로 어떻게 연관되어 있는지 알 수 있다. Autocorrelation을 측정하는 함수로는 ACF(Autocorrelation Function)와 PACF(Partial Autocorrelation Function)가 있다.

다음은 AirPassengers 데이터셋에 대한 ACF, PACF 측정 결과다. ACF는 자기상관을 보이는 lag 값들이 상당히 많은 반면, PACF는 매우 큰 값의 lag에 대해서만 자기상관을 보이는 것을 확인할 수 있다.

 

3. Spurious Correlations

시계열이 경우 맹목적으로 두 변수 간의 상관관계를 분석하다보면 상관관계가 의심갈 정도로 높게 되는 경우를 많이 볼 수 있다. 데이터에 트렌드가 있는 경우 unusual correlation들이 많이 발생한다. 보통 계절성 요인이 있거나, 추세 시계열 같이 고정 시계열보다 더 많은 정보가 있어 데이터 점이 함께 이동할 수 있는 기회가 더 많은 경우 자주 발생한다.

시계열 분석에서는 이러한 경우를 경계하여 잘못 해석해서는 안 된다. 데이터의 추세 같은 명백한 문제의 원인을 반드시 확인해야 할 것이다. 어떤 상관관계들은 거짓임에도 불구하고 놀라울 정도로 설득력 있어 보일 수 있다.

 

*해당 사이트에서 말도 안 되는 spurious correlation들의 사례들을 확인할 수 있다.

Spurious Correlations (tylervigen.com)

관련글 더보기

댓글 영역