Estimation de la densité par noyau

Gestion quantitative des risques en Python

Jamsheed Shorish

Computational Economist

L'histogramme, revisité

  • Distributions des facteurs de risque
    • Supposées (p. ex. Normale, T, etc.)
    • Ajustées (estimation paramétrique, simulation de Monte-Carlo)
    • Ignorées (simulation historique)
  • Données réelles : histogramme
  • Comment représenter un histogramme par une loi de probabilité ?
    • Lisser les données au moyen d'un filtrage
    • Estimation non paramétrique

histogramme des pertes

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme

axes de l'histogramme

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps

image d'observations qui s'accumulent

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps

image d'observations qui s'accumulent

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps

image d'observations qui s'accumulent

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps
  • Choisir une perte de portefeuille donnée

pertes et perte particulière indiquée par une flèche

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps
  • Choisir une perte de portefeuille donnée
    • Examiner les pertes voisines

fenêtre de noyau superposée aux observations

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps
  • Choisir une perte de portefeuille donnée
    • Examiner les pertes voisines
    • Calculer une « moyenne pondérée » des pertes
  • Noyau : choix du filtre ; détermine la « fenêtre »

moyenne pondérée issue du noyau affichée sur l'image

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps
  • Choisir une perte de portefeuille donnée
    • Examiner les pertes voisines
    • Calculer une « moyenne pondérée » des pertes
  • Noyau : choix du filtre ; détermine la « fenêtre »
    • Déplacer la fenêtre vers une autre perte

image d'un deuxième emplacement du noyau

Gestion quantitative des risques en Python

Lissage des données

  • Filtre : atténuer les « bosses » de l'histogramme
  • Les observations s'accumulent au fil du temps
  • Choisir une perte de portefeuille donnée
    • Examiner les pertes voisines
    • Calculer une « moyenne pondérée » des pertes
  • Noyau : choix du filtre ; détermine la « fenêtre »
    • Déplacer la fenêtre vers une autre perte
  • Estimation de densité par noyau : densité de probabilité

image de l'estimation de densité par noyau

Gestion quantitative des risques en Python

Le noyau gaussien

  • Noyau continu
  • Pondère toutes les observations selon la distance au centre
  • En général : de nombreux noyaux sont disponibles
    • Utilisé en analyse de séries chronologiques
    • Utilisé en traitement du signal

image d'un noyau gaussien

Gestion quantitative des risques en Python

KDE en Python

from scipy.stats import gaussian_kde

kde = guassian_kde(losses)
loss_range = np.linspace(np.min(losses), np.max(losses), 1000)
plt.plot(loss_range, kde.pdf(loss_range))
  • Visualisation : fonction de densité de probabilité issue de l'ajustement KDE

tracé de l'estimation KDE gaussienne

Gestion quantitative des risques en Python

Calculer la VaR avec KDE

  • VaR : utiliser la méthode .resample() de gaussian_kde
  • Trouver le quantile de l'échantillon obtenu
  • CVaR : valeur attendue comme vu précédemment, mais
    • gaussian_kde n'a pas de méthode .expect() ⇒ intégrer manuellement
    • méthode .expect() spéciale fournie pour l'exercice
sample = kde.resample(size = 1000)

VaR_99 = np.quantile(sample, 0.99)
print("VaR_99 from KDE: ", VaR_99)
VaR_99 from KDE: 0.08796423698448601
Gestion quantitative des risques en Python

Passons à la pratique !

Gestion quantitative des risques en Python

Preparing Video For Download...