지난번 포스트 내 맘대로 연구일지에서 코스지의 적정 지수를 한번 추정해봤다.(2021.08.16 - [내 맘대로 연구일지] - 코스피 지수의 적정 값은 얼마인가?) 물론 국부의 측정하는 지표로서의 관점에서는 지수는 장기적으로는 deterministic trend 한다고 봐도 무방하다. 다만 그 기다림의 시간이 너무 길고 지루할뿐더러 워런 버핏처럼 현인이 아닌 이상 장기투자의 지루함을 견딜 수 있는 사람은 매우 적다.
경기가 하락과 상승을 반복하듯이 코스피 역시 단기적인 관점에서는 bull(강세) & bear(약세)를 반복하기 때문에 코스피는 결정론적 추세를 가지는 것이 아니라 확률적 추세(stochastic trend)를 가진다고 보아야 마땅할 것이다. 이렇게 어떠한 상태에 따라 확률 과정이 다를 수 있음을 가정하고 만든 모델이 바로 마르코프 과정의 국면전환 모형인데 대표적인 방법이 해밀턴의 모형이다. 이 모델은 혼합분포, 베이즈 정리, 마코프 체인의 내용을 포함하고 있는데 상세한 수리적 유도과정 등은 참고자료를 살펴보고 여기서는 직관적으로 어떠한 내용인지만 살펴보자. [참고 : 금융시계열분석 - 김명직, 장국현]
우선 혼합분포 모형이라는 것은 무엇인가? 지난번 포스트(2021.06.22 - [시계열 모델링] - 확률 미분방정식(SDE)을 이용한 주가 시뮬레이션 )에서 주가의 기하브라운 운동을 언급하면서 임의 보행에 대해 잠시 다뤄본 적이 있다. 요약하자면 주가의 움직임은 임의의 확률적 추세항과 랜덤워크(변동)로 모델링할 수 있다는 뜻인데 이때 랜덤워크는 상당한 논란의 소지가 있다. 나는 임의 보행이나 어떠한 인과관계 둘 중에서 중립적인 입장이지만 싫어하는 사람은 굉장히 싫어하므로 단정적인 표현은 삼가토록 하겠다. 여하튼 만약 위 가정이 맞다고 하더라도 일정한 윈도로 샘플링을 수행했을 때 상승추세에서는 우측으로 치우치거나 평균이 x축(우) 이동한 분포에서 결과가 도출될 확률이 높고 그 반대의 경우에서는 왼쪽으로 치우치거나 평균이 x축(좌) 이동한 분포에서 샘플이 도출될 확률이 높을 것이다. 그렇다면 가장 빈도가 높은 횡보구간에서는 당연히 평균이 0에 가까운 혹은 무위험 이자율에 가까운 정규분포에서 추출될 확률이 높을 것인데 이것을 아래와 같이 그림으로 파악하면 직관적으로 이해하기 수월할 듯하다.
이렇게 국면(상태 : 상승, 하락, 횡보)에 따라 추출되는 모집단의 분포는 다른 형태라고 간주할 수 있기 때문에 상태에 관한 조건부 확률(베이즈 정리)로 표현할 수 있고 이것을 모델링에 활용하기 위해서는 조건부 확률에 대한 MLE(최대 우도 추정)를 통해 파라미터들을 추정할 수 있을 것이다. 여기서 혼합 분포와 조건부 확률은 설명이 되는데 마르코프는 어디서 또 나온단 말인가? 그렇다. 바로 상승-> 횡보-> 하락 혹은 하락-> 상승-> 횡보 등 여러 가지 상태들의 조합이 도출되는 과정은 바로 직전기의 상태에 의해서만 영향을 받는다고 가정하는 것을 마르코프 과정이라고 한다. 다만 이때 어떠한 결정적인 상태 전이 확률을 가정할 수도 있고 시변 전이 확률(시간에 따라 상태의 전이 확률이 변하는)로 모델링할 수도 있다.
이론적 고찰에 디테일을 원하는 사람은 참고문헌을 살펴보고 오늘도 나는 실전분석으로 바로 돌입한다. 우선 참고문헌에는 gauss를 이용한 프로그램으로 국면전환 모형을 추정하였는데 가우스 프로그램을 이해하는 것도 어렵지만 더 큰 문제는 나는 가우스가 없다.... 그래서 아쉬운 데로 R을 이용하여 모델링해보았는 데 사용한 패키지는 tsDyn(Nonlinear Time Series Models with Regime )을 이용하였다.. R-studio을 이용하면 해당 패키지 함수의 상세한 설명을 볼 수 있기 때문에 더 궁금한 사람은 참고 바란다.
요즈음 코스피가 다시 하락하기 때문에 이것이 추세의 전환인지 아니면 변동성에 의한 조정인지 헷갈려하는데 그게 궁금한 사람은 아래의 multi.csv 가 아니라 최신의 코스피 로그 차분 데이터를 업데이트하여 이용하면 된다. 왜? 매번 최신자료로 업데이트하면 그냥 결과만 쓱 보고 지나칠 사람이 많기에 코드는 올려두었지만 데이터는 그냥 과거 자료를 이용했다. 궁금한 사람은 직접 해보돌록.
우선
#작업경로를 지정하는 명령어
setwd("")
#데이터 끌어오기(중회귀자료, 다수의 독립변수와 하나의 종속변수)
mydatat<-read.csv("multi.csv",
header=TRUE, na.strings = "")
mydatat
str(mydatat)
library(tsDyn)
#setar 모델에서 m은 잠재차원을 의미하는데 auto reg 의 최대차수를 의미
#2차 이상의 lag는 어지간한 금융시계열에서는 없다고 보자. 특히 차분한 데이터.
#3차,4차 늘려가면 모델의 유의수준은 높아지지만 의미없다.
#추정해야할 모수가 늘어날 수록 결국은 오차도 함께 늘어난다는 점 명심.
set<-setar(mydatat$코스피지수, m=2)
#setar 추정에 대한 것으로 enter키로 넘기다 보면 국면에 관한 그래프도 출력.
plot(set)
regime(set)
regime(set, time=FALSE, initVal=FALSE)
#가장 궁금한 현 시점이 어떠한 국면인지 그래프화 해서 볼수 있음.
plot(regime(set))
모델을 돌려보면 위 자료를 분석한 결과 코스피 지수는 Proportion of points in low regime: 15.73% High regime: 84.27% 약 15%의 하락 구간과 약 85%의 상승(혹은 정상) 구간으로 추정되었다. 그도 그럴 것이 팬더믹 공포기간 외 거의 상승한 데이터를 이용했으니 이럴 수밖에 없을 듯하다.
그래프에서 빨간색이 정상구간, 초록색이 하락국면으로 추정되었는데 원래 국면전환 모형은 각 구간별로 파라미터가 달라진다는 점에서 의미가 있는 것이라 단순히 지금이 어떠한 국면인가를 파악하는 용도로는 썩 적합하지 않을 듯 하지만 그래도 대부분 궁금한 것은 추세전환인가? 단순 조정인가가 가장 궁금할 것이기에 아래와 같이 국면에 대해 따로 그래프를 그려보았다.
팬더믹 구간 이후 쭉 상승세를 유지하다가 데이터의 가장 마지막 구간에서 하락 추세로 전환이 되었다고 판단하고 있다. 재차 강조하지만 이 데이터는 최신이 아니기 때문에 최근 시장 상황에 대해 궁금하다면 데이터를 새롭게 변형하여 판단할 필요가 있다는 점 명심하자.
'시계열모델링' 카테고리의 다른 글
[데이터로 보는 미래] 경제 순환을 반영한 삼성전자 주가 예측, Prophet 모델 활용! (0) | 2024.04.11 |
---|---|
VAR(Vector Auto Regressive Model) 모델을 이용한 주가 예측 (0) | 2022.07.18 |
Multivariate GARCH(다변량 이분산 모형) (0) | 2021.08.19 |
다이나믹 모델링 : 칼만필터(Kalman Filter)를 이용한 주가예측 (2) | 2021.06.28 |
확률 미분방정식(SDE)을 이용한 주가 시뮬레이션 (0) | 2021.06.22 |
댓글