Dejar que las correlaciones dibujen los grupos
El agrupamiento jerárquico parte de una distancia entre cada par de activos. Una correlación no es una distancia, pero dᵢⱼ=√(1/2(1-ρᵢⱼ)) sí lo es: vale 0 para ρ=1, cerca de 0,71 para ρ=0 y 1 para ρ=-1, y cumple la desigualdad triangular. squareform(d, checks=False) convierte la matriz cuadrada en la lista condensada de n(n-1)/2 distancias que espera scipy.cluster.hierarchy.linkage(y, method='average'). El resultado Z es un árbol escrito en n-1 filas [izquierda, derecha, altura, tamaño]: en cada paso se fusionan los dos grupos más cercanos y la distancia entre dos grupos es el promedio de las distancias entre sus miembros.
Dos funciones leen el árbol. hierarchy.leaves_list(Z) da el orden de las hojas en el que los activos parecidos son vecinos, lo que reordena una matriz de correlación en bloques visibles. hierarchy.fcluster(Z, k, criterion='maxclust') corta el árbol en como máximo k grupos y devuelve una etiqueta por activo. Con doce acciones y ETF en 1.500 días, sin ninguna información sectorial, salen cinco grupos: tecnología (AAPL, MSFT, NVDA), bancos (JPM, BAC, GS), energía (XOM, CVX), salud (JNJ, PFE) y bonos (TLT, IEF). hierarchy.cophenet(Z, y) mide la fidelidad del árbol: correlaciona las distancias originales con las que implica el árbol y aquí da 0,96. Un valor cercano a 1 indica un buen resumen; uno bajo, que la estructura no es realmente jerárquica.
- Una correlación no es una distancia: use √(1/2(1-ρ)) y luego
squareform(..., checks=False). leaves_listordena,fclustercorta: uno da vecinos, el otro grupos.- La correlación cofenética cercana a 1 significa que el árbol conserva las distancias; compruébela antes de confiar en los grupos.
Lab: qué se califica
- Distancia de correlación15 pts
- El árbol de enlace promedio15 pts
- El orden de las hojas15 pts
- Cortar el árbol20 pts
- La correlación cofenética15 pts
- El estudio de doce activos20 pts