Comparer le CVaR et le VaR
Le Conditional Value at Risk (CVaR), ou perte moyenne au-delà d’un seuil (Expected Shortfall, ES), répond à la question suivante : quelle sera la perte moyenne, conditionnellement au fait que les pertes dépassent un certain seuil à un niveau de confiance donné ? Il utilise le VaR comme point de départ, mais apporte plus d’informations car il tient compte de la queue de la distribution des pertes.
Vous allez d’abord calculer le VaR à 95 % pour une distribution normale des pertes de portefeuille, avec la même moyenne et le même écart type que les portfolio_losses des banques d’investissement entre 2005 et 2010. Vous utiliserez ensuite ce VaR pour calculer le CVaR à 95 % et tracerez les deux valeurs sur la distribution normale.
Les portfolio_losses sont disponibles dans votre espace de travail, ainsi que la distribution normale norm de scipy.stats.
Cet exercice fait partie du cours
Gestion quantitative des risques en Python
Instructions
- Calculez la moyenne et l’écart type de
portfolio_losseset affectez-les respectivement àpmetps. - Trouvez le VaR à 95 % en utilisant la méthode
.ppf()denorm: elle prend les argumentslocpour la moyenne etscalepour l’écart type. - Utilisez le VaR à 95 % et la méthode
.expect()denormpour trouver letail_loss, puis servez-vous-en pour calculer le CVaR au même niveau de confiance. - Ajoutez des lignes verticales montrant le VaR (en rouge) et le CVaR (en vert) sur un histogramme de la distribution normale.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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()