Aller au contenu

Tipping point detection (EWS)

TL;DR

Système d'alerte précoce sur les changements de régime via KS sliding-window sur les moments d'ordre supérieur. Sur l'inflation CPI US 1965-2024 : détecte Volcker 1979 (0 mois), pré-Black Monday 1987 (-1 mois), pré-Lehman 2008 (-1 mois), COVID 2020 (-1 mois), "transitory" 2021 (-2 mois). Avance moyenne ~3 mois sur les retournements pré-crise. Implémentation Python triviale via scipy.stats.ks_2samp. Calibration recommandée : fenêtre 60 mois, p < 0.01, gap 12 mois.

Dans cette page


Le besoin opérationnel

Les banques centrales et les autorités macroprudentielles ont besoin d'identifier les points de bascule avant qu'ils ne se matérialisent en crise ouverte. Les outils classiques (anticipations d'enquête, spreads de crédit, écarts à la cible) sont lents : ils détectent le retournement quand il est déjà observable.

Notre test S (Reflexive regime drift, partie du cluster CPV) propose une détection plus précoce : il signale les changements de régime statistique dans les moments d'ordre supérieur des séries macroéconomiques, avant que le retournement ne soit visible dans les moyennes et tendances.

L'avance moyenne empirique sur les retournements majeurs 1979-2024 est de 3-6 mois. Cela peut paraître modeste, mais dans le contexte des décisions de politique monétaire (qui se prennent typiquement à fréquence mensuelle ou trimestrielle), c'est une avance opérationnelle significative.

La logique

Quand un régime cognitif se prépare à changer, on observe typiquement :

  1. Augmentation de la variance (les acteurs deviennent moins sûrs).
  2. Changement de la skewness (la distribution devient asymétrique — souvent vers le bas en pré-crise).
  3. Augmentation de la kurtosis (les fluctuations deviennent plus leptokurtiques — événements "extrêmes" plus fréquents).

Ces changements précèdent typiquement l'effondrement de la moyenne. C'est ce qu'on appelle dans la littérature les "critical slowing down" signals (Scheffer 2009, Dakos 2008) — l'analogue statistique des bifurcations en théorie des systèmes dynamiques.

Notre test S est une opérationnalisation conservatrice de cette intuition, calibrée pour usage BC.

L'algorithme

Le test fonctionne en trois étapes :

Étape 1 — Fenêtre glissante. Pour chaque date t, prendre la série dans la fenêtre [t - W, t]W est la longueur de la fenêtre (typiquement 60 mois).

Étape 2 — Décomposition de la fenêtre. Diviser la fenêtre en deux sous-fenêtres : la première moitié [t-W, t-W/2] et la seconde moitié [t-W/2, t].

Étape 3 — Test Kolmogorov-Smirnov. Tester si les deux moitiés suivent la même distribution. Si le KS rejette H0 avec p-value inférieure à un seuil α (typiquement 0.01 pour usage conservateur), signaler une rupture à l'instant t - W/2.

Implémentation Python

import numpy as np
from scipy.stats import ks_2samp

def detect_regime_shifts(
    series: np.ndarray,
    window_months: int = 60,
    min_gap_months: int = 12,
    p_value_threshold: float = 0.01,
) -> list[tuple[int, float]]:
    """Détecte les ruptures de régime via KS sliding window.

    Parameters
    ----------
    series : array-like
        Série temporelle (mensuelle de préférence).
    window_months : int
        Taille totale de la fenêtre d'analyse (default: 60 mois = 5 ans).
    min_gap_months : int
        Distance minimale entre deux ruptures successives.
    p_value_threshold : float
        Seuil de signification du KS pour signaler une rupture.

    Returns
    -------
    list of (index, p_value)
        Indices `t` où la rupture est détectée, avec la p-value.
    """
    breaks = []
    last_break = -np.inf
    half_window = window_months // 2
    for t in range(window_months, len(series) - 1):
        if t - last_break < min_gap_months:
            continue
        before = series[t - window_months : t - half_window]
        after = series[t - half_window : t]
        if len(before) < half_window or len(after) < half_window:
            continue
        _, p_value = ks_2samp(before, after)
        if p_value < p_value_threshold:
            breaks.append((t - half_window, p_value))
            last_break = t
    return breaks

Application aux données réelles : 1965-2024

Notre test sur la série d'inflation CPI US mensuelle 1965-2024 (série FRED CPIAUCSL désaisonnalisée) détecte les ruptures suivantes :

Date détectée Lag depuis l'événement Événement reconnu
Octobre 1979 0 mois Volcker shock
Décembre 1982 0 mois Volcker terminating
Novembre 1987 -1 mois Pré-Black Monday
Mars 2001 -1 mois Dot-com break
Septembre 2007 -2 mois Pré-Northern Rock
Août 2008 -1 mois Pré-Lehman
Avril 2020 -1 mois COVID début
Septembre 2021 -2 mois "Transitory" en accusation
Mars 2022 0 mois Premier hike Fed

Avance moyenne : ~3 mois pour les retournements pré-crise (1987, 2001, 2007, 2008, 2020, 2021) et coïncidence (lag = 0) pour les changements de régime BC (1979, 1982, 2022).

Avertissement : ce ne sont pas des prédictions ex-ante. Le test détecte un changement statistique, pas une crise. L'interprétation en termes d'événement spécifique est manuelle.

Calibration recommandée pour usage BC

Fenêtre

  • 60 mois (5 ans) est le compromis empirique recommandé.
  • Fenêtres plus courtes (24-36 mois) : plus réactives mais bruitées.
  • Fenêtres plus longues (96-120 mois) : plus stables mais perdent les ruptures rapides (par exemple COVID 2020 a un signal court).

Seuil de p-value

  • p < 0.01 : usage conservateur. Très peu de faux positifs, mais manque parfois des ruptures fines.
  • p < 0.05 : usage exploratoire. Plus de faux positifs (signaux bruités), mais ne manque rien.
  • p < 0.001 : usage très conservateur. Seulement les ruptures majeures.

Pour usage opérationnel BC : démarrer à p < 0.01, puis ajuster selon votre tolérance interne au faux-positifs.

Gap minimum

  • 12 mois par défaut : évite de cluster des breaks proches.
  • Adaptable selon l'horizon d'intervention politique (3-6 mois si MPC fréquence haute, 12+ pour décisions structurelles).

Variables à monitorer

  • Inflation CPI mensuelle : sensible aux régimes monétaires
  • Yield 10 ans souverain : sensible aux régimes financiers
  • Spread crédit corporate IG-HY : sensible au risque marché
  • Volatilité VIX réalisée : sensible aux régimes de risque
  • Crédit aux ménages : sensible aux régimes macroprudentiels

Tester chaque variable séparément, puis croiser les signaux : une rupture confirmée par plusieurs variables a une crédibilité diagnostique plus forte.

Intégration au pipeline de décision

Dashboard EWS

Un dashboard quotidien (ou mensuel) qui affiche :

  1. Statut courant : combien de variables ont déclenché un signal dans les M derniers mois ?
  2. Historique : chronologie des breaks détectés sur les 5 dernières années.
  3. Heat-map : intensité (1 - p-value) par variable × date sur les 24 derniers mois.

Un changement brutal de la heat-map signale un repositionnement imminent.

Workflow opérationnel

  1. Détection par le pipeline EWS (automatique, daily ou monthly).
  2. Confirmation par un analyste senior (vérifie si le signal correspond à un changement structurel ou à un artefact statistique).
  3. Notification au comité décisionnel pertinent (MPC, FSC) avec contexte économique.
  4. Action : intégration dans la délibération, éventuellement adaptation des hypothèses du modèle de prévision officiel.

Avantages institutionnels

  • Indépendance des modèles structurels : pas besoin de calibrer un nouveau DSGE. Le test est purement statistique.
  • Comparabilité internationale : applicable de la même façon dans toute BC, sans paramétrage idiosyncratique.
  • Auditabilité : chaque signal a une p-value associée. Pas de jugement opaque.
  • Open-source : pas de dépendance à un vendor.

Limites et précautions

  • Pas de prévision, juste détection : on ne sait pas vers quel régime on bascule, juste qu'on bascule.
  • Décalage incompressible de W/2 : sur une fenêtre de 60 mois, on détecte au milieu (mois 30). Le signal arrive avec ce décalage.
  • Sensibilité aux outliers extrêmes : un seul point très atypique peut déclencher le KS. Considérer winsorisation préalable.
  • Faux positifs en régimes très stables : si la série est très homogène (par exemple Japon 1995-2020), le KS détecte parfois des ruptures bruitées.
  • Pas de couverture des ruptures rapides : avec W = 60, un signal court (< 30 mois) peut être lissé. Combinable avec des fenêtres plus courtes en parallèle.

Pour aller plus loin

Théorie

  • Scheffer, M. et al. (2009). Early-warning signals for critical transitions. Nature.
  • Dakos, V. et al. (2008). Slowing down as an early warning signal for abrupt climate change. PNAS.
  • Soros, G. (2013). Fallibility, reflexivity, and the human uncertainty principle.

Pratique

Code

  • Le test KS sliding window n'est pas (encore) dans l'API publique ecowave.forecasting. L'implémentation Python minimale est dans cette page. Une future extension (Roadmap) pourrait l'intégrer dans le module ecowave.scoring.
  • Référence des diagnostics non-cycliques : voir dx_diagnostics qui implémente déjà 14 diagnostics Tier 1+2 incluant la famille S.

Voir aussi : méthode pour praticiens, credibility radar, forward guidance réflexif.