书接上回,关于《用多因子模型构建强大的加密资产投资组合》系列文章中,我们已经发布了四篇:《理论基础篇》、《数据预处理篇》、《因子有效性检验篇》、《大类因子分析:因子合成篇》。
在上一篇中,我们具体解释了因子共线性(因子之间相关性较高)的问题,在进行大类因子合成前,需要进行因子正交化来消除共线性。
通过因子正交化,重新调整原始因子的方向,使他们相互正交($\([\vec{f_i},\vec{f_j}]=0\)$,即两个向量相互垂直),本质是对原始因子在坐标轴上的旋转。这种旋转不改变因子之间的线性关系也不改变原本蕴含的信息,并且新因子之间的相关性为零(内积为零等价于相关性为零),因子对于收益的解释度保持不变。
从多因子截面回归角度,建立因子正交化体系。
每个截面上可以获得全市场 token 在各个因子上的取值,N 代表截面上全市场 token 数量,K 表示因子的数量,$\(f^k=[f_1^k,f_2^k,...,f_N^k]'\)\( 表示全市场 token 在第 k 个因子上的取值,并且已对每个因子进行了 z-score 归一化处理,即 \)\(\bar{f^k}=0, ||f^k||=1\)$。
\[F_{N\times K}=[f^1,f^2,...,f^K]\]
为截面上 K 个线性独立的因子列向量组成的矩阵,假设以上因子线性无关(相关性不为 100% 或 -100%,正交化处理的理论基础)。
$$\( 因子矩阵\ F_{N\times K}=\begin{vmatrix}f_1^1 & f_1^2& \dots&f_1^K\\ f_2^1 & f_2^2&\dots&f_2^K\\ \vdots &\vdots &\ddots&\vdots\\f_N^1 & f_N^2&\dots&f_N^K\\\end{vmatrix}(1)\)$$
通过对 $\(Fₘₙ\)\( 线性变换,得到一个新的因子正交矩阵\)\(F'ₘₙ = [fᵏ₁,fᵏ₂,……fᵏₙ]'\)\( ,新矩阵的列向量相互正交,即任意两个新因子向量内积为零,\)\(\forall i,j,i\not=j,[(\tilde f^i)'\tilde f^j]=0\)$。
定义一个从 $\(F_{N\times K}\)\( 旋转到\)\(\tilde{F}_{N\times K}\)\( 的过渡矩阵 \)\(S_{K\times K}\)$
$$\(\tilde{F}_{N\times K}=F_{N\times K}\cdot S_{K\times K}(2)\)$$
1.1 过度矩阵 $\(S_{K\times K}\)$
以下开始求解过渡矩阵 $\(Sₖₖ\)\(,首先计算\)\( Fₙₖ \)\( 的协方差矩阵\)\(∑ₖₖ\)\(,则 \)\(Fₙₖ\)\( 的重叠矩阵\)\(Mₖₖ=(N-1)∑ₖₖ\)$,即
$$\( 重叠矩阵\ M_{K\times K}=\begin{vmatrix}(f^1)'(f^1)& (f^1)'(f^2)& \dots&(f^1)'(f^K)\\ (f^2)'(f^1) & (f^2)'(f^2)&\dots&(f^2)'(f^K)\\ \vdots &\vdots &\ddots&\vdots\\(f^K)'(f^1) & (f^K)'(f^2)&\dots&(f^K)'(f^K)\\\end{vmatrix}(3)\)$$
旋转后的 $\(\tilde{F}_{N\times K}\)\( 是正交矩阵,根据正交矩阵的性质 \)\(AA^T=I\)$,则有
$$\(\begin{aligned}(\tilde{F}_{N\times K})'\tilde{F}_{N\times K}&=(F_{N\times K}S_{K\times K})'F_{N\times K}S_{K\times K}\\&=S_{K\times K}'F_{N\times K}'F_{N\times K}S_{K\times K}\\&=S_{K\times K}'M_{K\times K}S_{K\times K}\\&=I_{K\times K}\end{aligned}(4)\)$$
所以,
$$\(S_{K\times K}'S_{K\times K}=M_{K\times K}^{-1}(7)\)$$
满足该条件的 $\(Sₖₖ\)$ 即为一个符合条件的过渡矩阵。上面公式的通解为:
$$\(S_{K\times K}=M_{K\times K}^{-1/2}C_{K\times K}(8)\)$$
其中,$\(C_{K\times K}\)$ 为任意正交矩阵
1.2 对称矩阵$\(M_{K\times K}^{-1/2}\)$
下面开始求解 $\(M*{K\times K}^{-1/2}\)\(,因为 \)\(M*{K\times K}\)\( 是对称矩阵,因此一定存在一个正定矩阵 \)\(U_{K\times K}\)$ 满足:
$$\(U_{K\times K}'M_{K\times K}U_{K\times K}=D_{K\times K}(9)\)$$
其中,
$$\(D_{K\times K}=\begin{vmatrix}\lambda_1& 0& \dots&0\\ 0 & \lambda_2&\dots&0\\ \vdots &\vdots &\ddots&\vdots\\0 &0&\dots&\lambda_K\\\end{vmatrix}(10)\)$$
$\(U*{K\times K},D*{K \times K}\)\( 分别为 \)\(M*{K\times K}\)\( 的特征向量矩阵和特征根对角矩阵,并且 \)\(U*{K\times K}'=U_{K\times K}^{-1},\forall k,\lambda_K>0\)$。 由公式(13)可得
$$\(\begin{aligned}M_{K\times K}&=U_{K\times K}D_{K\times K}U_{K\times K}'\\M_{K\times K}^{-1}&=U_{K\times K}D_{K\times K}^{-1}U_{K\times K}'\\M_{K\times K}^{-1/2}M_{K\times K}^{-1/2}&=U_{K\times K}D_{K\times K}^{-1/2}I_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'\\\end{aligned}(11)\)$$
由于 $\(M*{K\times K}^{-1/2}\)\( 是对称矩阵,且 \)\(U*{K\times K}U*{K\times K}'=I*{K\times K}\)\(,可基于上式得到 \)\(M_{K\times K}^{-1/2}\)$ 的一个特解为:
$$\(\begin{aligned}M_{K\times K}^{-1/2}M_{K\times K}^{-1/2}&=U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'\\M_{K\times K}^{-1/2}&=U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'\end{aligned}(12)\)$$
其中
$$\(D_{K\times K}^{-1/2}=\begin{vmatrix}1/\sqrt{\lambda_1}& 0& \dots&0\\ 0 & 1/\sqrt{\lambda_2}&\dots&0\\ \vdots &\vdots &\ddots&\vdots\\0 &0&\dots&1/\sqrt{\lambda_K}\\\end{vmatrix}(13)\)$$
将 $\(M_{K\times K}^{-1/2}\)$ 的解带入公式(6)可求的过渡矩阵:
$$\(\begin{aligned}\color{brown}S_{K\times K}&=M_{K\times K}^{-1/2}C_{K\times K}\\&=\color{brown}U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'C_{K\times K}\end{aligned}(14)\)$$
其中,$\(C_{K\times K}\)$ 为任意正交矩阵。
根据公式(12),任何一种因子正交都可以转化为选择不同的正交矩阵 $\(C_{K\times K}\)$ 对原始因子进行旋转。
1.3 消除共线性主要用到 3 种正交方法
故,$\(S*{K\times K}\)\( 为上三角矩阵,\)\(C*{K\times K}=U*{K\times K}D*{K\times K}^{-1/2}U*{K\times K}'S*{K\times K}\)$
故,$\(S_{K\times K}=U_{K\times K}D_{K\times K}^{-1/2}\)\( ,\)\(C_{K\times K}= U_{K\times K}\)$
故,$\(S_{K\times K}=U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'\)\(,\)\(C_{K\times K}=I_{K\times K}\)$
有一组线性无关的因子列向量 $\(f^1,f^2,...,f^K\)\(,可以逐步的构造出一组正交的向量组 \)\(\tilde{f}^1,\tilde{f}^2,...,\tilde{f}^K\)$,正交后的向量为:
$$\(\begin{aligned}\tilde{f}^1 &= f^1\\\tilde{f}^2 &= f^2-\frac{[f^2,\tilde{f}^1]}{[\tilde{f}^1,\tilde{f}^1]}\tilde{f}^1\\\tilde{f}^3 &= f^3-\frac{[f^3,\tilde{f}^1]}{[\tilde{f}^1,\tilde{f}^1]}\tilde{f}^1-\frac{[f^3,\tilde{f}^2]}{[\tilde{f}^2,\tilde{f}^2]}\tilde{f}^2\\\dots&=\dots\\\tilde{f}^k &= f^k-\frac{[f^k,\tilde{f}^1]}{[\tilde{f}^1,\tilde{f}^1]}\tilde{f}^1-\frac{[f^k,\tilde{f}^2]}{[\tilde{f}^2,\tilde{f}^2]}\tilde{f}^2-\dots-\frac{[f^k,\tilde{f}^{k-1}]}{[\tilde{f}^{k-1},\tilde{f}^{k-1}]}\tilde{f}^{k-1}\\\end{aligned}(15)\)$$
并对 $\(\tilde{f}^1,\tilde{f}^2,...,\tilde{f}^K\)$ 进行单位化后:
$$\(e^k=\frac{\tilde{f}^k}{||\tilde{f}^k||},(k=1,2,\dots,k)(16)\)$$
经过以上处理,得到一组标准正交基。由于 $\(e^1,e^2,\dots,e^K\)\( 与 \)\(f^1,f^2,...,f^K\)\( 等价,二者可以相互线性表示,即 \)\(e^k\)\( 是 \)\(f^1,f^2,...,f^k\)\( 的线性组合,有 \)\(e^k=\beta_1^kf^1+\beta_2^kf^2+...+\beta_k^kf^k\)\(,因此对应于原矩阵 \)\(F*{K\times K}\)\( 的过渡矩阵\)\(S*{K\times K}\)$ 为一个上三角矩阵,形如:
$$\(S_{K\times K}=\begin{vmatrix}\beta_1^1& \beta_1^2& \dots&\beta_1^K\\ 0 & \beta_2^2&\dots&\beta_2^K\\ \vdots &\vdots &\ddots&\vdots\\0 &0&\dots&\beta_K^K\\\end{vmatrix}(17)\)$$
其中 $\(\beta_k^k=\frac{1}{||\tilde{f}^k||}>0\)$。基于公式(17),施密特正交选取的任意正交矩阵为:
$$\(C_{K\times K}=U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'S_{K\times K}(1)\)$$
施密特正交是一种顺序正交方法,因此需要确定因子正交的顺序,常见的正交顺序有固定顺序(不同截面上取同样的正交次序),以及动态顺序(在每个截面上根据一定规则确定其正交次序)。施密特正交法的优点是按同样顺序正交的因子有显式的对应关系,但是正交顺序没有统一的选择标准,正交后的表现可能受到正交顺序标准和窗口期参数的影响。
# 施密特正交化 from sympy.matrices import Matrix, GramSchmidtSchmidt = GramSchmidt(f.apply(lambda x: Matrix(x),axis=0),orthonormal=True)f_Schmidt = pd.DataFrame(index=f.index,columns=f.columns)for i in range(3): f_Schmidt.iloc[:,i]=np.array(Schmidt[i])res = f_Schmidt.astype(float)
选取正交矩阵 $\(C_{K\times K}=U_{K\times K}\)$,则过渡矩阵为:
$$\(S_{K\times K}=U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'U_{K\times K}=U_{K\times K}D_{K\times K}^{-1/2}(2)\)$$
其中 $\(U*{K\times K}\)\( 为特征向量矩阵,用于对因子旋转,\)\(D*{K\times K}^{-1/2}\)$ 为对角矩阵,用于对旋转后因子的缩放。此处的旋转与不做降维的 PCA 一致。
# 规范正交 def Canonical(self): overlapping_matrix = (time_tag_data.shape[1] - 1) * np.cov(time_tag_data.astype(float)) # 获取特征值和特征向量 eigenvalue, eigenvector = np.linalg.eig(overlapping_matrix) # 转换为 np 中的矩阵 eigenvector = np.mat(eigenvector) transition_matrix = np.dot(eigenvector, np.mat(np.diag(eigenvalue ** (-0.5)))) orthogonalization = np.dot(time_tag_data.T.values, transition_matrix) orthogonalization_df = pd.DataFrame(orthogonalization.T,index = pd.MultiIndex.from_product([time_tag_data.index, [time_tag]]),columns=time_tag_data.columns) self.factor_orthogonalization_data = self.factor_orthogonalization_data.append(orthogonalization_df)
施密特正交由于在过去若干个截面上都取同样的因子正交顺序,因此正交后的因子和原始因子有显式的对应关系,而规范正交在每个截面上选取的主成分方向可能不一致,导致正交前后的因子没有稳定的对应关系。由此可见,正交后组合的效果,很大一部分取决于正交前后因子是否有稳定的对应关系。
对称正交尽可能的减少对原始因子矩阵的修改而得到一组正交基。这样能够最大程度地保持正交后因子和原因子的相似性。并且避免像施密特正交法中偏向正交顺序中靠前的因子。
选取正交矩阵 $\(C_{K\times K}=I_{K\times K}\)$,则过渡矩阵为:
$$\(S_{K\times K}=U_{K\times K}D_{K\times K}^{-1/2}U_{K\times K}'(1)\)$$
对称正交的性质:
与施密特正交相比,对称正交不需要提供正交次序,对每个因子是平等看待的
在所有正交过渡矩阵中,对称正交后的矩阵和原始矩阵的相似性最大,即正交前后矩阵的距离最小。
# 对称正交 def Symmetry(factors): col_name = factors.columns D, U = np.linalg.eig(np.dot(factors.T, factors)) U = np.mat(U) d = np.diag(D**(-0.5)) S = U*d*U.T #F_hat = np.dot(factors, S) F_hat = np.mat(factors)*S factors_orthogonal = pd.DataFrame(F_hat, columns=col_name, index=factors.index) return factors_orthogonalres = Symmetry(f)
Lucida (https://www.lucida.fund/ )是行业领先的量化对冲基金,在 2018 年 4 月进入 Crypto 市场,主要交易 CTA / 统计套利 / 期权波动率套利等策略,现管理规模 3000 万美元。
Falcon (https://falcon.lucida.fund /)是新一代的 Web3 投资基础设施,它基于多因子模型,帮助用户“选”、“买”、“管”、“卖”加密资产。Falcon 在 2022 年 6 月由 Lucida 所孵化。
更多内容可访问 https://linktr.ee/lucida_and_falcon
From Tech Breakthroughs to Market Boom: Understanding the Link in the Crypto Bull Market
Development as the Driving Force: Understanding the Impact on Token Price Performance?
5 Million Rows of Data Recap: Investigating The Crypto Market’s 3-Year Bull Run @LUCIDA
LUCIDA × SnapFingers DAO:21 top public chains in three-year bull market recap
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。