Porównanie CVaR i VaR
Warunkowa wartość zagrożona (CVaR), zwana też oczekiwanym niedoborem (ES, ang. expected shortfall), odpowiada na pytanie: jaka będzie średnia strata, pod warunkiem że straty przekroczą określony próg przy danym poziomie ufności? CVaR wykorzystuje VaR jako punkt wyjścia, ale niesie więcej informacji – bierze bowiem pod uwagę ogon rozkładu strat.
Najpierw obliczysz 95% VaR dla rozkładu normalnego strat portfelowych, o tej samej średniej i odchyleniu standardowym co straty portfolio_losses banków inwestycyjnych z lat 2005–2010. Następnie użyjesz VaR do obliczenia 95% CVaR i naniesiasz oba wskaźniki na wykres rozkładu normalnego.
Zmienna portfolio_losses jest dostępna w twoim środowisku, podobnie jak rozkład normalny norm z biblioteki scipy.stats.
To ćwiczenie jest częścią kursu
Ilościowe zarządzanie ryzykiem w Pythonie
Instrukcje do ćwiczenia
- Oblicz średnią i odchylenie standardowe
portfolio_lossesi przypisz je odpowiednio do zmiennychpmips. - Wyznacz 95% VaR, korzystając z metody
.ppf()obiektunorm– przyjmuje ona argumentylocdla średniej iscaledla odchylenia standardowego. - Użyj 95% VaR i metody
.expect()obiektunorm, aby wyznaczyćtail_loss, a następnie oblicz CVaR przy tym samym poziomie ufności. - Dodaj pionowe linie oznaczające VaR (na czerwono) i CVaR (na zielono) do histogramu przedstawiającego rozkład normalny.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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()