アセットマネージャーのためのファイナンス機械学習:クラスタリング モンテカルロシミュレーション
観測データのサイズ$${N=8,16,32}$$のそれぞれについて、クラスタ数$${K=3,6, \dots N/2}$$の相関行列を作り、シャッフルした後、ONCでクラスタ数を推定するモンテカルロシミュレーションを行い、$${K/N}$$につき、$${E[K]/K}$$の平均とエラーを集計する。
N=[8,16,32,48]
M=2
num=100
results={}
for n in N:
print(n)
for k in range(3,int(n/2)+1,3):
E=0;
for i in range(1,num):
corr0 = randomBlockCorr(n, k, minBlockSize=M)
corr1=ShuffleMatrix(corr0)
corr1New, clstrs1New, silh1New = clusterKMeansTop(corr1)
E+=len(clstrs1New)/k
key=k/n
results.setdefault(key,[]).append(E/num)
df=pd.DataFrame()
for mky,mv in results.items():
n_mv=len(mv)
avg=sum(mv)/n_mv
err=0.0
for i in range(1,n_mv):
err+=(mv[i]-avg)*(mv[i]-avg)
err/=n_mv
list_=[[mky,round(avg,3),round(err,3)]]
df_new=pd.DataFrame(list_,columns=['K/N','E[K]/K','ERR'])
df=pd.concat([df,df_new])