시계열 분석(Timeseries Analysis)      

 

: 어떤 현상에 대해서 시간의 변화에 따라 일정한 간격으로 현상의 변화를 기록한 시계열 데이터를 대상으로 미래의 변화에 대한 추세를 분석하는 방법, 시간 경과에 따른 관측 값의 변화를 패턴으로 인식하여 시계열 모형을 추정하고, 이 모형을 통해서 미래의 변화에 대한 추세를 예측하는 분석방법입니다. (시계열 자료 - 시간의 흐름에 따라 관찰된 데이터)

 

- 과거로 부터 현재까지의 변화를 통해서 향후 미래를 예측 (현상 이해 -> 미래 예측)

 

 

시계열 자료 분류

 

① 정상성(stationary) 시계열 

 

: 어떤 시계열자료의 변화 패턴이 평균값을 중심으로 일정한 변동폭을 갖는 시계열

  (시간의 추이와 관계 없이 평균과 분산이 일정) 

 

- 대부분의 시계열 자료는 다루기 어려운 비정상성 시계열 자료이기 때문에 분석하기 쉬운 정상성 시계열 자료로 변환

 

평균이 일정 : 모든 시점에 대해 일정한 평균을 가진다.

- 평균이 일정하지 않은 시계열은 차분(difference)을 통해 정상화

- 차분은 현시점 자료에서 이전 시점 자료를 빼는 것

- 일반차분 : 바로 전 시점의 자료를 빼는 것

- 계절차분 : 여러 시점 전의 자료를 빼는 것, 주로 계졀성을 갖는 자료를 정상화 하는데 상용 

 

분산도 시점에 의존하지 않음

- 분산이 일정하지 않은 시계열은 변환(transformation)을 통해 정상화

 

공분산도 시차에만 의존하지 않음 

 

 

② 비정상성 (non-stationary) 시계열 

: 대부분 시계열자료

 

- 시간의 추이에 따라서 점진적으로 증가하는 추세


- 분산이 일정하지 않은 경우

 

 

 

시계열 분석 특징


① y변수 존재 : 시간 t를 설명변수(x)로 시계열(Yt)을 반응변수(y)로 사용

                  - 설명변수(=독립변수), 반응변수(=종속변수)


② 미래 추정 : 과거와 현재의 현상을 파악하고 이를 통해서 미래 추정

                 - 현상 이해 -> 미래 예측


③ 계절성 자료 : 시간 축을 기준으로 계절성이 있는 자료를 데이터 셋으로 이용

                    - 계절성의 자료가 내포  


④ 모수 검정 : 선형성, 정규성, 등분산성 가정 만족


⑤ 추론 기능 : 유의수준 판단 기준이 존재하는 추론통계 방식

추론 통계 분석 : 가설설정 -> 유의수준 임계값 정의 -> 측정도구 결정 -> 데이터 수집  -> 데이터 분석

-> 최종결과 유의수준을 기준으로 판단 검증

추론통계 방식을 사용하는 이유 : 추론 통계의 접근 방식이 모집단을 대표하는 샘플 데이터를 통해 전체를 추정


⑥ 활용분야 : 경기예측, 판매예측, 주식시장분석, 예산 및 투자 분석, 교통수요 등

 

 

 

시계열 분석 적용 범위


① 기존 사실에 대한 결과 규명 : 주별, 월별, 분기별, 년도별 분석을 통해서 고객의 구매 패턴을 분석


② 시계열자료 특성 규명 : 시계열에 영향을 주는 일반적인 요소(추세, 계절, 순환, 불규칙)를 분해해서 분석한다.(시계열 요소 분해법)


③ 가까운 미래에 대한 시나리오 규명 : 탄소배출 억제를 성공 했을 때와 실패 했을 때 지구 온난화는 얼마나 심각해질 것인가를 분석한다.


④ 변수와 변수의 관계 규명 : 경기선행지수와 종합주가지수의 관계를 분석한다.(국가 경제와 주가지수 관계)


⑤ 변수 제어 결과 규명 : 입력 변수의 제어(조작)를 통해서 미래의 예측 결과를 통제할 수 있다.(판매 촉진에 영향을 주는 변수 값을 조작할 경우 판매에 어떠한 영향을 미치는가?)

 

 

 

시계열 데이터 특성

 

① 추세 변동(Trend variation: T) 
 - 인구 변동, 지각변동, 기술변화 등 상승과 하락의 영향(장기 변동요인) , 앞으로 나아갈 방향성 

 
② 순환 변동(Cyclical variation: C)
 - 2년~10년의 주기에서 일정한 기간 없는 반복적 요소(중․장기 변동요인)

 

③ 계절 변동(Seasonal variation: S)
 - 일정한 기간(월, 요일, 분기), 1년 단위 반복적 요소(단기 변동요인)

 

④ 불규칙변동(Irregular variation: I)
 - 어떤 규칙 없이 예측 불가능한 변동요인(설명할 수 없는 요인) - white noise 
 - 실제 시계열자료에서 추세, 순환, 계절 요인을 뺀 결과(회귀분석 오차)

 

 

시계열 분석 절차

 

정상성시계열로 변환 

 

비정상 시계열 -> 정상성 시계열 : 평균 정상화 : 차분

비정상 시계열 -> 정상성 시계열 : 분산 정상화 : 로그 -> 차분

 

 

 

 

모형 생성 : 시계열 모형 생성의 대표적인 방법(현재 가장 많이 이용)

 

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

 

- 비정상성을 가진 시계열 모형(차수 적용)

자기회귀누적이동평균모형(ARIMA)

 

 

 

 

1. 시계열 자료 확인

비정상성 시계열 -> 정상성 시계열 

 

① 데이터 셋 가져오기

data("AirPassengers") # 12년(1949~1960년)간 매월 항공기 탑승 승객 수를 기록한 시계열 자료.

str(AirPassengers) 
출력값 : Time-Series [1:144] from 1949 to 1961: 112 118 132 129 121 135 148 148 136 119 ...

View(AirPassengers)

< 승객 탑승 수 >

 

② 차분(Differencing) 적용 - 현재 시점에서 이전 시점의 자료를 빼는 연산으로 평균을 정상화하는데 이용 : 평균 정상화

x11()
par(mfrow=c(1,2))
ts.plot(AirPassengers)  - 비정상성 시계열 데이터
log <- diff(log(AirPassengers)) # 로그+차분 수행 
plot(log)

ts.plot( ) : 시계열 시각화 

diff( ) : 차분 적용

             비정상성의 시계열 데이터     ->    정상성의 시계열 데이터(차분+로그) 

 

 

 

 

2. 시계열 자료 시각화 

- 단일 시계열 자료 시각화 

① WWWusage 데이터 셋 가져오기 - R에서 기본 제공 데이터 셋으로 인터넷 사용 시간을 분 단위로 측정한 100개 vector로 구성된 시계열 자료

data("WWWusage")
str(WWWusage) # Time-Series [1:100] from 1 to 100:
출력값 : Time-Series [1:100] from 1 to 100: 88 84 85 85 84 85 83 85 88 89 ...

WWWusage

 

② 시계열 자료 추세선 시각화 


- 추세 : 어떤 현상이 일정한 방향으로 나아가는 경향. 주식시장분석이나 판매예측등에서 어느 기간동안 같은 방향으로 움직이는 경향을 의미


- 추세선 : 추세를 직선이나 곡선 형태로 차트에서 나타내는 선(어느 정도 평균과 분산 확인 가능)

X11()
ts.plot(WWWusage, type="l", col="red")

- 다중 시계열 자료 시각화 

 

①  데이터 셋 가져오기

data("EuStockMarkets") # 유럽(1991~1998년)의 주요 주식의 주가지수 일일 마감 가격.

head(EuStockMarkets) # DAX(독일) SMI(스위스) CAC(프랑스) FTSE(영국)

- 출력값 -
         DAX    SMI    CAC   FTSE
[1,] 1628.75 1678.1 1772.8 2443.6
[2,] 1613.63 1688.5 1750.5 2460.2
[3,] 1606.51 1678.6 1718.0 2448.2
[4,] 1621.04 1684.1 1708.1 2470.4
[5,] 1618.16 1686.6 1723.1 2484.7
[6,] 1610.61 1671.6 1714.3 2466.8

str(EuStockMarkets) - 레코드 : 1860개 , 컬럼 4개 

- 출력값 -
Time-Series [1:1860, 1:4] from 1991 to 1999: 1629 1614 1607 1621 1618 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "DAX" "SMI" "CAC" "FTSE"

 

② 데이터프레임으로 변환

EuStock <- data.frame(EuStockMarkets)

head(EuStock)

- 출력값 -
      DAX    SMI    CAC   FTSE
1 1628.75 1678.1 1772.8 2443.6
2 1613.63 1688.5 1750.5 2460.2
3 1606.51 1678.6 1718.0 2448.2
4 1621.04 1684.1 1708.1 2470.4
5 1618.16 1686.6 1723.1 2484.7
6 1610.61 1671.6 1714.3 2466.8

 

③ 단일 시계열 데이터 추세선

X11()
plot(EuStock$DAX[1:1000], type = "l", col="red") # 선 그래프 시각화 

- 1000개의 데이터를 먼저 가져와서 시각화 

 

④ 다중 시계열 데이터 추세선 

plot.ts(cbind(EuStock$DAX[1:1000], EuStock$SMI[1:1000]), main="주가지수 추세선")

 

 

 

 

3. 시계열 요소 분해 시각화

시계열 요소 분해 시각화 

 

① 시계열 자료 준비 

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) 출력값 : 36

 

② 시계열자료 생성 : 시계열 자료 형식으로 객체 생성 

tsdata <- ts(data, start = c(2016, 1), frequency = 12) #시작 : 2016년 1월, 주기: 12

tsdata # 2016~2018

- 출력값 -
     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

 

③ 추세선 확인

par(mfrow=c(1,1))
ts.plot(tsdata) # plot(tsdata)와 동일함.

④ 시계열 분해- stl( ) : 계절요소, 추세, 잔차 등 모두 제공

plot(stl(tsdata, "periodic")) # periodic : 주기 

각각의 특징을 시각화 하여 출력 

 

-> 기본 

 

 

-> 계절변동 (Seasonal variation: S)

- 1년 단위의 반복되어지는 특징을 가짐 

 

 

-> 추세변동 (Trend variation: T)) 

- 증가  

 

 

-> 잔차(오차) : 관측치와 예측치 사이의 오차 

 

 

 

 

 

⑤ 시계열 분해와 변동 요인 제거

m <- decompose(tsdata) # decompose()함수 이용 시계열 분해 

attributes(m) # 변수 보기 

- 출력값 -
$names
[1] "x"        "seasonal" "trend"    "random"   "figure"   "type"    

$class
[1] "decomposed.ts

plot(m) # 추세요인, 계절요인, 불규칙 요인이 포함된 그래프.

 

 

 

-> 기본 데이터 셋 

 

 

 

-> 추세 요인 

 

 

-> 계절 요인(년단위 주기의 특징)

 

 

 

-> 불규칙(white noise) 

 

 

 

 

plot(tsdata - m$seasonal) # 계절요인을 제거한 그래프.

                             - 계절요인 제거한 추세선 

 

⑥ 추세요인과 불규칙요인 제거 

plot(tsdata - m$trend) # 추세요인 제거 그래프 

plot(tsdata - m$seasonal - m$trend) # 불규칙 요인만 출력.

 

 

 

 

4. 자기 상관 함수/ 부분 자기 상관 함수

 

자기상관함수(Auto Correlation Function)

부분자기상관함수(Partial Auto Correlation Function)

- 자기상관성 : 자기 상관계수가 유의미한가를 나타내는 특성
- 자기상관계수 : 시계열 자료에서 시차(lag)를 일정하게 주는 경우 얻어지는 상관 계수 

 

- 시계열 변수의 시간에 따른 자기 상관 관계를 나타내는 것입니다. 계열 상관, 교차자기 상관이라고도 합니다. 상관이 특정 시간에 대한 변수간의 상관관계라면, 자기상관은 시간의 변화에 따른 변수 간의 상관관계 변화가 주 관심사입니다.

 

어떤 시계열 데이터가 일정한 패턴을 본인다면, 자기 상관이 있따는 것을 뜻합니다. 시간에 따라 변수의 값이 자기상관성을 가지고 변화하므로, 무작위가 아닌 일정한 패턴을 보여준다고 할 수 있습니다. 

 

- 자기 상관을 어떻게 활용할 수 있을까요? 바로 데이터의 무작위성을 파악할 수 있습니다.

자기상관 데이터가 ( - )에 가까울 수록, 무작위성이 있는 시계열 데이터로 판단할 수 있습니다. 0보다 큰값을 가질수록 자기상관을 강하게 가진다고 할 수 있습니다.

 

① 시계열자료 생성 

input <- c(3180,3000,3200,3100,3300,3200,3400,3550,3200,3400,3300,3700)
length(input) 출력값 : 12

tsdata <- ts(input, start = c(2015, 2), frequency = 12) # Time Series
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           

 

② 자기상관함수 시각화 

acf(na.omit(tsdata), main="자기상관함수", col="red")

 

 

 

 

 

- 첫번째의 값은 자기 자신과의 관계이므로 1이 나올 수 밖에 없다. 

 

- 파란선(임계치) 안에 들어오면 자기상관계에 의해서 데이터셋 자체는 자기 상관성과 관련해서 자기상관성이 없음을 보여준다. 

 

- 일정주기로 체크해봤을 때, 자기상관성이 없다.

 

 

 

 

 

 

③ 부분자기상관함수 시각화 

pacf(na.omit(tsdata), main="부분자기상관함수", col="red")

 

 

파란색 안에 들어오면 자기상관성이 없음. 

 

시계열 데이터 시간의 의존성 여부가 무작위성을 띄느냐 띄지 않느냐를 자기상관함수로 판단할 수 있다. 

 

무작위성을 띈다는 것은 random을 의미하고, 무작위성이 있다는 것을 이야기하고, 파란선(임계치)를 넘어가는 것을 의미한다. 

 

 

 

 

 

 

 

 

 

 

 

5. 추세 패턴 찾기 시각화 

추세패턴

:시계열 자료가 증가 또는 감소하는 경향이 있는지 알아보고, 증가나 감소의 경향이 선형인지 비선형인지를 찾는 과정

 

- 시계열 자료의 추세 패턴 찾기 시각화

 

① 시계열 자료 생성

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

# Time Series
tsdata <- ts(input, start = c(2015, 2), frequency = 12)

 

② 추세선 시각 

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

③ 자기상관 함수 시각화 

acf(na.omit(tsdata), main="자기상관함수", col="red")

④ 차분 시각화 

plot(diff(tsdata, differences=1))

 

 

 

 

6. 평활법(Smoothing Method)  

: 수학/통계적 방법의 분석이 아닌 시각화를 통한 직관적 방법의 데이터 분석 방법

 

- 해석에 있어서 차이점이 발생할 수 있고, 주관적인 개입이 발생할 수 있다. 

- 단기 예측용으로, 1개(일변량) 

- 시계열 자료의 체계적인 자료의 흐름을 파악하기 위해서 과거 자료의 불규칙적인 변동을 제거하는 방법

  (불규칙성의 배제) 


- 이동 평균(Moving Average - ma) : 시계열 자료를 대상으로 일정한 기간의 자료를 평균으로 계산하고, 이동 시킨

  추세를 파악하여 추세를 예측하는 분석 기법 

 

- 지수 평활법 : 전체 데이터를 평균을 계산하고, 전체 평균에 가장 최근의 값을 기준으로 일정 가정치를 부여해 가면서    추적해가는 분석 기법 (최근 데이터의 비중이 높음) 

 

이동 평균 vs 지수 평활법 

 

- 모든 관측치에 동일한 가중치를 부여하여 이동평균법은 최근 관측치나 오래된 관측치나 동일한 가중치를 사용하므로    정보를 동리하게 이용하는 단점이 잇고 과거 추세 패턴을 인지함

- 최근 관측치에 가중치, 멀어질수록 지수적으로 가중치 값 감소시키는 방법인 미래 예측에 사용. 

 

① 시계열  자료 생성 

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) 출력값 : 36

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

 

② 평활 관련 패키지 설치 

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

 

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

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

- 1년 단위 : 거의 그대로 유지 

- 2년 단위 : 급격한 변화들이 완만한 형태의 추세선으로 변화

- 3년 단위 : 확연히 차이가 나도록 완만한 형태의 추세선으로 변화 

  (불규칙성의 배제로 인한 완만하게 평균적 의미로 파악) 

 

 

 

 

7. ARIMA(Auto-regressive Integrated  Moving Average) 모형 시계열 예측

 

: ARIMA 모델은 시계열 분석 기법의 한 종류로, 과거의 관측값과 오차를 사용해서 현재의 시계열 값을 설명하는 ARMA 모델을 일반화 한 것입니다.  이는 ARMA 모델이 안정적 시계열(Stationary Series)에만 적용 가능한 것에 비해, 분석 대상이 약간은 비안정적 시계열(Non Stationary Series)의 특징을 보여도 적용이 가능하다는 의미입니다.

 

- 자기회귀누적이동평균모형(ARIMA)
- 형식) ARIMA(p, d, q) : 3개의 인수
- p : AR모형 차수, d : 차분 차수, q : MA모형 차수

[ARIMA(p,d,q) 모형 → 정상성 시계열 모형 식별] 
d=0이면, ARMA(p, q)모형이며, 정상성을 만족한다. 
q=0이면 IAR(p, d)모형이며, d번 차분하면 AR(p) 모형을 따른다. 
p=0이면 IMA(d, q)모형이며, d번 차분하면 MA(q) 모형을 따른다.

 

 정상성시계열의 비계절형 

 

① 시계열자료 특성분석

데이터 준비 
input <- c(3180,3000,3200,3100,3300,3200,3400,3550,3200,3400,3300,3700)


시계열 객체 생성(12개월:2015년 2월 ~ 2016년 1월)
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                      


추세선 시각화(정상성시계열 vs 비정상성시계열) 
plot(tsdata, type="l", col='red')

② 정상성시계열 변환 

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

③ 모형 식별과 추정 

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

arima <- auto.arima(tsdata) # 시계열 데이터 이용.
arima

auto.arima( ) : 통계학에서 정의하는 모형을 제공(모형에 대한 식별)  - 모형과 차수 제공

 

형식) ARIMA(p, d, q) : 3개의 인수 
p : AR모형 차수, d : 차분 차수, q : MA모형 차수

 

[ARIMA(p,d,q) 모형 → 정상성 시계열 모형 식별]
d=0이면, ARMA(p, q)모형이며, 정상성을 만족한다.
q=0이면 IAR(p, d)모형이며, d번 차분하면 AR(p) 모형을 따른다.
p=0이면 IMA(d, q)모형이며, d번 차분하면 MA(q) 모형을 따른다.

 

= ARIMA(1,1,0) - IAR(p, d)모형, d번 차분하면 AR(p) 모형을 따른다.

(*차분을 한번만 한다고 균일한 값을 찾아가는 것이 아니다)

 

결론 : 1번 차분한 결과가 정상성시계열의 AR(1) 모형으로 식별된 AIC(Akaike’s Information Criterion)/BIC(Bayesian Information Criterion) : 이론적 예측력을 나타내는 지표 

(값이 적은 모형 채택)

 

 

예측을 위한 모형 생성 

- 이전 단계에서 식별된 모형과 파라미터를 이용하여 시계열 모형 생성

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

 

⑤ 모형 진단(모형 타당성 검정)

잔차가 백색 잡음(white noise) 검정(모형의 잔차가 불규칙적이고, 독립적)

 

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

tsdiag(model)

 

 

 

 

 

 

-> 자기상관함수 

모두 파란선(임계치) 안에 들어있음 

= 자기 상관관계가 없음

= 규칙성이 없음 = 불규칙성

= p value값이 0 이상로 분포

(ARIMA모형은 매우 양호한 시계열 모형)

= 모델 적합 

 

 

 

 

 

- 2) Box-Ljung에 의한 잔차항 모형 진단(잔차 값을 통한 모형)

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

Box-Ljung 검정방법은 모형의 잔차를 이용하여 카이제곱검정 방법으로 시계열 모형이 통계적으로 적절한지를 검정하는 방법으로 p-value가 0.05 이상이면 모형이 통계적으로 적절하다고 볼 수 있습니다. 

 

p-value = 0.7252 > 0.05 모델 적합 (모형이 통계적으로 적절)

 

 

⑥ 미래 예측(업무 적용)

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

- forecast 패키지에서 제공하는 forecast() 함수는 시계열의 예측치를 제공하는 함수로 기본 기간은 2년(24개월)

fore <- forecast(model) # 향후 2년 예측 
fore

par(mfrow=c(1,2))
plot(fore) # 향후 24개월 예측치 시각화 

model2 <- forecast(model, h = 6) # 향후 6개월 예측치 시각화 
plot(model2)

 

 

 

 

8. 정상성 시계열의 계절형

 

① 시계열자료 특성분석

 

1) 시계열자료 생성 

Aripassengers -  # 12년(1949~1960년)간 매월 항공기 탑승 승객 수를 기록한 시계열 자료.

tsdata <- AirPassengers

tsdata

- 측정값 - 

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
1952 171 180 193 181 183 218 230 242 209 191 172 194
1953 196 196 236 235 229 243 264 272 237 211 180 201
1954 204 188 235 227 234 264 302 293 259 229 203 229
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 271 306
1957 315 301 356 348 355 422 465 467 404 347 305 336
1958 340 318 362 348 363 435 491 505 404 359 310 337
1959 360 342 406 396 420 472 548 559 463 407 362 405
1960 417 391 419 461 472 535 622 606 508 461 390 432

 

2) 시계열요소분해 시각화

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

plot(ts_feature)

 

 

 

 

 

 

-> 계절 요인 

 

 

 

-> 추세 요인 

 

 

-> 잔차 

 

 

 

 

 

 

② 정상성 시계열 변환

par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata) # 평균값으로 정상화 
plot(diff) # 차분 시각화

 

③ 모형 식별과 추정

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

[ARIMA(p,d,q) 모형 → 정상성 시계열 모형 식별]
d=0이면, ARMA(p, q)모형이며, 정상성을 만족한다.
q=0이면 IAR(p, d)모형이며, d번 차분하면 AR(p) 모형을 따른다.
p=0이면 IMA(d, q)모형이며, d번 차분하면 MA(q) 모형을 따른다.

 

④ 모형 생성

model <- arima(tsdata, c(2,1,1), seasonal = list(order = c(0,1,0)))
model

 

⑤ 모형 진단(모형 타당성 검정)

 

1) 자기상관함수에 의한 모형 진단

tsdiag(model)

 

 

 

 

 

 

 

 

-> 자기상관함수

모두 파란선(임계치) 안에 들어있음 

= 자기 상관관계가 없음

= 규칙성이 없음 = 불규칙성

= p value값이 0 이상로 분포

(ARIMA모형은 매우 양호한 시계열 모형)

= 모델 적합 

 

 

 

 

 

 

 

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

 

Box-Ljung 검정방법은 모형의 잔차를 이용하여 카이제곱검정 방법으로 시계열 모형이 통계적으로 적절한지를 검정하는 방법으로 p-value가 0.05 이상이면 모형이 통계적으로 적절하다고 볼 수 있습니다.

 

p-value = 0.9879 > 0.05 모델 적합 (모형이 통계적으로 적절)

 

 

⑥ 미래 예측

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

- forecast 패키지에서 제공하는 forecast() 함수는 시계열의 예측치를 제공하는 함수로 기본 기간은 2년(24개월)

par(mfrow=c(1,2))
fore <- forecast(model, h=24) # 2년 예측 
plot(fore)
fore2 <- forecast(model, h=6) # 6개월 예측 
plot(fore2)

+ Recent posts