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

시계열 자료의 평활법 - 회귀평활 part 2

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

지난번 포스트(2020/10/15 - [머신러닝 with R/시계열모델링 with R] - 시계열 자료의 평활법 - 회귀평활 part 1)에 이어서 이번에는 loess, splin 평활법 등에 대해 알아보자. 첫 째, loess(local polynomial regression) 평활법은 시계열 데이터의 특정 윈도우에 대해 가중하여 평활화를 수행하며 자료를 쪼개서 가중회귀 분석을 수행하는 방법이다. 그리고 둘 째 Spline 평활법의 경우 차원의 수를 줄이려고 의도하지 않는 분석기법인 non-parametric regression 기법을 주로 이용하는 방법으로 3차 수식의 매끄러운 곡선으로 평활화한다.

 

#loess, Spline 방법의 자세한 수리적 유도과정에 대해 좀 더 상세한 내용을 알고자하는 사람은 관련서적을 참고하자. 아래의 추천도서는 개별 모델들의 수리적 유도과정 뿐만 아니라 적절한 샘플 예제도 구현하기 용이하도록 제공하고 있어 상당한 도움이 된다.

 

R프로그램에 기반한 시계열 자료 분석
국내도서
저자 : 이재길
출판 : 황소걸음 아카데미 2017.05.22
상세보기

 

#작업경로를 지정하는 명령어
setwd("")

mydatat<-read.csv("jisu.csv",
                  header=TRUE, na.strings = "")

o=mydatat$코스피지수
la=lowess(o)
plot(la)

#span 값이 default=0.75 일 경우 훨씬 스무드하게
lt = seq(1:length(o))
la2=loess(o~lt)
plot(la2$fitted)

#span 값을 줄일 경우 자료에 근접하며 스무딩 됨.
la3=loess(o~lt,span=0.15)
plot(la3$fitted)

#df  값이 default 2.8인 경우 훨씬 더 부드러운 스무딩.
sa=smooth.spline(x=lt,y=o, df=2.8)
plot(sa)

#df  값을 크게할 경우 자료에 근접한 진폭을 가지는 스무딩.
sa1=smooth.spline(x=lt,y=o,df=10)
plot(sa1)

#smooth scaater 로 스무딩하는 경우에는 span, degree 의 값에 따라 스무딩의 영향을 받는다.
sa2=scatter.smooth(lt,o, lpars=list(col="red",lty=2,lwd=2))

#span의 값을 작게, degree 의 값을 크게 할 경우 원자료에 근접한 진폭을 가지는 스무딩.
sa3=scatter.smooth(lt,o, span=1/5,degree = 2,lpars=list(col="red",lty=2,lwd=2))

#-------------------------예측성능평가---------------------
#부드러운 스무딩 기법(장기에 적합)
#Training set 0.008654624 0.02084328 0.01506712 0.0004114394 0.0007194628 0.01743319 0.9801353
fla2=forecast::forecast(la2$fitted,h=4)
forecast::accuracy(fla2)
plot(fla2)

#변동이 있는 스무딩 기법(단기에 적합)
#Training set 0.03758905 1.04482 0.6527471 0.002547642 0.03187992 0.1414083 0.625743
fla3=forecast::forecast(la3$fitted,h=4)
forecast::accuracy(fla3)
plot(fla3)

#부드러운 스무딩 기법(장기에 적합)
#Training set 0.002274293 0.00268078 0.002277962 0.0001088213 0.0001089883 0.006305622 0.9906848
fsa=forecast::forecast(sa$y,h=4)
forecast::accuracy(fsa)

#변동이 있는 스무딩 기법(단기에 적합)
#Training set 0.02124678 0.1108576 0.07934437 0.001171173 0.003881668 0.02721964 0.9964433
fsa1=forecast::forecast(sa1$y,h=4)
forecast::accuracy(fsa1)

 

분석의 결과 각 각의 평활하 기법마다 확장 span의 값에 따라 스무딩에 영향을 받는 것을 확인할 수 있다. 아쉽지만 이와 같은 스무딩 기법은 kernel과 달리 최적의 통계치를 제공하지 않는다. 이럴때 적절한 값은 연구의 목적에 따라 설정하는 것이 필요하다. 개인적으로 분석의 목적이 장기적인 시계열 예측인가(완만). 아니면 단기적인 시계열 예측인가(진동)에 따라 적절한 값을 선택하는 것이 맞다고 판단된다.

 

자, 그렇다면 과연 예측의 성능은 어떠한 방법이 더 우수할까라는 점에 대해서 한번 짚고 넘어가보자. 완만한 스무딩 자료와 진폭이 큰 스무딩 자료의 예측오차에 대한 성능평가 결과 대부분의 수행에서 완만한 스무딩 기법이 더욱 우수한 성능을 가지는 것으로 분석되었다. (위 예측성능평가에서 각 오차들이 작은 값을 가질 수록 더욱 유용한 모델)

 

이 부분에 대해서는 여러가지로 고민해봐야 할 점이 많은 것 같다. 일반적으로 안정적 시계열일 경우 이코노믹 충격의 효과는 빠른 시간내에 소멸할 것이라는 가정하에서 분석이 이루어진다. 만약 이러한 충격반응에 대한 시계열 예측을 분석하고자 한다면 장기보다는 단기의 성과가 더 우수할 것이라 생각하지만 위와 같이 스무딩을 통한 추세를 분석하는 것이 목적이라면 장기적인 트렌드를 예측하는 것이 더 나을 수도 있다고 본다. 

scatter smooth 로 평활화한 그래프
scatter smooth 방법이지만 span을 작게 degree 값을 크게하여 스무딩한 경우의 그래프

 

 

장기추세예측
단기추세예측

728x90
반응형

댓글