VaR(가치-at-리스크)

R에서의 GARCH 모델

Kris Boudt

Professor of finance and econometrics

VaR(가치-at-리스크)

  • 하방위험의 대표 지표: 5% VaR. 수익률 분포의 5% 분위수는 최악 5% 상황에서의 최선의 수익을 뜻합니다.
    연도별 일간 수익률 분포
R에서의 GARCH 모델

연도별 일간 수익률 분포

R에서의 GARCH 모델

미래지향적 접근이 필요합니다

  • 롤링 윈도우 분위수는 과거 지향적입니다:
    • 사후(ex post): 지난 1년 일간 수익률의 5% 분위수는 얼마였는가
    • 사전(ex ante): 미래 수익의 예측 분포에서 5% 분위수는 얼마인가
  • 선행적 리스크 관리는 GARCH 추정의 예측 분위수를 사용합니다.
  • 방법: ugarchroll 객체에 quantile() 적용.
R에서의 GARCH 모델

ugarchroll에서 예측 5% 분위수 얻기

ugarchspec(): 사용할 GARCH 모형 지정

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "gjrGARCH"),
                        distribution.model = "sstd")

ugarchroll(): 롤링 표본으로 GARCH 모형 추정

garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500, 
                        refit.window = "moving", refit.every = 100)

quantile(): 예측 분위수 계산

garchVaR <- quantile(garchroll, probs = 0.05)

다른 손실확률도 선택 가능: 1%, 2.5% 등이 많이 쓰입니다

R에서의 GARCH 모델

손실확률 5%의 VaR 플롯

actual <- xts(as.data.frame(garchroll)$Realized, time(garchVaR))
VaRplot(alpha = 0.05, actual = actual, VaR = garchVaR)

연도별 일간 수익률 분포

R에서의 GARCH 모델

초과와 VaR 커버리지

실제 수익률이 예측된 VaR보다 작을 때를 VaR 초과(exceedance)라고 합니다: $ R_t \ < {VaR}_t$.

VaR 초과의 빈도를 VaR 커버리지(coverage)라고 합니다.

# S&P 500 수익률과 5% 수준에서의 커버리지 계산
mean(actual < garchVaR)
0.05159143
R에서의 GARCH 모델

VaR 커버리지와 모형 검증

  • 손실확률 $\alpha$(예: 5%)에서의 VaR 커버리지 해석:
    • 타당한 예측모형은 커버리지가 사용한 확률수준 $\alpha$에 가깝습니다.
    • 커버리지 $\gg$ $\alpha$: 초과가 너무 많음 → 예측 분위수가 너무 덜 음수. 손실위험을 과소평가.
    • 커버리지 $\ll$ $\alpha$: 초과가 너무 적음 → 예측 분위수가 과도하게 음수. 손실위험을 과대평가.
R에서의 GARCH 모델

성능을 악화시키는 요인

distribution.model = "std"distribution.model = "sstd" 대신 사용:

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "gjrGARCH"),
                        distribution.model = "std")

롤링 추정과 5% VaR 예측:

garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500, 
                        refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.05783233
R에서의 GARCH 모델

추가 악화

variance.model = list(model = "sGARCH")

대신

variance.model = list(model = "gjrGARCH"):

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "std")

롤링 추정과 5% VaR 예측:

garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500, 
                        refit.window = "moving", refit.every = 100)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.06074475
R에서의 GARCH 모델

더 큰 악화

refit.every = 1000

대신

refit.every = 100:

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "sGARCH"),
                        distribution.model = "std")
garchroll <- ugarchroll(garchspec, data = sp500ret, n.start = 2500, 
                        refit.window = "moving", refit.every = 1000)
garchVaR <- quantile(garchroll, probs = 0.05)
mean(actual < garchVaR) # returns 0.06199293
R에서의 GARCH 모델

하방위험은 예측 분위수를 고려합니다.

R에서의 GARCH 모델

Preparing Video For Download...