アセットマネージャーのためのファイナンス機械学習:ノイズ除去 Target Shrinkage
シュリンケージの対象を、雑音由来の固有値ベクトルに限定して行う。
シュリンケージの度合いを$${\alpha}$$として、固有値分解から、
$${\bf{C}1=\bf{W}_{L}\bf{\Lambda}_{L}\bf{W}_{L}^{T} + \alpha \bf{W}_{R}\bf{\Lambda}_{R}\bf{W}_{R}^{T} + (1-\alpha)diag[\bf{W}_{R}\bf{\Lambda}_{R}\bf{W}_{R}^{T} ] }$$
$${\bf{W}_{R},\bf{\Lambda}_{R} :\{ n| \lambda_n \le \lambda_+\}}$$は、雑音領域にある固有値ベクトルと固有値であり、シュリンケージの対象となっている。
$${\bf{W}_{L},\bf{\Lambda}_{L} :\{ n| \lambda_n \gt \lambda_+\}}$$は、ノイズ領域にある固有値ベクトルと固有値である。
$${\alpha \to 0}$$は雑音領域を圧縮して消すことになる。
ターゲットシュリンケージはスニペット2.5で実装されている。
def denoisedCorr2(eVal, eVec,nFacts,alpha=0):
eValL,eVecL=eVal[:nFacts,:nFacts],eVec[:,:nFacts]
eValR,eVecR=eVal[nFacts:,nFacts:],eVec[:,nFacts:]
corr0=np.dot(eVecL,eValL).dot(eVecL.T)
corr1=np.dot(eVecR,eValR).dot(eVecR.T)
corr2=corr0+alpha*corr1+(1-alpha)*np.diag(np.diag(corr1))
return corr2
$${\alpha=0}$$で、雑音を全消去した固有値分布は以下のようになっている。
この記事が気に入ったらサポートをしてみませんか?