相関にグループを描かせる
階層的クラスタリングは、すべての資産の組の距離から始まります。相関は距離ではありませんが、dᵢⱼ=√(1/2(1-ρᵢⱼ)) は距離です。ρ=1 で0、ρ=0 で約0.71、ρ=-1 で1となり、三角不等式を満たします。squareform(d, checks=False) は正方行列を、scipy.cluster.hierarchy.linkage(y, method='average') が期待する n(n-1)/2 個の距離の圧縮リストに変えます。結果の Z は n-1 行 [左, 右, 高さ, サイズ] で書かれた木です。各段階で最も近い2つのグループが併合され、グループ間の距離はメンバー間の距離の平均です。
2つの関数が木を読みます。hierarchy.leaves_list(Z) は似た資産が隣り合う葉の順序を返し、相関行列を見えるブロックに並べ替えます。hierarchy.fcluster(Z, k, criterion='maxclust') は木を最大 k 個のグループに切り、各資産のラベルを返します。12の株式とETFを1,500日分、業種の情報なしで分析すると、5つのグループが現れます:テック(AAPL、MSFT、NVDA)、銀行(JPM、BAC、GS)、エネルギー(XOM、CVX)、ヘルスケア(JNJ、PFE)、債券(TLT、IEF)です。hierarchy.cophenet(Z, y) は木の忠実度を測ります。元の距離と木が示す距離の相関で、ここでは 0.96 です。1に近ければ良い要約、低ければ構造が本当は階層的でないことを意味します。
- 相関は距離ではない:√(1/2(1-ρ)) を使い、
squareform(..., checks=False)に渡す。 leaves_listは並べ、fclusterは切る:前者は隣接、後者はグループを与える。- コーフェン相関が1に近いほど木は距離を保つ。グループを信じる前に確認する。
ラボ:採点される内容
- 相関距離15点
- 平均連結の木15点
- 葉の順序15点
- 木を切る20点
- コーフェン相関15点
- 12資産の研究20点