Un modèle qui ne prévoit pas le prix, mais son agitation. En finance, les jours calmes se suivent, et les jours agités aussi : c'est le regroupement de la volatilité. GARCH modélise ce phénomène pour prévoir la volatilité des prochains jours, base du calcul de la VaR, du prix des options et des limites de risque.
La météo des marchés : après une journée d'orage, on s'attend à ce que le lendemain soit encore agité, puis que le calme revienne peu à peu. GARCH chiffre cette attente.
On travaille sur les variations quotidiennes en %, pas sur les prix. Leur moyenne est proche de zéro et difficile à prévoir ; leur amplitude, elle, a de la mémoire.
Variance du jour = omega + alpha × (choc d'hier)² + beta × (variance d'hier). Alpha mesure la réaction aux nouvelles, beta la mémoire de l'agitation.
Le modèle prévoit la volatilité des prochains jours. Elle revient progressivement vers son niveau de long terme, d'autant plus lentement que alpha + beta est proche de 1.
1 500 jours ouvrés d'un actif. Les rendements du jour ne se prévoient pas d'après ceux de la veille (autocorrélation de -0,01 sur le jeu d'exemple), mais leur amplitude si (0,21) : c'est la signature d'une volatilité en grappes.
Le modèle donne les coefficients alpha et beta, la volatilité prévue jour par jour sur 10 jours, et la VaR à 99 % du lendemain : la perte qui ne devrait être dépassée qu'un jour sur cent. Sur ce jeu, simulé avec une persistance de 0,98, l'estimation d'alpha + beta ressort proche de 1.
On compte, sur une période passée, les jours où la perte réelle a dépassé la VaR prévue la veille. Pour une VaR à 99 %, il en faut environ 1 %. Trop de dépassements : le risque est sous-estimé.
Noms donnés pour R (rugarch) et Python (arch).
GARCH(1,1) suffit dans la grande majorité des cas. Monter en ordre apporte rarement un gain réel.
La loi normale sous-estime les pertes extrêmes. Une loi de Student ("std" en R, "t" en Python) donne des queues plus épaisses et des VaR plus réalistes sur données réelles.
sGARCH ou GARCH pour le cas standard ; eGARCH ou gjrGARCH (en Python, vol="EGARCH" ou o=1 pour GJR) pour que les baisses augmentent plus la volatilité que les hausses, ce qu'on observe sur les actions.
Travailler en % (rendements multipliés par 100) aide l'optimisation à converger ; arch le recommande explicitement. Les paramètres se lisent alors en % au carré.
# Risque de marché : GARCH(1,1) en R
library(rugarch)
cours <- read.csv("cours_bourse.csv")
rendements <- 100 * diff(log(cours$cloture)) # rendements quotidiens en %
# Les rendements ne se prévoient pas, leur amplitude si : les périodes agitées se suivent
cat("Autocorrélation des rendements :", round(acf(rendements, plot = FALSE)$acf[2], 2),
"| de leur valeur absolue :", round(acf(abs(rendements), plot = FALSE)$acf[2], 2), "\n")
# GARCH(1,1) : la variance du jour dépend du choc d'hier (alpha1) et de la variance d'hier (beta1)
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0, 0), include.mean = TRUE),
distribution.model = "norm")
fit <- ugarchfit(spec, data = rendements)
print(round(coef(fit), 4))
cat("Persistance alpha + beta :", round(sum(coef(fit)[c("alpha1", "beta1")]), 3), "\n")
# Volatilité prévue sur 10 jours et VaR à 99 % du lendemain
vol <- as.numeric(sigma(ugarchforecast(fit, n.ahead = 10)))
cat("Volatilité quotidienne prévue (%) :", round(vol, 2), "\n")
var99 <- -(coef(fit)["mu"] + qnorm(0.01) * vol[1])
cat("VaR 99 % à 1 jour :", round(var99, 2), "% | volatilité annualisée :", round(vol[1] * sqrt(252), 1), "%\n")
# Risque de marché : GARCH(1,1) en Python
import numpy as np
import pandas as pd
from scipy.stats import norm
from arch import arch_model
cours = pd.read_csv("cours_bourse.csv", parse_dates=["date"], index_col="date")
rendements = 100 * np.log(cours["cloture"]).diff().dropna() # rendements quotidiens en %
# Les rendements ne se prévoient pas, leur amplitude si : les périodes agitées se suivent
print("Autocorrélation des rendements :", round(rendements.autocorr(1), 2),
"| de leur valeur absolue :", round(rendements.abs().autocorr(1), 2))
# GARCH(1,1) : la variance du jour dépend du choc d'hier (alpha) et de la variance d'hier (beta)
res = arch_model(rendements, mean="Constant", vol="GARCH", p=1, q=1, dist="normal").fit(disp="off")
print(res.params.round(4))
print("Persistance alpha + beta :", round(res.params["alpha[1]"] + res.params["beta[1]"], 3))
# Volatilité prévue sur 10 jours et VaR à 99 % du lendemain
vol = np.sqrt(res.forecast(horizon=10).variance.iloc[-1])
print("Volatilité quotidienne prévue (%) :", vol.round(2).tolist())
var99 = -(res.params["mu"] + norm.ppf(0.01) * vol.iloc[0])
print("VaR 99 % à 1 jour :", round(var99, 2), "% | volatilité annualisée :", round(vol.iloc[0] * np.sqrt(252), 1), "%")
Generalized AutoRegressive Conditional Heteroskedasticity : hétéroscédasticité conditionnelle autorégressive généralisée. Autrement dit, une variance qui change dans le temps et dépend de son propre passé et des chocs récents.
Alpha mesure la réaction de la volatilité à un choc récent, beta sa mémoire. Leur somme est la persistance : proche de 1, une période agitée dure longtemps. Si elle atteint 1, la volatilité ne revient plus vers un niveau moyen.
La volatilité historique est l'écart-type des rendements sur une fenêtre fixe, par exemple 20 jours : tous les jours comptent autant, puis disparaissent d'un coup. GARCH pondère le passé de façon décroissante et prévoit le retour vers un niveau de long terme.
Modélise le niveau d'une série. On combine souvent les deux : un ARIMA pour la moyenne, un GARCH pour la variance.
Voir la fiche → pour les scénariosSimule des milliers de trajectoires à partir de la volatilité GARCH pour une VaR de portefeuille ou le prix d'une option.
Voir la fiche → la version simplifiéeLa volatilité EWMA (méthode RiskMetrics) lisse les rendements au carré. C'est un GARCH sans retour vers un niveau de long terme.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus