59doit
[ R ] 시계열분석 #2 본문
시계열분석 기법
시계열 자료의 분석 기법: 평활법, 시계열 요소 분해법, 회귀 분석법, 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 |