pca的量化应用学习:
学习内容:
import pandas as pd
import numpy as np
from pylab import mpl,plt
plt.style.use('seaborn')
mpl.rcParams['font.family']='serif'
pd.set_option('display.width', None)
pd.set_option('display.max_rows', 50)
filename='tr_eikon_eod_data.csv'
data=pd.read_csv(filename,index_col=0,parse_dates=True)
rets=np.log(data/data.shift(1))
print(rets.corr())
avg=np.array(rets.mean())
C=np.array(rets.corr())
w, v = np.linalg.eig(C)
index = np.argsort(-w)
tran=np.array(v.T[index[:len(w)]])
w_=-1*np.sort(-w)
b0=[]
b=[]
a0=[]
a=[]
s0=0
s=0
for i in range(0,11):
b0.append(w_[i]/(np.sum(w_)))
s0+=b0[i]
a0.append(s0)
print(b0)
print(a0)
k=3
for i in range(0,k):
b.append(w_[i]/(sum(w_[:k])))
s+=b[i]
a.append(s)
print(b)
print(a)
B=tran[:k,]
df_B=pd.DataFrame(B)
x=np.array(rets-avg).T
df_x=pd.DataFrame(x.T)
y=np.dot(B,x)
df_y=pd.DataFrame(y.T)
print(df_B)
df_x.cumsum().apply(np.exp).plot()
df_y.cumsum().apply(np.exp).plot()
plt.show()
'''
得到的结论:通过pca,可以将各种资产收益率的时间序列抽出线性无关的k个组成部分,
每种资产都可以通过这k个主成分线性组合配置得到
主成分之间是没有相关性的!!!!
'''