M/01 · Teoria de Matrizes Aleatórias
Espectro de autovalores da matriz de correlação de estratégias
Teoria de Marchenko–Pastur e análise paralela como piso de ruído para os componentes principais de uma população de estratégias.
A matemática
Suponha que você observe uma matriz N × T de retornos padronizados X (cada uma das N estratégias registrada ao longo de T barras, cada linha com média zero e variância unitária). A matriz de correlação amostral é
Se as linhas de X forem N(0, 1) independentes, ou seja, não há estrutura real, então no limite conjunto N, T → ∞ com razão fixa q = N/T, a distribuição empírica de autovalores de C converge para uma densidade determinística em um suporte finito [λ₋, λ₊]:
Para dados padronizados σ² = 1. O intervalo [λ₋, λ₊] é o bulk. Qualquer autovalor fora do bulk não pode ser explicado apenas por ruído de tamanho amostral, é candidato a estrutura real. Em q = 0,1, λ₊ ≈ 1,73; em q = 0,2, λ₊ ≈ 2,09; em q = 0,5, λ₊ ≈ 2,91. O bulk se alarga conforme q cresce porque, com menos observações por dimensão, as correlações amostrais ficam mais ruidosas.
Análise paralela como nulo não-paramétrico
MP assume colunas Gaussianas e identicamente distribuídas. Retornos reais de estratégias violam ambas as condições. A análise paralela (Horn 1965) substitui esse pressuposto por um nulo totalmente orientado por dados: pegue X, permute independentemente cada linha no tempo, recompute os autovalores. Repita B = 1000 vezes e registre o autovalor máximo a cada réplica. O 99º percentil dessa distribuição é um limite superior não-paramétrico para o bulk:
Permutar no tempo preserva a distribuição marginal de cada linha (de modo que retornos com caudas pesadas permanecem com caudas pesadas) mas destrói a dependência entre linhas. Um autovalor que excede tanto λ₊ do MP quanto o 99º percentil da PA é sinal robusto.
Exemplo trabalhado
Tome N = 60 estratégias, T = 300 barras, q = 0,2. Plante um único cluster correlacionado: 10 das 60 linhas carregam um fator comum com correlação intra-cluster ρ = 0,4. As outras 50 são N(0,1) independentes.
- Bulk MP: λ₊ = (1 + √0,2)² ≈ 2,087, λ₋ ≈ 0,106.
- Autovalor líder teórico do cluster plantado ≈ k · ρ + (1−ρ) ≈ 10 · 0,4 + 0,6 = 4,6.
- Os 59 autovalores restantes devem cair dentro de [λ₋, λ₊].
O demo interativo abaixo recomputa isso toda vez que você move um slider, o marcador da borda do bulk λ₊ se move com q, e qualquer autovalor que o exceda é destacado em âmbar. Reduza o tamanho do cluster a zero e só restará o bulk.
Demo: Marchenko–Pastur eigenspectrum
Generate an N×T strategy returns matrix with a planted correlated cluster. Eigenvalues outside the MP bulk are signal.
Solid curve: MP density ρ_MP(λ) for q=0.200. Bars: empirical histogram of 60 sample-correlation eigenvalues. Bars in amber are above the bulk edge λ₊=2.094, these are the signal eigenvalues.
Figuras
Por que isso importa para estratégias sistemáticas
Uma população de estratégias a q = N/T = 0,2 (digamos N = 6.000 estratégias em T = 30.000 barras de história comum) exibirá vários fatores aparentes em sua matriz de correlação empírica puramente por ruído de tamanho amostral. Construir um portfólio que diversifique nessas direções não diversificará nada, vai diversificar ruído. O limite MP é a defesa não-paramétrica mais barata contra esse modo de falha. No pipeline de produção do escritório esta verificação roda antes de qualquer clusterização ou decomposição em fatores.
Afirmação matematicamente equivalente: o autovetor líder de uma matriz de correlação sem estrutura tem uma razão de participação que é uma função conhecida de q. Nossa implementação M/01 reporta tanto o limite superior do bulk quanto a razão de participação do autovetor líder contra sua distribuição nula.
Reprodutibilidade
DaruFinance / strategy-rmt
Python · implementação de referência open-source
Invocação mínima
import numpy as np
from strategy_rmt import mp_bounds, parallel_analysis
# X: N x T returns matrix (rows = strategies, cols = bars)
N, T = X.shape
C = np.corrcoef(X)
eigs = np.linalg.eigvalsh(C)
lo, hi = mp_bounds(N, T, sigma2=1.0) # (1 - sqrt(q))^2, (1 + sqrt(q))^2
signal = eigs[eigs > hi]
# Optional: parallel analysis null
pa_threshold = parallel_analysis(X, n_perm=1000, q=0.99)
robust_signal = eigs[eigs > pa_threshold]
Referências
- [1]Marchenko, V. A. & Pastur, L. A. (1967). Distribution of eigenvalues for some sets of random matrices. Mat. Sb. (N.S.) 72(114):4, 507–536.
- [2]Laloux, L., Cizeau, P., Bouchaud, J.-P., & Potters, M. (1999). Noise dressing of financial correlation matrices. Physical Review Letters 83(7), 1467–1470.
- [3]Plerou, V., Gopikrishnan, P., Rosenow, B., et al. (2002). Random matrix approach to cross correlations in financial data. Physical Review E 65, 066126.
- [4]Bouchaud, J.-P. & Potters, M. (2009). Financial Applications of Random Matrix Theory: a short review. in The Oxford Handbook of Random Matrix Theory.

