꼬리 위험 추정

Python으로 시작하는 포트폴리오 리스크 관리

Dakota Wixom

Quantitative Analyst | QuantCourse.com

꼬리 위험 추정

꼬리 위험은 극단적인 투자 결과, 특히 분포의 부정적인 쪽에서 발생하는 위험입니다.

  • 역사적 최대 손실
  • 위험가치(VaR)
  • 조건부 위험가치(CVaR)
  • 몬테카를로 시뮬레이션
Python으로 시작하는 포트폴리오 리스크 관리

역사적 낙폭

낙폭(Drawdown)은 과거 최고 누적 수익률 대비 손실 비율입니다.

$$ \text{Drawdown} = \frac{r_t}{RM} - 1$$

  • $r_t$: 시점 t의 누적 수익률
  • $RM$: 누적 최댓값
USO 오일 ETF의 역사적 낙폭

Python으로 시작하는 포트폴리오 리스크 관리

Python에서의 역사적 낙폭

cum_rets가 시간에 따른 누적 수익률의 np.array라고 가정합니다.

running_max = np.maximum.accumulate(cum_rets)
running_max[running_max < 1] = 1
drawdown = (cum_rets) / running_max - 1
drawdown
Date        Return
2007-01-03    -0.042636
2007-01-04    -0.081589
2007-01-05    -0.073062
Python으로 시작하는 포트폴리오 리스크 관리

역사적 위험가치(VaR)

위험가치(VaR)는 주어진 신뢰 수준에서 손실이 특정 수준을 초과하지 않는다는 임계값입니다.

VaR은 95, 99, 99.9 등의 분위수로 표현됩니다.

예시: VaR(95) = -2.3%

역사적 데이터 기준으로 하루 손실이 -2.3%를 초과하지 않을 확률이 95%입니다.

Python으로 시작하는 포트폴리오 리스크 관리

Python에서의 역사적 VaR

var_level = 95
var_95 = np.percentile(StockReturns, 100 - var_level)
var_95
-0.023
Python으로 시작하는 포트폴리오 리스크 관리

역사적 기대 손실

조건부 위험가치(CVaR)는 최악의 1 - x% 시나리오에서 예상되는 평균 손실의 추정치입니다.

CVaR은 95, 99, 99.9 등의 분위수로 표현됩니다.

 

예시: CVaR(95) = -2.5%

 

최악의 5% 시나리오에서 손실은 평균적으로 역사적으로 -2.5%를 초과했습니다.

Python으로 시작하는 포트폴리오 리스크 관리

Python에서의 역사적 기대 손실

StockReturns가 주식 수익률의 시계열 객체라고 가정합니다.

역사적 CVaR(95) 계산:

var_level = 95
var_95 = np.percentile(StockReturns, 100 - var_level)
cvar_95 = StockReturns[StockReturns <= var_95].mean()
cvar_95
-0.025
Python으로 시작하는 포트폴리오 리스크 관리

연습해 봅시다!

Python으로 시작하는 포트폴리오 리스크 관리

Preparing Video For Download...