アセットマネージャーのためのファイナンス機械学習:クラスタリング 実験 サンプル相関行列のシャッフル前後でのONC
前記事のrandomBlockCorrで得られた相関係数をヒートマップで可視化する。
nCols, nBlocks, minBlockSize = 30, 6, 2
corr0 = randomBlockCorr(nCols, nBlocks, minBlockSize=minBlockSize)
import matplotlib.pyplot as plt
plt.matshow(corr0)
plt.gca().xaxis.tick_bottom()
plt.gca().invert_yaxis()
plt.colorbar()
plt.show()

ブロックの各サイズは[6,9,7,2,3,3]である。
この相関行列をそのままONCに渡すと、以下のヒートマップが得られる。
corr0New, clstrs0New, silh0New = clusterKMeansTop(corr0)
clstrs0New

ONCによるクラスタリングの結果は返り値のclstrs0Newに入っている。

クラスリングはオリジナルと一致する。
さらに、オリジナルのcorr0をシャッフルして新たな相関行列を作る。
def ShuffleMatrix(bCorr,random_state=None):
rng=check_random_state(random_state)
corr0=pd.DataFrame(bCorr)
cols=corr0.columns.tolist()
rng.shuffle(cols)
corr0=corr0[cols].loc[cols].copy(deep=True)
return corr0
シャッフル後の相関行列を可視化すると以下のように散らばっている。

シャッフル後にONCに渡した結果のヒートマップは以下の通りである。
corr1New, clstrs1New, silh1New = clusterKMeansTop(corr1)


オリジナルのクラスタリングが復元されている。