アセットマネージャーのためのファイナンス機械学習:練習問題 離散化

 前記事の確率変数を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の場合

size=1000


サイズが10000000の場合

size=1000000

 相互情報量、VIの振る舞いがサイズの違いで比較的強く現れる。

この記事が気に入ったらサポートをしてみませんか?