검증된 GARCH 모델의 운영 적용

R에서의 GARCH 모델

Kris Boudt

Professor of finance and econometrics

운영 환경에서의 활용

연도별 일일 수익률 분포

R에서의 GARCH 모델

새 기능

  • ugarchfilter()로 최근 평균·변동성 동학을 분석
  • 예측은 ugarchfit() 대신 ugarchspec 객체에 ugarchforecast()를 적용
R에서의 GARCH 모델

MSFT 수익률 예시

  • msftret: 1999–2017 일일 수익률
  • 2010년 말까지의 수익률로 모델을 적합했다고 가정합니다.
  • 2017년 말에 이 모델로 과거 변동성 동학을 분석하고 미래 변동성을 예측합니다.
R에서의 GARCH 모델

1단계: 최종 모델 명세 정의

2010년 말 이용 가능한 msftret으로 최적 모델을 적합합니다:

# 왜도 t 분포의 AR(1)-GJR GARCH 모델 지정
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1,0)),
 variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
# 모델 추정
garchfit <- ugarchfit(data = msftret["/2010-12"], spec = garchspec)

운영에 사용할 명세를 progarchspec으로 정의하고, setfixed(progarchspec) <- as.list(coef(garchfit))를 적용합니다:

progarchspec <- garchspec
setfixed(progarchspec) <- as.list(coef(garchfit))
R에서의 GARCH 모델

2단계: 평균·변동성 동학 분석

ugarchfilter()를 사용합니다:

garchfilter <- ugarchfilter(data = msftret, spec = progarchspec)
plot(sigma(garchfilter))                                

연도별 일일 수익률 분포

R에서의 GARCH 모델

3단계: 미래 수익률 예측

garchforecast <- ugarchforecast(data = msftret,
                                fitORspec = progarchspec, 
                                n.ahead = 10) # 다음 10일 예측
cbind(fitted(garchforecast), sigma(garchforecast))
       2017-12-29 2017-12-29
T+1  0.0004781733 0.01124870
T+2  0.0003610470 0.01132550
T+3  0.0003663683 0.01140171
T+4  0.0003661265 0.01147733
T+5  0.0003661375 0.01155238
T+6  0.0003661370 0.01162688
T+7  0.0003661371 0.01170083
T+8  0.0003661371 0.01177424
T+9  0.0003661371 0.01184712
T+10 0.0003661371 0.01191948
R에서의 GARCH 모델

시뮬레이션에 활용

관측 수익률 분석 대신, 완성된 모델로 인공 로그수익률을 시뮬레이션할 수 있습니다:

$$ r_{t} = \log(P_{t}) - \log(P_{t-1}) $$

미래 수익률의 무작위성과 가격 영향 평가에 유용합니다. 미래 가격은 다음과 같습니다:

$$ P_{t + h} = P_{t} \exp(r_{t + 1} + r_{t + 2} + \ldots + r_{t + h}) $$

R에서의 GARCH 모델

1단계: 시뮬레이션 모델 보정

추정에 로그수익률을 사용합니다

# 로그수익률 계산
msftlogret <- diff(log(MSFTprice))[-1]

모델을 추정하고 추정된 모수로 시뮬레이션 모델을 설정합니다

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "gjrGARCH"),
                        distribution.model = "sstd")
# 모델 추정
garchfit <- ugarchfit(data = msftlogret, spec = garchspec)

# 추정된 모델을 시뮬레이션에 사용
simgarchspec <- garchspec
setfixed(simgarchspec) <- as.list(coef(garchfit))
R에서의 GARCH 모델

2단계: `ugarchpath()`로 시뮬레이션 실행

ugarchpath() 시뮬레이션에는 다음이 필요합니다:

  • spec : 완전 지정된 GARCH 모델
  • m.sim : 시뮬레이션할 수익률 시계열 개수
  • n.sim: 각 시계열의 관측치 수(예: 252)
  • rseed : 시드 고정 값(재현성 목적)
simgarch <- ugarchpath(spec = simgarchspec, m.sim = 4,
                       n.sim = 10 * 252, rseed = 12345)
R에서의 GARCH 모델

3단계: 시뮬레이션 수익률 분석

fitted()는 시뮬레이션된 수익률을 제공합니다:

simret <- fitted(simgarch)
plot.zoo(simret) 

시뮬레이션된 수익률

R에서의 GARCH 모델

시뮬레이션 변동성 분석

plot.zoo(sigma(simgarch))

시뮬레이션된 변동성

R에서의 GARCH 모델

시뮬레이션 가격 분석

초기 가격을 1로 설정하고, 10년 주가 시뮬레이션 4개를 그립니다:

simprices <- exp(apply(simret, 2, "cumsum"))
matplot(simprices, type = "l", lwd = 3)

시뮬레이션된 가격

R에서의 GARCH 모델

setfixed(), ugarchfilter(), ugarchforecast(), ugarchpath() 실습 시간

R에서의 GARCH 모델

Preparing Video For Download...