본문 바로가기
R

시계열 분석(시계열 데이터, 정상성, 데이터 전환, 시계열 모델)

by jun_code 2021. 7. 27.

1. 시계열 데이터

시간에 따라 관측된 데이터를 시계열 데이터(Timeseries Data)라 한다. 

시계열 데이터는 추세를 가진다. 추세요인(trend factor)은 데이터의 값이 시간에 따라 커지거나 작아지거나 수평인 추세로 상향 추세, 하향 추세, 수평 추세가 있다. 

또, 시계열 데이터는 계절성을 가진다. 계절 요인(seasonal factor)은 짧은 구간으로 반복되는 트랜드를 의미하는데 일주일, 일년, 사분기, 계절 단위 등으로 명확한 주기에 따라 트랜드가 있는 경우이다.

명확한 이유 없이 알려진 주기를 가지고 변화하는 데이터일 수 있는데 이는 순환 요인을 가진다고 한다. 

마지막으로, 위의 추세요인, 계절요인, 순환요인에 해당하지 않는 요인을 불규칙 요인, 노이즈 라고 부른다.

 

2. 정상성

데이터가 정상성을 갖는 가정하에 시계열 데이터의 통계모델에 활용한다. 여기서 정상성은 평균이 시간 흐름에 영향을 받지 않고 안정화, 분산이 시간 흐름에 영향을 받지 않고 안정화, 공분산이 시간 흐름에 영향을 받지 않고 안정화, 공분산이 시차에만 의존이라는 특징을 가진다.

정상성을 만족하게 되면 정상 시계열 데이터는 어느 구간에서도 평균이 비슷하고 이와 반대로 비정항 시계열 데이터는 구간별로 평균이 다른 모습을 보인다.

 

 

3. 비정상 시계열을 정상 시계열로 전환하는 방법

대부분의 시계열 데이터는 비정상성이다. 그렇기 때문에 비정상 시계열 데이터를 정상 시계열 데이터로 변환해 주어야 한다. 데이터를 변환하는 방법은 아래와 같다.

① 평균이 일정하지 않은 경우 차분(difference)를 사용한다

② 시간에 따라 분산이 일정하지 않은 경우 자연로그로 변환(transform)을 이용한다

③ 계절요인을 갖는 비정상 시계열을 정상 시계열로 바꾸는 경우 Season을 기준으로 차분한다(주기를 기준으로 차분)

여기서, 차분이란 현재 데이터에 지정된 이전 시점의 데이터를 빼는 것이다. 

 

 

4. 시계열 모델

시계열 모델에는 자귀회귀 모델, 이동평균 모델, 자귀회귀 누적이동평균 모델, 분해 시계열 등이 있다.

① 자기회귀 모델(AR, AutoRegression Model)은 자신의 과거 값과의 관계에 기반한 모델이다. 쉽게 말해, 이전 시점의 시계열 데이터와 해당 시점이 현재 시점에 얼마나 영향을 미치는지를 나타내는 모수(가중치)의 곱들의 합에 백색잡음과정의 오차항(평균 0, 분산 일정, 자기 공분산 0)으로 구성되어 있다. 과거의 몇 번째 이전 데이터까지 영향을 받느냐에 따라 이름이 달리 불린다. 예를 들어, 과거 하나 이전 데이터만 영향을 받는 경우 1차 AR 모델, AR(1) 모델이라 하고 두개의 과거 데이터까지 영향을 받는 경우 2차 AR 모델, AR(2) 모델이라고 한다.

② 이동평균 모델(MA 모델)은 백색잡음의 현재값에서부터 q시간 지연된 시간까지 q+1개 항의 선형 가중합 모델이다. 현재 시점의 백색잡음과 바로 이전의 과거 백색잡음으로 이루어진 모델을 1차 MA 모델, MA(1) 모델이라 한다.

③ 자기회귀 누적이동평균 모델(ARIMA 모델)은 AR 모델과 MA 모델을 통합한 모델로 시계열 데이터가 정상성 특징을 보이는 경우에 효과적이다. 이 모델은 ARIMA(p, d, q)로 세개의 파라미터가 필요하다. d 파라미터는 비정상 시계열을 정상화하기 위해 몇 번의 차분을 의미하는지, p 파라미터는 AR 모델과 관련, q 파라미터는 MA 모델과 관련된다.

④ 분해시계열은 추세요인, 계절요인, 순환요인, 불규칙요인을 분해하여 분석하는 것이다.

 


< 실습 >

1. 차분

diff() 함수로 차분이 가능하다.

 

n <- head(Nile) # Nile : 시계열 데이터
n
'''
[1] 1120 1160  963 1210 1160 1160  '''

n.diff1 <- diff(n, differences=1) # 1차 차분
n.diff1
'''
[1]   40 -197  247  -50    0  '''

n.diff2 <- diff(n, differences =2) # 2차 차분
n.diff2
'''
[1] -237  444 -297   50  '''

 

2. 자기회귀 누적이동평균 모델

forecast 패키지auto.arima() 함수를 사용하여 ARIMA 모델의 파라미터 p, d, q인자를 결정할 수 있다. 파라미터 값을 결정하고 ARIMA(1,1,1) 모델을 생성한다. 모델을 생성하고 5개년도의 미래 수치를 예측해 본다. 아래 예측 결과를 보면 처음부터 점추정, 구간추정을 통한 신뢰구간의 최대값, 최소값을 확인할 수 있다.

 

install.packages('forecast')
library(forecast)

auto.arima(Nile)
'''
Series: Nile 
ARIMA(1,1,1) # p, d, q 

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 20177:  log likelihood=-630.63
AIC=1267.25   AICc=1267.51   BIC=1275.04
'''

Nile.arima <- arima(Nile, order=c(1,1,1))
Nile.arima
'''
Call:
arima(x = Nile, order = c(1, 1, 1))

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 19769:  log likelihood = -630.63,  aic = 1267.25
'''

forecast(Nile.arima, h=5) # 5개년도 미래 수치 예측
'''
     Point Forecast    Lo 80     Hi 80    Lo 95    Hi 95
1971       816.1813 635.9909  996.3717 540.6039 1091.759
1972       835.5596 642.7830 1028.3363 540.7332 1130.386
1973       840.4889 643.5842 1037.3936 539.3492 1141.629
1974       841.7428 642.1115 1041.3741 536.4331 1147.053
1975       842.0617 640.0311 1044.0923 533.0826 1151.041
'''

앞서 도출한 점추정, 구간추정의 결과를 그래프로 나타낼 수도 있다. 아래 <그림1>에서 오른쪽 끝에 점추정, 신뢰도에 따른 구간추정의 결과를 볼 수 있다. 

 

<그림1>

 

3. 분해시계열

ldeaths 데이터를 활용하여 분해 시계열에 대해 보여주도록 하겠다. 원본 데이터와 추세, 계절, 그외 잔차 요인을 그래프를 통해 확인할 수 있다.

head(ldeaths)
'''
      Jan  Feb  Mar  Apr  May  Jun
1974 3035 2552 2704 2554 2014 1655  '''

 

ldeaths.decomp <- decompose(ldeaths)
plot(ldeaths.decomp) # 원본데이터, 추세, 계절, 그외 잔차 를 확인할 수 있음

<그림2>

위의 그래프에서 하나의 요인을 따로 떼내어 확인할 수도 있다.

 

plot(ldeaths.decomp$trend) # 보고싶은 그래프만 따로 뗄 수 있음

<그림3>