M/03 · Análise Topológica de Dados
Barcodes de persistência sobre a estrutura de correlação de estratégias
Homologia persistente H₀ sob uma filtração de Vietoris–Rips com distância de correlação: contando quantos clusters estáveis sobrevivem em uma população de estratégias.
A matemática
Tome N estratégias com históricos de retornos ri ∈ ℝT. Defina a distância de correlação
que é a distância Euclidiana entre os representantes de norma unitária dos dois vetores de retorno; é uma métrica verdadeira (Mantegna 1999). Em ε = 0 cada estratégia é seu próprio cluster, N componentes conexos. Conforme ε cresce, adicionamos uma aresta para cada par com d(i, j) ≤ ε. O complexo de Vietoris–Rips VRε é o complexo simplicial cujos k-simplexos são (k+1)-cliques nesse grafo; para H₀ precisamos apenas de seu 1-esqueleto (o próprio grafo).
Componentes conexos de VRε são rastreados por union-find. Conforme ε aumenta, obtemos uma sequência aninhada de grafos
Cada nova aresta ou (a) conecta dois vértices já no mesmo componente (sem mudança em H₀), ou (b) mescla dois componentes em um. No caso (b), o componente mais jovem “morre” em ε. A persistência formaliza isso: cada componente tem um nascimento em ε = 0 e uma morte no momento da mesclagem. O 0-ésimo diagrama de persistência é
ou seja, N − 1 barras finitas e uma barra imortal (o componente que eventualmente engloba tudo). O barcode é apenas esse conjunto desenhado como segmentos horizontais.
Contagem de clusters estáveis
Barras longas correspondem a clusters que resistiram a serem absorvidos por uma faixa longa de ε, o que significa que qualquer limiar razoável em torno da barra dividiria a população do mesmo modo. Uma heurística padrão para “número de clusters estáveis” é
com c em torno de 1,5–2,0; o +1 contabiliza a barra imortal. Alternativas mais rigorosas incluem a distância de bottleneck até um barcode perturbado sob reamostragem por bootstrap, que reportamos no pipeline de produção.
Exemplo trabalhado
Três clusters plantados de 8 estratégias cada, ρ intra-cluster = 0,6 em T = 250 barras. Com probabilidade 1 à medida que T cresce, as correlações empíricas dentro de um cluster concentram-se em torno de 0,6 (então d ≈ √(2·0,4) ≈ 0,89) e correlações entre clusters em torno de 0 (d ≈ √2 ≈ 1,41). Barcode esperado:
- 21 barras curtas morrendo perto de ε ≈ 0,89 (as 21 mesclagens dentro do cluster).
- 2 barras longas morrendo perto de ε ≈ 1,41 (as duas mesclagens entre clusters).
- 1 barra imortal.
K* = 1 + 2 = 3, consistente com o ground truth. O demo abaixo reproduz esse experimento.
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.
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.
Figuras
Por que isso importa para estratégias sistemáticas
Contagem de clusters é um indicador de regime subestimado. Em um mercado benigno a população de estratégias se decompõe em vários clusters estáveis de estilos ortogonais, barras longas são comuns. Em um regime estressado as correlações entre clusters sobem, as correlações dentro do cluster sobem mais, e o barcode colapsa para uma ou duas barras longas: tudo opera em conjunto. O inteiro K* derivado do barcode H₀ sinaliza esse colapso antes que ele apareça nas estatísticas de portfólio principais.
Operacionalmente rodamos M/03 ao lado de M/01 (espectro de autovalores RMT). A contagem de autovalores de sinal MP fornece um limite superior para o número de fatores efetivos; a contagem de clusters persistentes H₀ fornece um limite inferior para o número de estilos efetivos. Os dois devem se acompanhar. Quando divergem, geralmente porque um único fator está dirigindo tudo, isso é um alerta.
Reprodutibilidade
DaruFinance / strategy-tda
Python · implementação de referência open-source
Invocação mínima
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
Referências
- [1]Edelsbrunner, H., Letscher, D. & Zomorodian, A. (2002). Topological persistence and simplification. Discrete & Computational Geometry 28, 511–533.
- [2]Carlsson, G. (2009). Topology and data. Bulletin of the AMS 46, 255–308.
- [3]Gidea, M. & Katz, Y. (2018). Topological data analysis of financial time series: landscapes of crashes. Physica A 491, 820–834.
- [4]Mantegna, R. N. (1999). Hierarchical structure in financial markets. European Physical Journal B 11, 193–197.

