CVaR와 VaR 비교
조건부 위험값(CVaR) 또는 기대손실(ES)은 특정 신뢰수준에서 어떤 임계값을 초과하는 손실이 발생했을 때, 그 조건하에서의 평균 손실이 얼마인지 묻는 개념이에요. VaR을 출발점으로 하지만, 손실분포의 꼬리(tail)를 고려하므로 더 많은 정보를 담고 있어요.
먼저 2005–2010년 투자은행의 portfolio_losses와 동일한 평균과 표준편차를 갖는 정규분포에서 95% VaR을 계산해 보세요. 그런 다음 해당 VaR을 사용해 95% CVaR을 계산하고, 둘 다 정규분포와 함께 시각화해 볼 거예요.
작업 공간에는 portfolio_losses와 scipy.stats의 정규분포 객체 norm이 준비되어 있어요.
이 연습은 강의의 일부입니다
Python을 활용한 정량적 리스크 관리
연습 안내
portfolio_losses의 평균과 표준편차를 계산해 각각pm,ps에 할당하세요.norm의.ppf() method를 사용해 95% VaR을 구하세요. 이 메서드는 평균을 위한loc, 표준편차를 위한scale인수를 받아요.- 95% VaR과
norm의.expect()메서드를 사용해tail_loss를 구하고, 이를 이용해 같은 신뢰수준에서 CVaR을 계산하세요. - 정규분포의 히스토그램 플롯에 VaR(빨간색)과 CVaR(초록색)을 나타내는 세로선을 추가하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Compute the mean and standard deviation of the portfolio returns
pm = portfolio_losses.____
ps = portfolio_losses.____
# Compute the 95% VaR using the .ppf()
VaR_95 = norm.ppf(0.95, loc = ____, scale = ____)
# Compute the expected tail loss and the CVaR in the worst 5% of cases
tail_loss = norm.____(lambda x: x, loc = ____, scale = ____, lb = VaR_95)
CVaR_95 = (1 / (1 - 0.95)) * ____
# Plot the normal distribution histogram and add lines for the VaR and CVaR
plt.hist(norm.rvs(size = 100000, loc = pm, scale = ____), bins = 100)
plt.axvline(x = VaR_95, c='r', label = "VaR, 95% confidence level")
plt.axvline(x = ____, c='g', label = "CVaR, worst 5% of outcomes")
plt.legend(); plt.show()