一緒に動く度合いで資産をグループ化する
距離は2つのものがどれだけ離れているかを表します。資産では「近い」は「一緒に動く」を意味すべきなので、相関 ρ を距離 d=21(1−ρ) に変えます。完全な相関 ρ=1 は距離 0、無相関は 0.71、正反対の動き ρ=−1 は距離 1 です。1−ρ と違い、この式は本物の距離のように振る舞うので、クラスタリングの道具に渡せます。scipy.spatial.distance.pdist はすべての組の距離を一度に計算し、squareform は完全な表とクラスタリング関数が期待する圧縮リストを相互に変換します。多数の点の中から最も近い点を探すには、scipy.spatial.cKDTree がすべての点と比べるよりずっと速いです。
階層的クラスタリングは、各資産を1つずつの集団として始め、最も近い2つの集団を繰り返し併合します。2つの集団の距離をどう測るかが連結法です。single は集団間で最も近い組、complete は最も遠い組、average は集団間のすべての距離の平均を使います。hierarchy.linkage(distances, method) は併合の履歴全体を各併合の高さとともに返します。hierarchy.fcluster(Z, t, 'distance') は木を高さ t で切って集団ラベルを与え、'maxclust' なら指定した数の集団に分けます。金融では、集団が分散投資の地図になります。同じ集団の資産はほぼ同じリスクを負っているので、5つ持っても5つの賭けにはなりません。
dij=21(1−ρij),daverage(A,B)=∣A∣∣B∣1i∈A∑j∈B∑dij,dsingle=mindij,dcomplete=maxdij(1) 3資産の手計算相関
0.5 の距離は
0.25=0.5、
0.8 なら
0.1=0.316 です。距離が
AB=0.3、
AC=0.8、
BC=0.7 の3資産を考えます。最も近い組は
A と
B で、高さ
0.3 で併合されます。新しい集団から
C への距離は、単連結で
min(0.8,0.7)=0.7、完全連結で
max=0.8、平均連結で
(0.8+0.7)/2=0.75 なので、平均連結では2回目の併合は
0.75 で起きます。木を高さ
0.5 で切ると、
{A,B} と
{C} の2集団が残ります。実データでは、履歴が
90% 以上ある米国の大型株
55 銘柄で、
JPM と
BAC の相関は
0.79(距離
0.327)です。平均連結で
6 集団に切ると、
37 銘柄の大きな集団、ちょうどヘルスケア株の
8 銘柄(JNJ、PFE、MRK、ABT、AMGN、LLY、BMY、MDT)、ディフェンシブ株の
7 銘柄(PG、KO、PEP、T、VZ、DUK、SO)、そして単独の3銘柄になります。
- 相関を距離にする:d=(1−ρ)/2 は双子なら 0、正反対なら 1。
- 連結法は選択:単連結・完全連結・平均連結は、同じデータでも異なる併合の高さを与えうる。
- 集団は分散投資の地図:集団をまたいで選ぶ。同じ集団の資産はリスクの大部分を共有するから。
ラボ:採点される内容
- 相関から距離へ10点
- 距離から相関へ10点
- 平均連結の高さ15点
- 単連結の高さ10点
- 切断後の集団10点
- 各ルーチンの働き15点
- 集団と分散投資30点