일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ML
- 서평
- 기계학습
- 시각화
- Ai
- 가나다영
- 한국전자통신연구원 인턴
- ETRI
- kt aivle school
- 에트리 인턴
- Eda
- dx
- 머신러닝
- KT AIVLE
- 빅데이터분석기사
- ggplot2
- 한국전자통신연구원
- 하둡
- httr
- 웹크롤링
- r
- cnn
- 지도학습
- 하계인턴
- matplot
- 딥러닝
- KT 에이블스쿨
- hadoop
- 에이블러
- arima
- 빅분기
- 프로그래머스
- 소셜네트워크분석
- python
- 시계열
- 다변량분석
- SQLD
- kaggle
- 에이블스쿨
- SQL
- Today
- Total
소품집
자기회귀모형 (Autoregressive models : AR) 식별법 본문
정의
- AR (Autoregressive model) : 시계열 yt를 종속변수로 그 이전 시점의 시계열 yt-1, … , yt-p 독립변수로 갖는 회귀모형의 형태
-
𝜀𝑡 normally distributed white noise (평균 = 0, 분산 = 1)으로 가정 즉 N(0,1^2)
-
C는 dritf term(절편)을 의미 (상수항)
-
p차 자기회귀모형이라 하며 AR(p)로 표시
-
시점 t에 있어서의 변동은 시점 t-1로부터 t-p까지의 영향을 받음
-
보통 p=1 또는 p=2까지 영향을 미치며 이를 AR(1), AR(2) 모형이라함
-
상수항이 없는 AR(1)과 AR(2) 모형
AR(p) 모형
Φ(계수값)에 따른 AR(1) 데이터 시뮬레이션
set.seed(12)
y <- ts(numeric(300))
e <- rnorm(300)
for(t in 2:300) {
y[t] <- Φ* y[t-1] +e[t]
}
Φ에 각 계수값을 0.9, 0.6, -0.8, -0.5를 대입하여 AR(1) 시계열을 생성해보자
두 가지 확인사항
- ggtsdisplay(y)
- Arima(y, order=c(1,0,0)) # 계수(모수) 추정값 확인하기
Φ =0.9 일 때
Φ = 0.6 일 때
Φ = -0.8 일 때
Φ = -0.5 일 때
AR(1) 모형 시뮬레이션 - 상수항이 있는 AR(1) 모형
set.seed(12)
y <- ts(numeric(300))
e <- rnorm(300)
for(t in 2:300) {
y[t] = -0.8*y[t-1] + e[t] +18
}
ggtsdisplay(y)
Arima(y, order=c(1,0,0))
AR(1) 모델에서 ACF는 지수감소적 형태를 보여주며 PACF는 1차이후 절단되어 모두 0에 가까운 형태를 보여줍니다.
이 모델을 식으로 써본다면 yt= -0.8590yt-1+ εt +9.9559 로 쓸 수 있습니다.
AR(2) 모형 시뮬레이션
Φ1 = 1.3, Φ2 = -0.7 인 경우
set.seed(123)
y <- ts(numeric(300))
e <- rnorm(300)
for(t in 3:300) {
y[t] = -1.3*y[t-1] -0.7*y[t-2] +e[t]
}
ggtsdisplay(y)
Arima(y, order=c(1,0,0))
AR(2) 모델또한 ACF는 지수감소적 형태를 보여주며 PACF는 2차 이후 절단 되어 모두 0에 가까운 형태를 보여줍니다.
이 모델을 식으로 써본다면 yt= -0.7522yt-1+ εt+ 0.0148 로 쓸 수 있습니다.
자기회귀모형 (Autoregressive models : AR)
AR(1)과 AR(2) 모형
정상성을 만족하기 위한 제약조건
만일, 조건을 만족하지 않는다면 시뮬레이션을 통해 확인해야합니다.
시뮬레이션을 통해서 확인해 볼까요? ^__^
크게 아래 세 가지 경우로 나누어서 확인해보도록 할게요.
- Φ1 = 1
- Φ1 = 1.5
- Φ1 = -1.5, Φ2 = 0.6
- Arima()함수 에러 확인
가상의 AR(1) 시계열로 분석해보기 (Box-Jenkins 방법론)
Φ1 = 0.9인 AR(1) 시계열 생성
set.seed(12)
y <- ts(numeric(300))
e <- rnorm(300)
for(t in 2:300) {
y[t] <- 0.9 * y[t-1] +e[t]
}
# train set과 test set 나누기
train <- window(y, start=1, end=250)
test <- window(y, start=251, end=300)
모형식별
# ACF와 PACF를 통해 모형 식별
ggtsdisplay(y) # AR(1)로 파악됨
# 통계검정 활용 (KPSS 검정)
summary(ur.kpss(train)) # 유의수준 0.01에서 귀무가설 채
H0 : 정상시계열이다
H1: 정상시계열이 아니다
유의수준 : 0.01
KPSS 검정한 결과값을 확인해보면 검정통계량은 0.183, 유의수준은 0.01에서 임계값 0.739로 귀무가설을 채택하게 됩니다. 그래서 이 모형은 정상시계열로 채택할 수 있게 되는거죠.
모수추정 (Box-Jenkins 방법론)
Arima() 함수 이용 (log MLE 방법론이 default임!)
AR(1) 인 경우 (Φ1 = 0.9)
ar_1 <- Arima(train, order=c(1,0,0))
ar_1_include.mean <- Arima(train, order=c(1,0,0),include.mean=F) # 절편이 없는 경우
# 예측 (Box-Jenkins 방법론)
## forecast 함수 이용하기
ar_1_F <- forecast(ar_1, h=50) #현재부터 미래 50개의 데이터를 예측
## 예측성과 비교하기 meanf, naive 등의 예측방법과 성과 비교
ar_1_meanf <- meanf(train, h=50)
ar_1_naive <- naive(train, h=50)
accuracy(ar_1_F, test)
accuracy(ar_1_meanf, test)
accuracy(ar_1_naive, test)
적합성 진단 (Diagnosis) (Box-Jenkins 방법론)
통계 검정을 통해 모형 선정 (잔차의 독립성 확인 및 검정)
checkresiduals(ar_1)
Box.test(ar_1$residuals, lag=10,type='Ljung-Box')
H0 : 자기상관성이 없다
H1 : 자기상관성이 있다
유의수준 : 0.05 (95%)
ACF의 분포를 보면 유의수준을 기준 안으로 분포가 되어있는 모습을 볼 수 있습니다.
즉, 자기상관성이 없다는 것을 파악할 수 있음 (자기상관성이 있기 위해선 유의수준을 밖으로 치는 값이 있어야 함)
Ljung-Box 검정을 통해 잔차를 확인해봤습니다.
p-value가 0.7955로 유의수준 95%에서 귀무가설을 채택. 즉 자기상관성이 없다는 것을 파악할 수 있습니다.
예측 (Box-Jenkins 방법론)
## forecast 함수 이용하기
ar_1_F <- forecast(ar_1, h=50) #현재부터 미래 50개의 데이터를 예측
## 예측성과 비교하기 meanf, naive 등의 예측방법과 성과 비교
ar_1_meanf <- meanf(train, h=50)
ar_1_naive <- naive(train, h=50)
accuracy(ar_1_F, test)
accuracy(ar_1_meanf, test)
accuracy(ar_1_naive, test)
예측성과를 알아보기 위해 Accuracy를 구해봤습니다.
RMSE를 기준으로 모델 적합성을 확인해보면, a1_1_F 즉 AR(1) 모형이 가장 잘 적합된 것을 확인할 수 있습니다.
'Time series' 카테고리의 다른 글
ARMA model (0) | 2020.06.20 |
---|---|
이동평균모형 (Moving average models : MA) 식별법 (0) | 2020.06.12 |
KPSS 검정 (0) | 2020.06.08 |
ARIMA model & 정상성 파악 (0) | 2020.06.05 |
시계열의 변동요인과 모형 (0) | 2020.04.20 |