Сравнение CVaR и VaR
Условная стоимость под риском (CVaR), или ожидаемые потери (ES), отвечает на вопрос: каков будет средний убыток при условии, что потери превышают некоторый порог на заданном уровне доверия? CVaR отталкивается от VaR, но содержит больше информации, поскольку учитывает хвост распределения потерь.
Сначала вы вычислите 95% VaR для нормального распределения потерь портфеля с теми же средним значением и стандартным отклонением, что и у portfolio_losses инвестиционных банков за 2005–2010 годы. Затем используете VaR для вычисления 95% CVaR и отобразите оба показателя на фоне нормального распределения.
В вашем рабочем пространстве доступны portfolio_losses, а также нормальное распределение norm из scipy.stats.
Это упражнение является частью курса
Количественное управление рисками на Python
Инструкции к упражнению
- Вычислите среднее значение и стандартное отклонение
portfolio_lossesи присвойте их переменнымpmиpsсоответственно. - Найдите 95% VaR с помощью метода
.ppf()объектаnorm— он принимает аргументыlocдля среднего значения иscaleдля стандартного отклонения. - Используйте 95% VaR и метод
.expect()объектаnorm, чтобы найти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()