59doit

[ R ] 시계열분석 #2 본문

통계기반 데이터분석

[ R ] 시계열분석 #2

yul_S2 2022. 11. 28. 13:30
반응형

 시계열분석 기법 

시계열 자료의 분석 기법: 평활법, 시계열 요소 분해법, 회귀 분석법, ARIMA모형법

 

(1) 시계열 요소 분해법 

시계열 요소 분해법: 시계열 자료의 4가지 변동요인을 찾아서 시각적으로 분석하는 기법

 

< 추세 변동에 대한 분석 >

  • 시계열 자료가 증가하거나 감소하는 경향이 있는지 파악
  • 증가나 감소의 경향이 선형(linear)인지, 비선형(nonlinear)인지, S 곡선과 같은 성장곡선 인지 찾는 과정이 필요

 

<  추세의 패턴을 찾는 방법 >

1) 차분 후 일정한 값을 나타내면 선형의 패턴(대각선)

2) 로그변환 후 일정한 값을 나타내면 비선형의 패턴(U자, 역U자)

3) 로그변환 후 1차 차분결과가 일정한 값으로 나타나면 성장곡선의 패턴(S자)

 

 

(2) 평활법

과거 자료의 불규칙한 변동을 제거하는 방법

 

(1) 이동평균(Moving Average) : 일정한 기간의 자료를 평균으로 계산하고 이동시킨 추세를 파악하여 다음기간의 추세를 예측하는 방법

 

< 이동평균법의 특징>

  • 시계열 자료에서 계절 변동과 불규칙변동을 제거하여 추세 변동과 순환 변동만 갖는 시계열로 변환한다. (시계열에서 추세와 순환 예측)
  • 자료의 수가 많고 비교적 안정적인 패턴을 보이는 경우 효과적이다.

(2) 지수평활법(Exponential Smoothing) : 최근 시계열에 더 큰 가중치를 적용하는 방법

 

 

ex) 이동평균법을 이용한 평활하기

#1 시계열 자료 생성

data <- c(45, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65, 55, 49, 67, 55, 71, 78, 
               71, 65, 69, 43, 70, 75, 56, 56, 65, 55, 82, 85, 75, 77, 77, 69, 79, 89)

length(data)

tsdata <- ts(data, start = c(2016, 1), frequency = 12) 
tsdata
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 2016  45  56  45  43  69  75  58  59  66  64  62  65
# 2017  55  49  67  55  71  78  71  65  69  43  70  75
# 2018  56  56  65  55  82  85  75  77  77  69  79  89

 

#2 평활 관련 패키지 설치

install.packages("TTR")
library(TTR)

 

 

#3 이동평균법으로 평활 및 시각화

par(mfrow = c(2, 2))
plot(tsdata, main = "원 시계열 자료")
plot(SMA(tsdata, n = 1), main = "1년 단위 이동평균법으로 평활")
plot(SMA(tsdata, n = 2), main = "2년 단위 이동평균법으로 평활")
plot(SMA(tsdata, n = 3), main = "3년 단위 이동평균법으로 평활") 

 

 

(3) 회귀분석법

선형 회귀분석을 이용하여 시계열 자료의 선형성, 정규성, 등분산성 등의 모수 검정을 위한 타당성을 검정해야 한다.

 

 

(4) ARIMA 모형법

시계열 모형은 정상성(Stationarity)의 조건 유무에 따라 분류

1) 정상성을 가진 시계열 모형: 자기 회귀모형(AR), 이동평균모형(MA), 자기 회귀 이동평균모형(ARMA)

2) 비정상성을 가진 시계열 모형: 자기 회귀 누적 이동평균모형(ARIMA)

 

정상성(stationarity): 시계열이 뚜렷한 추세가 없는 시계열. 시계열의 평균이 시간 축에 평행하게 나타난다.

시계열의 이론은 정상성을 가정하고 전개되기 때문에 비정상 시계열은 정상 시계열로 변환해야 한다.

대부분의 시계열자료는 비정상성 시계열의 형태를 가진다.

 

비정상성 시계열을 모형화하는데 Box-Jenkins의 ARIMA(AutoRegressive Integrated Moving Average) 모형을 이용

 

ARIMA모형은 3개의 인수 (p, d, q)를 갖는다. 여기서 p: 자기 회귀(AR)모형의 차수(시간지연수), d는 차분 차수(데이터가 과거 값을 뺀 횟수), q는 이동평균(MA)의 차수(이동 평균 모델의 순서).

 

시계열 자료를 d번 차분한 결과가 정상성 시계열의 ARIMA(p, q)모형이라면 시계열은 차수 d를 갖는 ARIMA(p, d, q)모형이 된다. 따라서 ARIMA는 차분(d)을 수행하여 비정상성 시계열을 정상성시계열로 바꾸어 놓고 시계열 자료를 분석

 

< ARIMA모형으로 시계열 자료를 처리하는 절차 >

  • (1) 식별: 시계열 자료가 어떤 모형(AR, MA, ARMA)에 해당하는가를 판단하는 단계. ARIMA의 3개 차수(p, d, q)를 결정. 식별수단은 자기상관함수(acf)와 부분자기상관함수(pacf)를 이용
  • (2) 추정: 식별된 모형의 파라미터를 추정하는 단계. 파라미터를 추정하는 수단은 최소제곱 법 이용
  • (3) 진단: 모형 식별과 파라미터 추정으로 생성된 모형이 적합한지를 검증하는 단계. 잔차가 백색 잡음(white noise)인지를 살펴보고 백색 잡음과 차이가 없으면 적합하다고 할 수 있다. 여기서 백색잡음은 모형의 잔차가 불규칙적이고, 독립적으로 분포된 경우이며 특정 시차 간의 데이터가 서로 관련성이 없다는 의미

 

 

ARIMA 모형 시계열 예측

 

(1) ARIMA 모형 분석 절차

시계열 분석 절차

1단계: 시계열 자료 특성분석(정상성/비정상성)

2단계: 정상성 시계열 변환

3단계: 모형 식별과 추정

4단계: 모형 생성

5단계: 모형 진단(모형 타당성 검정)

6단계: 미래 예측(업무 적용)

 

(2) 정상성 시계열의 비계절형

비정상성 시계열은 차분을 통해서 정상성 시계열로 바꾸는 과정을 확인

모형 식별과 추정은 auto.arima()함수 이용

 

ex) 계절성이 없는 정상성 시계열분석

정상성 시계열은 대체로 평균을 중심으로 진폭이 일정하게 나타난다

만약 비정상성 시계열이면 차분을 통해서 정상성 시계열로 바꾸는 작업이 필요

 

#1 시계열 자료 특성분석

#1-1  데이터 준비

input <- c(3180, 3000, 3200, 3100, 3300, 3200, 3400, 3550, 3200, 3400, 3300, 3700)

 

 

#1-2 시계열 객체 생성(12개월)

tsdata <- ts(input,start=c(2015,2),frequency=12)
tsdata
#           Jan  Feb   Mar   Apr   May  Jun    Jul    Aug  Sep   Oct    Nov  Dec
# 2015         3180 3000 3200 3100 3300 3200 3400 3550 3200 3400 3300
# 2016 3700 

ts()함수: 벡터 자료(input)를 대상으로 시계열 객체(tsdata)생성

 

 

#1-3 추세선 시각화

plot(tsdata,type="l",col="red")


차분을 통해서 비정상성 시계열을 정상성 시계열로 변환

차분은 일반 차분과 계절 차분으로 구분

계절성을 갖는 경우에는 계절 차분을 적용

 

 

#2 정상성 시계열 변환

par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata) 
plot(diff)

1차 차분으로 정상화가 되지 않으면 2차 차분을 수행

 

#3 모델 식별과 추정

install.packages("forecast")
library(forecast)

arima <- auto.arima(tsdata)
arima
# Series: tsdata 
# ARIMA(1,1,0) 

# Coefficients:
#                ar1
#          -0.6891
# s.e.   0.2451

# sigma^2 = 31644:  log likelihood = -72.4
# AIC=148.8   AICc=150.3   BIC=149.59

ARIMA(AR, Diff, MA) → ARIMA(1, 1, 0)

한번 차분한 결과가 정상성 시계열의 ARMA(1,0)모형으로 식별

AIC(Akaike’s Information Criterion): 모형의 적합도와 간명성을 동시에 나타내는 지수로 값이 적은 모형을 채택

BIC(Bayesian Information Criterion): 이론적 예측력을 나타내는 지표

 

< ARIMA(p, d, q)모형의 정상성 시계열 변환 방법 >

  • d=0이면, ARMA(p, q)모형이며 정상성을 만족
  • p=0이면, IMA(d, q)모형이며 d번 차분하면 MA(q)모형을 따른다.
  • q=0이면, IAR(p, d)모형이며, d번 차분하면 AR(p)모형을 따른다.

 

 

#4 모형 생성

model <- arima(tsdata,order=c(1,1,10))

model
# Call:
#   arima(x = tsdata, order = c(1, 1, 10))

# Coefficients:
#                   ar1     ma1       ma2       ma3     ma4       ma5       ma6      ma7
#          -0.5034  0.1273  -0.0386  -0.6869  0.5894  0.6620  -0.2053  0.2804
# s.e.   0.5983   1.2678    1.1022   1.8380  0.8019  1.4118   0.9085  1.0562
#                  ma8     ma9     ma10
#            -0.0529  0.4828  -0.4268
# s.e.       
0.8112  1.4746   1.0915

# sigma^2 estimated as 8492:  log likelihood = -69.9,  aic = 163.81

모형의 적합성 검증을 위해서 잔차가 백색 잡음(white noise)인가를 살펴본다.

백색잡음: 모형의 잔차가 불규칙적이고, 독립적으로 분포된 경우를 의미

특정 시간 간의 데이터가 서로 관련성이 없다(독립적인 관계)

 

< 모형을 진단하는 기준 >

1) 자기 상관 함수의 결과가 유의미한 시차가 없는 경우

2) 오차 간의 상관관계가 존재하는지를 검정하는 방법인 Box-Ljung검정에서 p값이 0.05이상인 경우

 

 

#5 모형 진단(모형의 타당성 검정)

#5-1 자기 상관 함수에 의한 모형 진단

tsdiag(model)


좋은 시계열 모형은 잔차의 ACF에서 자가 상관이 발견되지 않고,

p-value값이 0.05이상으로 분포 → 현재 ARIMA모형은 매우 양호한 시계열 모형

 

 

#5-2 Box-Ljung검정에 의한 잔차항 모형 진단

Box.test(model$residuals, lag = 1, type = "Ljung")
# Box-Ljung test

# data:  model$residuals
# X-squared = 0.23813, df = 1, p-value = 0.6256

Box-Ljung검정: 모형의 잔차를 이용하는 카이제곱 검정방법. 시계열 모형이 통계적으로 적절한지 검정. P-value가 0.05이상이면 모형이 통계적으로 적절

백색잡음과정: 시계열 모형이 적합하다면 잔차항은 서로 독립이고 동일한 분포를 따름 정상 시계열은 이러한 백색잡음과정으로부터 생성

 

 

#6 미래예측

fore <- forecast(model)
fore
par(mfrow=c(1,1))
plot(fore)




model2 <- forecast(model,h=6)
#               Point Forecast        Lo 80        Hi 80       Lo 95       Hi 95
# Feb 2016       3426.135  3271.402 3580.868 3189.491 3662.779
# Mar 2016       3473.119  3307.027 3639.210 3219.104 3727.133
# Apr 2016        3539.809  3343.116 3736.502 3238.992 3840.625
# May 2016       3513.202  3318.411 3707.993 3215.295 3811.109
# Jun 2016        3563.934  3325.848 3802.021 3199.812 3928.056
# Jul 2016         3424.778  3151.548 3698.008 3006.908 3842.647

forecast()함수: 시계열의 예측치를 제공하는 함수

 

 

(2) 정상성 시계열의 계절

ex) 계절성을 갖는 정상성 시계열분석

 

#1 시계열 자료 특성분석

#1-1  데이터 준비

data <- c(55, 56, 45, 43, 69, 75, 58, 59, 66, 64, 62, 65, 55, 49,
                67, 55, 71, 78, 61, 65, 69, 53, 70, 75,  56, 56, 65, 55, 68,
                80, 65, 67, 77, 69, 79, 82, 57, 55, 63, 60, 68, 70, 58, 65, 70, 55, 65, 70)
length(data)

 

 

#1-2 시계열 자료 생성

tsdata <- ts(data,start=c(2020,1),frequency=12)
tsdata
#          Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 2020  55  56  45  43  69  75  58  59  66  64  62  65
# 2021  55  49  67  55  71  78  61  65  69  53  70  75
# 2022  56  56  65  55  68  80  65  67  77  69  79  82
# 2023  57  55  63  60  68  70  58  65  70  55  65  70

 

#1-3 시계열 요소 분해 시각화

ts_feature <- stl(tsdata,s.window="periodic")
plot(ts_feature)

  • Seasonal, trend, random요소 분해 시각화를 통해 분석
  • 차분을 통해 비정상성 시계열을 정상성 시계열로 변환

 

 

#2 정상성 시계열 변환

par(mfrow = c(1, 2)) 
ts.plot(tsdata)

diff <- diff(tsdata) 
plot(diff)



 

 

#3 모형 식별과 추정

library(forecast)
ts_model2 <- auto.arima(tsdata) 
ts_model2
# Series: tsdata 
# ARIMA(0,1,1)(1,1,0)[12] 

# Coefficients:
#               ma1     sar1
#         -0.6580  -0.5317
# s.e.   0.1421   0.1754

# sigma^2 = 41.97:  log likelihood = -116.31
# AIC=238.62   AICc=239.4   BIC=243.29

ARIMA(0, 1, 1)(1, 1, 0)

(0, 1, 1): 차분차수 1, MA모형 차수1. 한번 차분한 결과가 정상성 시계열의 ARMA(0, 1)모형으로 식별

(1, 1, 0): 계절성을 갖는 자기 회귀(AR)모형 차수가 1. 계절성을 갖는 시계열 [12]: 계절의 차수 12개월

 

 

#4 모형 생성

model <- arima(tsdata,c(0,1,1),seasonal=list(order=c(1,1,0)))
model
# Call:
#   arima(x = tsdata, order = c(0, 1, 1), seasonal = list(order = c(1, 1, 0)))

# Coefficients:
#              ma1     sar1
#         -0.6580  -0.5317
# s.e.   0.1421   0.1754

# sigma^2 estimated as 39.57:  log likelihood = -116.31,  aic = 238.62

 

 

#5 모형 진단(모형 타당성 검정)

#5-1자기 상관 함수에 의한 모형 진단

tsdiag(model)


 

#5-2 Box-Ljung에 의한 잔차항 모형 진단

Box.test(model$residuals,lag=1,type="Ljung")
# Box-Ljung test

# data:  model$residuals
# X-squared = 0.33656, df = 1, p-value = 0.5618

모형 진단을 통해서 적절하나 모형으로 판단되면 이 모형으로 가까운 미래를 예측하는데 이용

 

 

#6 미래 예측

par(mfrow=c(1,2))

fore <- forecast(model,h=24)             #2년예측
plot(fore)

fore2 <- forecast(model,h=6)            #6개월 예측
plot(fore2)

2년 예측, 6개월 예측

반응형

'통계기반 데이터분석' 카테고리의 다른 글

[ R ] 의사결정나무 #2  (0) 2022.11.29
[ R ] 의사결정나무 #1  (0) 2022.11.29
[ R ] 시계열분석 #1  (1) 2022.11.28
[ R ] 로지스틱 회귀분석  (0) 2022.11.28
[ R ] 회귀분석 #2 다중회귀분석  (0) 2022.11.27
Comments