Laisser les corrélations dessiner les groupes
Le regroupement hiérarchique part d'une distance entre chaque paire d'actifs. Une corrélation n'est pas une distance, mais dᵢⱼ=√(1/2(1-ρᵢⱼ)) en est une : elle vaut 0 pour ρ=1, environ 0,71 pour ρ=0 et 1 pour ρ=-1, et elle respecte l'inégalité triangulaire. squareform(d, checks=False) transforme la matrice carrée en la liste condensée des n(n-1)/2 distances qu'attend scipy.cluster.hierarchy.linkage(y, method='average'). Le résultat Z est un arbre écrit en n-1 lignes [gauche, droite, hauteur, taille] : à chaque étape, les deux groupes les plus proches sont fusionnés, et la distance entre deux groupes est la moyenne des distances entre leurs membres.
Deux fonctions lisent l'arbre. hierarchy.leaves_list(Z) donne l'ordre des feuilles où les actifs semblables sont voisins, ce qui réordonne une matrice de corrélation en blocs visibles. hierarchy.fcluster(Z, k, criterion='maxclust') coupe l'arbre en au plus k groupes et renvoie une étiquette par actif. Sur douze actions et ETF sur 1 500 jours, sans aucune information sectorielle, cinq groupes apparaissent : technologie (AAPL, MSFT, NVDA), banques (JPM, BAC, GS), énergie (XOM, CVX), santé (JNJ, PFE) et obligations (TLT, IEF). hierarchy.cophenet(Z, y) mesure la fidélité de l'arbre : il corrèle les distances d'origine avec celles que l'arbre implique, et donne ici 0,96. Une valeur proche de 1 signifie que l'arbre résume bien ; une valeur faible, que la structure n'est pas vraiment hiérarchique.
- Une corrélation n'est pas une distance : utilisez √(1/2(1-ρ)), puis
squareform(..., checks=False). leaves_listordonne,fclustercoupe : l'un donne des voisins, l'autre des groupes.- La corrélation cophénétique proche de 1 signifie que l'arbre garde les distances ; vérifiez-la avant de faire confiance aux groupes.
Lab : ce qui est noté
- Distance de corrélation15 pts
- L'arbre à liaison moyenne15 pts
- L'ordre des feuilles15 pts
- Couper l'arbre20 pts
- La corrélation cophénétique15 pts
- L'étude de douze actifs20 pts