Ruptures structurelles

Gestion quantitative des risques en Python

Jamsheed Shorish

Computational Economist

Risque et distribution

  • Trousse de gestion du risque
    • Atténuation du risque : MPT
    • Mesure du risque : VaR, CVaR
  • Risque : dispersion, volatilité
    • Variance (écart type) comme définition du risque
  • Lien entre le risque et la distribution des facteurs de risque comme variables aléatoires
Gestion quantitative des risques en Python

Stationnarité

  • Hypothèse : la distribution est la même dans le temps
  • Distribution inchangée = stationnaire
  • Frontière efficiente durant la crise financière mondiale
    • Non stationnaire
  • Les techniques d'estimation exigent la stationnarité
    • Historique : distribution stationnaire inconnue à partir des données passées
    • Paramétrique : classe de distributions supposée stationnaire
    • Monte Carlo : distribution supposée stationnaire pour les tirages aléatoires
Gestion quantitative des risques en Python

Ruptures structurelles

  • Non stationnaire ⇒ la distribution change peut-être dans le temps
  • Poser des points précis de changement dans le temps
    • Scinder les données en sous-périodes
    • Au sein de chaque sous-période, supposer la stationnarité
  • Rupture structurelle(s) : point(s) de changement
    • Changement de la « tendance » de la moyenne et/ou de la volatilité des données
Gestion quantitative des risques en Python

Exemple : croissance de la population chinoise

  • Examiner la période 1950 - 2019
  • Tendance approximativement linéaire...

Graphique de la population de la Chine dans le temps, 1950-2019

Gestion quantitative des risques en Python

Exemple : croissance de la population chinoise

  • Examiner la période 1950 - 2019
  • Tendance approximativement linéaire...
  • ...mais elle semble ralentir vers 1990
  • Rupture structurelle possible près de 1990.
  • Suppose que la distribution du solde naturel (naissances − décès) a changé
  • Raisons possibles : politiques publiques, niveau de vie, etc.

Graphique de la population de la Chine dans le temps avec flèches de tendance, 1950-2019

Gestion quantitative des risques en Python

Le test de Chow

  • Exemple précédent : indice visuel d'une rupture structurelle
  • Quantification : mesure statistique
  • Test de Chow :
    • Tester l'existence d'une rupture structurelle dans un modèle linéaire
    • Hypothèse nulle : aucune rupture
    • Nécessite trois régressions MCO
      • Régression sur la période entière
      • Deux régressions, avant et après la rupture
    • Recueillir la somme des résidus au carré
    • La statistique de test suit une distribution « F »
Gestion quantitative des risques en Python

Le test de Chow en Python

  • Hypothèse : rupture structurelle en 1990 pour la population chinoise
  • Supposer un « modèle factoriel » linéaire : $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • Régression MCO avec l'objet OLS de statsmodels sur toute la période 1950 - 2019
    • Récupérer la somme des résidus au carré res.ssr
import statsmodels.api as sm
res = sm.OLS(log_pop, year).fit()

print('SSR 1950-2019: ', res.ssr)
SSR 1950-2019: 0.29240576138055463
Gestion quantitative des risques en Python

Le test de Chow en Python

  • Scinder 1950 - 2019 en sous-périodes 1950 - 1989 et 1990 - 2019
  • Effectuer des régressions MCO sur chaque sous-période
    • Récupérer res_before.ssr et res_after.ssr
pop_before = log_pop.loc['1950':'1989']; year_before = year.loc['1950':'1989'];
pop_after  = log_pop.loc['1990':'2019']; year_after =  year.loc['1990':'2019'];

res_before = sm.OLS(pop_before, year_before).fit() res_after = sm.OLS(pop_after, year_after).fit()
print('SSR 1950-1989: ', res_before.ssr) print('SSR 1990-2019: ', res_after.ssr)
SSR 1950-1989: 0.011741113017411783
SSR 1990-2019: 0.0013717593339608077
Gestion quantitative des risques en Python

Le test de Chow en Python

  • Calculer la statistique de test de Chow (distribution F)
    • Calculer le numérateur
      • k = 2 degrés de liberté = 2 coefficients MCO $\alpha$, $\beta$
    • Calculer le dénominateur
      • 66 degrés de liberté = nombre total de points (70) − 2*k
numerator = (ssr_total - (ssr_before + ssr_after)) / 2

denominator = (ssr_before + ssr_after) / 66
chow_test = numerator / denominator print("Chow test statistic: ", chow_test, "; Critical value, 99.9%: ", 7.7)
Chow test statistic: 702.8715822890057; Critical value, 99.9%: 7.7
Gestion quantitative des risques en Python

Passons à la pratique !

Gestion quantitative des risques en Python

Preparing Video For Download...