Deixar as correlações desenharem os grupos
O agrupamento hierárquico parte de uma distância entre cada par de ativos. Uma correlação não é uma distância, mas dᵢⱼ=√(1/2(1-ρᵢⱼ)) é: vale 0 para ρ=1, cerca de 0,71 para ρ=0 e 1 para ρ=-1, e obedece à desigualdade triangular. squareform(d, checks=False) transforma a matriz quadrada na lista condensada de n(n-1)/2 distâncias que scipy.cluster.hierarchy.linkage(y, method='average') espera. O resultado Z é uma árvore escrita em n-1 linhas [esquerda, direita, altura, tamanho]: a cada passo os dois grupos mais próximos são fundidos, e a distância entre dois grupos é a média das distâncias entre seus membros.
Duas funções leem a árvore. hierarchy.leaves_list(Z) dá a ordem das folhas em que ativos parecidos ficam vizinhos, o que reordena uma matriz de correlação em blocos visíveis. hierarchy.fcluster(Z, k, criterion='maxclust') corta a árvore em no máximo k grupos e devolve um rótulo por ativo. Com doze ações e ETFs em 1.500 dias, sem nenhuma informação setorial, saem cinco grupos: tecnologia (AAPL, MSFT, NVDA), bancos (JPM, BAC, GS), energia (XOM, CVX), saúde (JNJ, PFE) e títulos (TLT, IEF). hierarchy.cophenet(Z, y) mede a fidelidade da árvore: correlaciona as distâncias originais com as que a árvore implica, e aqui dá 0,96. Um valor perto de 1 indica bom resumo; um baixo, que a estrutura não é realmente hierárquica.
- Correlação não é distância: use √(1/2(1-ρ)) e depois
squareform(..., checks=False). leaves_listordena,fclustercorta: uma dá vizinhos, a outra grupos.- A correlação cofenética perto de 1 significa que a árvore guarda as distâncias; confira antes de confiar nos grupos.
Lab: o que é avaliado
- Distância de correlação15 pts
- A árvore de ligação média15 pts
- A ordem das folhas15 pts
- Cortar a árvore20 pts
- A correlação cofenética15 pts
- O estudo de doze ativos20 pts