Python으로 시작하는 포트폴리오 리스크 관리
Dakota Wixom
Quantitative Analyst | QuantCourse.com
꼬리 위험은 극단적인 투자 결과, 특히 분포의 부정적인 쪽에서 발생하는 위험입니다.
낙폭(Drawdown)은 과거 최고 누적 수익률 대비 손실 비율입니다.
$$ \text{Drawdown} = \frac{r_t}{RM} - 1$$

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
위험가치(VaR)는 주어진 신뢰 수준에서 손실이 특정 수준을 초과하지 않는다는 임계값입니다.
VaR은 95, 99, 99.9 등의 분위수로 표현됩니다.
예시: VaR(95) = -2.3%

역사적 데이터 기준으로 하루 손실이 -2.3%를 초과하지 않을 확률이 95%입니다.
var_level = 95
var_95 = np.percentile(StockReturns, 100 - var_level)
var_95
-0.023
조건부 위험가치(CVaR)는 최악의 1 - x% 시나리오에서 예상되는 평균 손실의 추정치입니다.
CVaR은 95, 99, 99.9 등의 분위수로 표현됩니다.
예시: CVaR(95) = -2.5%

최악의 5% 시나리오에서 손실은 평균적으로 역사적으로 -2.5%를 초과했습니다.
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으로 시작하는 포트폴리오 리스크 관리