Lab

M/03 · Analyse topologique de données

Codes-barres de persistance sur la structure de corrélation des stratégies

Homologie persistante H₀ sous une filtration de Vietoris–Rips à distance de corrélation : compter combien de clusters stables survivent dans une population de stratégies.

Les mathématiques

Prenez N stratégies avec des historiques de rendements ri ∈ ℝT. Définissez la distance de corrélation

qui est la distance euclidienne entre les représentants de norme unitaire des deux vecteurs de rendements ; c'est une véritable métrique (Mantegna 1999). À ε = 0 chaque stratégie est son propre cluster, N composantes connexes. À mesure que ε croît, nous ajoutons une arête pour chaque paire avec d(i, j) ≤ ε. Le complexe de Vietoris–Rips VRε est le complexe simplicial dont les k-simplexes sont les (k+1)-cliques de ce graphe ; pour H₀ nous n'avons besoin que de son 1-squelette (le graphe lui-même).

Les composantes connexes de VRε sont suivies par union-find. À mesure que ε augmente, nous obtenons une suite emboîtée de graphes

Chaque nouvelle arête soit (a) connecte deux sommets déjà dans la même composante (aucun changement à H₀), soit (b) fusionne deux composantes en une. Dans le cas (b), la composante la plus jeune « meurt » à ε. La persistance formalise cela : chaque composante a une naissance à ε = 0 et une mort au moment de la fusion. Le 0-ième diagramme de persistance est

c'est-à-dire N − 1 barres finies et une barre immortelle (la composante qui finit par tout englober). Le code-barres n'est que cet ensemble dessiné sous forme de segments horizontaux.

Décompte de clusters stables

Les barres longues correspondent à des clusters qui ont résisté à l'absorption sur une longue plage de ε, ce qui signifie que tout seuil raisonnable autour de la barre partitionnerait la population de la même façon. Une heuristique standard pour le « nombre de clusters stables » est

avec c autour de 1,5–2,0 ; le +1 tient compte de la barre immortelle. Des alternatives plus serrées incluent la distance de bottleneck à un code-barres perturbé sous rééchantillonnage par bootstrap, que nous rapportons dans le pipeline de production.

Exemple travaillé

Trois clusters plantés de 8 stratégies chacun, ρ intra-cluster = 0,6 sur T = 250 barres. Avec probabilité 1 à mesure que T croît, les corrélations empiriques au sein d'un cluster se concentrent autour de 0,6 (donc d ≈ √(2·0,4) ≈ 0,89) et les corrélations inter-clusters autour de 0 (d ≈ √2 ≈ 1,41). Code-barres attendu :

  • 21 barres courtes mourant près de ε ≈ 0,89 (les 21 fusions intra-cluster).
  • 2 barres longues mourant près de ε ≈ 1,41 (les deux fusions inter-clusters).
  • 1 barre immortelle.

K* = 1 + 2 = 3, cohérent avec la vérité terrain. La démo ci-dessous reproduit cette expérience.

Demo: H0 persistence barcode

3 planted clusters of 8 strategies each. Pairwise correlation distance d(i,j)=√(2(1−ρ)). Barcode: when each connected component merges into a larger one.

K (true clusters)3
N per cluster8
Intra-cluster ρ0.60
seed=5
N points
24
planted K
3
median death
0.85
long bars
2
0.000.290.570.861.151.43connected components (sorted)filtration value ε (correlation distance)

Each horizontal bar is one connected component, born at ε=0 and dying when it merges with another component. Amber bars are persistent, they survive past 1.5× the median merge-distance. Their count + 1 (the immortal component) ≈ the number of stable clusters in the population.

Figures

Fig. 1:Code-barres de persistance H₀ construit à partir de la distance de corrélation d(i, j) = √(2(1 − ρᵢⱼ)) sur un échantillon stratifié de 95 stratégies du pool BTC (≈16 stratégies par famille parmi 6 familles d'indicateurs). Chaque segment est la durée de vie d'une composante connexe sous la filtration de Vietoris-Rips ; la barre immortelle est affichée en haut avec le marqueur de flèche-droite. Les barres teal de fusion précoce sont des fusions intra-cluster (quasi-doublons) ; le bulk gris correspond aux fusions typiques près de √2 (indépendance). Sous une règle de barre-longue médiane+2·MAD, aucune barre finie ne dépasse le seuil, K* = 1, ce qui signifie que la population de stratégies BTC est un unique continuum de style connexe, et non une partition discrète.
Fig. 2:Distribution complémentaire des durées de vie. Le corps des distances de fusion se concentre entre 1,10 et 1,35, en deçà de √2 ≈ 1,41 (indépendance) mais bien au-dessus du régime intra-cluster, caractéristique d'une population de stratégies corrélées qui partagent des données de marché sans se diviser en clusters de style discrets. Le seuil basé sur la MAD (ambre) n'est pas atteint : la réponse topologique est un seul cluster stable.

Pourquoi c'est important pour les stratégies systématiques

Le décompte de clusters est un indicateur de régime sous-estimé. Dans un marché bénin, la population de stratégies se décompose en plusieurs clusters stables de styles orthogonaux, les barres longues sont fréquentes. Dans un régime stressé, les corrélations inter-clusters montent, les corrélations intra-cluster montent davantage, et le code-barres s'effondre à une ou deux barres longues : tout évolue de concert. L'entier K* dérivé du code-barres H₀ télégraphie cet effondrement avant qu'il n'apparaisse dans les statistiques de portefeuille principales.

Opérationnellement, nous exécutons M/03 aux côtés de M/01 (spectre de valeurs propres RMT). Le décompte de valeurs propres de signal MP fournit une borne supérieure sur le nombre de facteurs effectifs ; le décompte de clusters persistants H₀ fournit une borne inférieure sur le nombre de styles effectifs. Les deux devraient se suivre. Lorsqu'ils divergent, généralement parce qu'un seul facteur dirige tout, c'est une alerte.

Reproductibilité

DaruFinance / strategy-tda

Python · implémentation de référence open-source

Invocation minimale

import numpy as np
from strategy_tda import h0_barcode_from_returns

# X: N x T strategy returns matrix
bars = h0_barcode_from_returns(X)
# bars is an array of shape (N-1, 2): [birth, death] for each merge
# H0 is born at 0; long bars indicate stable clusters.
n_robust_clusters = sum(d > 1.5 * np.median(bars[:, 1]) for d in bars[:, 1]) + 1

Références

  1. [1]Edelsbrunner, H., Letscher, D. & Zomorodian, A. (2002). Topological persistence and simplification. Discrete & Computational Geometry 28, 511–533.
  2. [2]Carlsson, G. (2009). Topology and data. Bulletin of the AMS 46, 255–308.
  3. [3]Gidea, M. & Katz, Y. (2018). Topological data analysis of financial time series: landscapes of crashes. Physica A 491, 820–834.
  4. [4]Mantegna, R. N. (1999). Hierarchical structure in financial markets. European Physical Journal B 11, 193–197.