Confrontare CVaR e VaR
Il conditional value at risk (CVaR), o expected shortfall (ES), chiede quale sarà la perdita media, condizionata al fatto che le perdite superino una certa soglia a un dato livello di confidenza. Parte dal VaR come punto di riferimento, ma contiene più informazioni perché tiene conto della coda della distribuzione delle perdite.
Per prima cosa calcolerai il VaR al 95% per una distribuzione Normale delle perdite di portafoglio, con la stessa media e deviazione standard delle portfolio_losses delle investment bank 2005-2010. Userai poi il VaR per calcolare il CVaR al 95% e traccerai entrambi rispetto alla distribuzione Normale.
Le portfolio_losses sono disponibili nel tuo workspace, così come la distribuzione Normale norm da scipy.stats.
Questo esercizio fa parte del corso
Gestione quantitativa del rischio in Python
Istruzioni dell'esercizio
- Calcola la media e la deviazione standard di
portfolio_lossese assegnale rispettivamente apmeps. - Trova il VaR al 95% usando il
.ppf()dinorm— accetta gli argomentilocper la media escaleper la deviazione standard. - Usa il VaR al 95% e il metodo
.expect()dinormper trovare iltail_loss, e usalo per calcolare il CVaR allo stesso livello di confidenza. - Aggiungi linee verticali che mostrino il VaR (in rosso) e il CVaR (in verde) a un istogramma della distribuzione Normale.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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()