728x90
반응형
이동평균은 가중치가 없는 산술평균으로 평활하는데 비해 지수 평활은 가중치를 부여한 가중평균을 산정하는 방법이다. 이전 포스트에서(2020/10/15 - [머신러닝 with R/시계열모델링 with R] - 시계열 자료의 평활법 - 이동평균 평활법) 다루었던 가중이동평균 평활법과 별반 차이가 없다. 그러나 가중치를 연구자가 임의로 설정하지 않고 최소 SSE(sum sqared error)를 나타내는 알파값을 추정하는 방법을 적용한다면 홀트-윈터 방법을 이용할 수 있다. #홀트-윈터 방법의 자세한 수리적 유도과정에 대해 좀 더 상세한 내용을 알고자하는 사람은 관련서적을 참고하자. 아래의 추천도서는 개별 모델들의 수리적 유도과정 뿐만 아니라 적절한 샘플 예제도 구현하기 용이하도록 제공하고 있어 상당한 도움이 된다.
|
#작업경로를 지정하는 명령어
setwd("")
mydatat<-read.csv("jisu.csv",
header=TRUE, na.strings = "")
o=mydatat$코스피지수
plot(o)
#-----------------단순이동평균.-------------------
#5일 이동평균
f5=filter(mydatat$코스피지수, filter=rep(1/5,5), side=1)
plot(f5)
#이중이동평균
df5=filter(f5, filter=rep(1/5,5), side=1)
plot(df5)
#독립성 검증(자기상관은 없는 것으로 관측)
res = o[10:100] - f5[10:100]
Box.test((res))
#독립성 검증(자기상관이 있는 것으로 관측)
res = o[10:100] - df5[10:100]
Box.test((res))
#-----------------가중이동평균.-------------------
w=c(0.5,0.4,0.3,0.2,0.1)
fw=filter(mydatat$코스피지수, filter=w)
#독립성 검증(자기상관이 있는 것으로 관측)
res = o[10:100] - fw[10:100]
Box.test((res))
#-----------------예측.-------------------
library(forecast)
fore1=forecast(o[10:100],h=1)
fore2=forecast(f5[10:100],h=1)
fore3=forecast(df5[10:100],h=1)
fore4=forecast(fw[10:100],h=1)
#-----------------검증.-------------------
#ME : 예측오차의 산술평균
#RMSE : ME의 제곱의 평균
#MAE : 예측오차의 절대값의 평균
#MPE : 예측오차의 상대적인 크기를 반영(비율)한 평균
#MAPE : 예측오차의 절대값의 상대적 크기를 반영한 평균
#MASE : 예측오차의 절대값에 대한 평균으로 크기를 나타내는 지표
accuracy(fore1)
accuracy(fore2)
accuracy(fore3) #이중이동평균의 성능이 가장 우수(오차들이 작다)
accuracy(fore4)
#-----------------HoltWinters Method.-------------------
#단순히 가중치를 0.1로 지정할 경우.
h=HoltWinters(o,alpha = 0.1, beta=F,gamma=F)
plot(h$fitted)
fh=forecast(h,h=1)
#테스트 결과 자기상관이 존재하는 것으로 나타남.
Box.test(fh$residuals)
#가중치를 추론하고자 할 경우
hi=HoltWinters(o,beta=F,gamma=F)
plot(hi$fitted)
fi=forecast(hi,h=1)
#테스트 결과 자기상관이 없는 것으로 나타남.<-그렇게 되도록 추정했으므로
Box.test(fi$residuals)
accuracy(fore3) #이중이동평균의 성능이 가장 우수(오차들이 작다)
accuracy(fi) #홀트-윈터 방법으로 추정한 결과 일부 지표에서는 이중이동평균보다 낫지만 드라마틱하지는 않다.
#추세가 있는 시계열의 가중치를 추론하고자 할 경우
#추세가 있다고 가정할 경우 alpha 값이 1이 되어 가중평균은 성립되지 않는 것으로 나타남.
#gamma도 무시하지 않고 고려하면 계절성이 있는 자료일 때 사용하는 방법이지만 코스피 지수는 계절을 타지 않음.
#굳이 계절성이 있다고 고려해본다면 산타랠리?? 정도 이지만 그것도 결산실적이 좋을 것으로 예측될 경우 가능한 이야기라 불규칙적임
hit=HoltWinters(o,gamma=F)
#-----------------단수 지수평활법.-------------------
s=ses(o)
#simple exponential smooth 기법으로 추정한 alpha=0.99 로 1에 매우 근사한 값으로 나왔다.
summary(s)
sf=forecast(s,h=1)
accuracy(sf) #홀트-윈터 방법으로 추정한 결과와 별다른 차이점을 발견할 수 없다.
#-----------------ets-------------------
e=ets(o)
summary(e)
ef=forecast(e,h=1)
#테스트 결과 자기상관이 없는 것으로 나타남.
Box.test(ef$residuals)
accuracy(ef) #홀트-윈터 방법보다는 다소 개선된 성능지표를 관측할 수 있다.
위 코드를 토대로 분석한 결과 아래의 그림처럼 자료에 대한 이해가 없는 상태에서 가중치를 임의로 조정하면 자기상관성을 없애지도 못할 뿐더러 지나친 혹은 부족한 평활화로 인해 모델의 예측 성능을 저해하는 경우도 발생할 수 있다.
728x90
반응형
'시계열모델링' 카테고리의 다른 글
시계열 자료의 평활법 - 회귀평활 part 2 (0) | 2020.10.19 |
---|---|
시계열 자료의 평활법 - 회귀평활 part 1 (0) | 2020.10.15 |
시계열 자료의 평활법 - 이동평균 평활법 (0) | 2020.10.15 |
시계열 자료의 상관분석과 검정 (0) | 2020.10.12 |
시계열 자료의 허구적 인과관계 (0) | 2020.10.12 |
댓글