GARCH 예측이 관측 수익률에 잘 맞나요?

R에서의 GARCH 모델

Kris Boudt

Professor of finance and econometrics

평가 기준

  • 무엇을 평가할지에 따라 다릅니다
    • 예측 평균
    • 예측 분산
    • 수익률의 예측 분포
R에서의 GARCH 모델

1) 평균 예측의 적합도

추정된 GARCH 모델 기준:

구현

e <- residuals(tgarchfit) 
mean(e ^ 2)
R에서의 GARCH 모델

2) 분산 예측의 적합도

GARCH 모델은 다음을 제공합니다:

구현

e <- residuals(tgarchfit)
d <- e ^ 2 - sigma(tgarchfit) ^ 2 
mean(d ^ 2)
R에서의 GARCH 모델

EUR/USD 수익률 예시

tgarchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
   variance.model = list(model = "sGARCH", variance.targeting = TRUE),
   distribution.model = "std")
tgarchfit <- ugarchfit(data = EURUSDret, spec = tgarchspec)
# 평균의 평균제곱예측오차
e <- residuals(tgarchfit) ^ 2
mean(e ^ 2) # 3.836205e-05
# 분산의 평균제곱예측오차
d <- e ^ 2 - sigma(tgarchfit) ^ 2
mean(d ^ 2) # 5.662366e-09
R에서의 GARCH 모델

3) 분포 적합도

  • GARCH 모델은 표본의 모든 수익률에 대한 예측 밀도를 제공합니다
    • 밀도가 높을수록, 추정된 GARCH 모델에서 해당 수익률의 개연성이 큽니다
    • 표본의 우도는 이 밀도의 곱에 기반합니다. 관측 수익률이 추정된 GARCH 모델에서 생성됐을 개연성을 측정합니다
    • 우도가 높을수록, 데이터에 더 잘 맞습니다
R에서의 GARCH 모델

EUR/USD 수익률 예시

likelihood(tgarchfit) # returns 18528.58

다른 모델과 비교해 분석:

# 매개변수가 많은 복잡한 모델
flexgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                            variance.model = list(model = "gjrGARCH"),
                            distribution.model = "sstd")
flexgarchfit <- ugarchfit(data = EURUSDret, spec = flexgarchspec)
likelihood(flexgarchfit) # returns 18530.49
R에서의 GARCH 모델

과적합 위험

주의: 추정 표본과 평가 표본이 동일한 사내(in-sample) 평가를 사용합니다.

과적합 위험:

과적합은 지나치게 복잡한 모델을 선택해 추정 표본에서는 잘 맞지만, 표본 밖 미래 수익률에는 맞지 않는 경우를 말합니다.

R에서의 GARCH 모델

해결: 적합도와 모델 복잡도 패널티의 균형

  • GARCH 모델이 검소(parsimonious)하려면:
    • 우도(likelihood)가 높고
    • 매개변수 수가 상대적으로 적어야 합니다
R에서의 GARCH 모델

정보 기준

  • 검소성은 정보 기준으로 측정합니다.

정보 기준 = - 우도 + 패널티(매개변수 수)

  • 값이 낮을수록 좋습니다.

선택 요령:
정보 기준이 가장 낮은 모델을 선택합니다.

R에서의 GARCH 모델

정보 기준 결과

infocriteria() 메서드는 다양한 패널티의 정보 기준을 출력합니다

infocriteria(tgarchfit)

out Akaike -7.468081 Bayes -7.462833 Shibata -7.468083 Hannan-Quinn -7.466241 `

해석은 다른 모델의 정보 기준과 비교해 이루어집니다.

R에서의 GARCH 모델

EUR/USD 수익률로 살펴보기

tgarchspec <- ugarchspec(mean.model = list(armaOrder = c(0, 0)),
   variance.model = list(model = "sGARCH", variance.targeting = TRUE),
   distribution.model = "std")
tgarchfit <- ugarchfit(data = EURUSDret, spec = tgarchspec)
length(coef(tgarchfit)) # only 5 parameters
likelihood(tgarchfit)   # equals 18528.58
flexgarchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
   variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
flexgarchfit <- ugarchfit(data = EURUSDret, spec = flexgarchspec)
length(coef(flexgarchfit)) # we now have 8 parameters
likelihood(flexgarchfit) #  18530.49: likelihood increased
R에서의 GARCH 모델

EUR/USD에 가장 검소한 모델은?

우도는 높을수록 좋고, 정보 기준은 낮을수록 좋습니다.

infocriteria(tgarchfit) # 단순 모델
Akaike       -7.468435
Bayes        -7.464499
infocriteria(flexgarchfit) # 복잡 모델
Akaike       -7.467239
Bayes        -7.456742

단순 모델의 정보 기준이 더 낮아 여기서는 단순 모델이 적합합니다.

R에서의 GARCH 모델

사례별 상이: MSFT 수익률의 경우

tgarchfit <- ugarchfit(data = msftret, spec = tgarchspec)
flexgarchfit <- ugarchfit(data = msftret, spec = flexgarchspec)
infocriteria(tgarchfit)
Akaike       -5.481895
Bayes        -5.477833
infocriteria(flexgarchfit) 
Akaike       -5.489087
Bayes        -5.478255

복잡 모델의 정보 기준이 더 낮아 여기서는 복잡 모델이 적합합니다.

R에서의 GARCH 모델

KISS: Sophisticatedly Simple 유지

R에서의 GARCH 모델

Preparing Video For Download...