본문 바로가기
시계열모델링

시계열 자료의 평활법 - 이동평균 평활법

by 다빈치스탁 2020. 10. 15.
728x90
반응형

jisu.csv
0.08MB

시계열의 자료는 추세, 계절, 경기 및 특이요인으로 구성된다. 이렇게 특정한 요인에 의해 표본 추출이나 잡음 때문에 데이터에 좋지 않은 미세한 변동이나 노이즈가 있을 때 이런 변동이나 불연속성을 약하게 하여 자료의 중심 집중도를 파악하기 위해 평활을 수행한다. 

 

이러한 평활법의 방법으로 이동평균, 가중평균, 지수적 이동평균, 홀트-윈터스예측, 회귀모형 평활, 기타 등이 있는데 이중에서 이동평균의 경우 가장 많이 사용하고 일반적으로 널리 알려져 있다. 방법은 다양하지만 추구하는 바는 불규칙한 변동의 중심 집중도를 파악하기 위한 것이라는 목적은 동일하다.

 

자 그러면 이제부터 R을 이용해서 위의 평활법들을 수행해보자. 아래의 코드는 단순한 이동평균 평활법의 방법이다. 어떤 임의의 시계열 자료에 대해서 단순이동이 더 우수한가 혹은 가중이동평균이 더 우수한가에 대해서 추론해볼 수 있다는 점에서 꽤 유용한 방법이다. 

#작업경로를 지정하는 명령어
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)

 

아래의 그림과 같이 원계열 자료보다는 훨씬 스무딩 되어 있고 중심집중 경향을 훨씬 잘 파악할 수 있다. 항상 예측을 위한 자료는 잡음이 적을수록 효과적이라 판단할 수 있다.

단순한 시계열 그래프
이중이동평균을 적용한 그래프

 

728x90
반응형

댓글