アセットマネージャーのためのファイナンス機械学習:練習問題 離散化
前記事の確率変数をHacine-Gharbi et al.(2012)の離散化を経て、再試行する。
この場合、$${\rho=-1,1}$$でゼロ割が発生するので、$${|\rho|=-.999}$$に置き換えて行う。
import numpy as np
import pandas as pd
corr_coef = [-0.999, -0.5, 0, 0.5, 0.999]
size,seed=1000,0
np.random.seed(seed)
df=pd.DataFrame()
list_=[[corr,hX,hY,hXY,hX_Y,iXY,vXY,norm_vXY]]
for corr in corr_coef:
x=np.random.normal(size=size)
e=np.random.normal(size=size)
y=corr*x + (1-corr**2)**.5*e
bXY=numBins(x.shape[0],corr=corr)
cXY=np.histogram2d(x,y,bXY)[0]
hX=ss.entropy(np.histogram(x,bXY)[0])
hY=ss.entropy(np.histogram(y,bXY)[0])
'''
bins=10
cXY=np.histogram2d(x,y,bins)[0]
hX=ss.entropy(np.histogram(x,bins)[0])
hY=ss.entropy(np.histogram(y,bins)[0])
'''
iXY=mutual_info_score(None,None, contingency=cXY)
iXYn=iXY/min(hX,hY)
hXY=hX+hY-iXY
vXY=hX+hY-2*iXY
hX_Y=hXY-hY
hY_X=hXY-hX
norm_vXY=vXY/hXY
list_=[[corr,round(hX,3),round(hY,3),round(hXY,3),round(hX_Y,3),round(iXY,3),round(vXY,3),round(norm_vXY,3)]]
df_new=pd.DataFrame(list_,columns=['rho','hX','hY','hXY','hX_Y','iXY','vXY', 'norm_vXY'])
df=pd.concat([df,df_new])
print(df)
サイズが1000の場合
サイズが10000000の場合
相互情報量、VIの振る舞いがサイズの違いで比較的強く現れる。