用多因子模型構建強大的加密資產投資組合#大類因子分析:因子正交化篇#

書接上回,關於《用多因子模型構建強大的加密資產投資組合》系列文章中,我們已經發布了四篇:《理論基礎篇》《數據預處理篇》《因子有效性檢驗篇》《大類因子分析:因子合成篇》

在上一篇中,我們具體解釋了因子共線性(因子之間相關性較高)的問題,在進行大類因子合成前,需要進行因子正交化來消除共線性。

通過因子正交化,重新調整原始因子的方向,使他們相互正交($$[\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種正交方法

1.3.1 施密特正交

故,$$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}$$

1.3.2 規範正交

故,$$S_{K\times K}=U_{K\times K}D_{K\times K}^{-1/2}$$ ,$$C_{K\times K}= U_{K\times K}$$

1.3.3 對稱正交

故,$$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}$$

二、三種正交方法的具體實現

1.施密特正交

有一組線性無關的因子列向量 $$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, GramSchmidt
Schmidt = 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)

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}'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)

3.對稱正交

施密特正交由於在過去若干個截面上都取同樣的因子正交順序,因此正交後的因子和原始因子有顯式的對應關係,而規範正交在每個截面上選取的主成分方向可能不一致,導致正交前後的因子沒有穩定的對應關係。由此可見,正交後組合的效果,很大一部分取決於正交前後因子是否有穩定的對應關係。

對稱正交儘可能的減少對原始因子矩陣的修改而得到一組正交基。這樣能夠最大程度地保持正交後因子和原因子的相似性。並且避免像施密特正交法中偏向正交順序中靠前的因子。

選取正交矩陣 $$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) $$$

對稱正交的性質:

  1. 與施密特正交相比,對稱正交不需要提供正交次序,對每個因子是平等看待的

  2. 在所有正交過渡矩陣中,對稱正交後的矩陣和原始矩陣的相似性最大,即正交前後矩陣的距離最小。

# 對稱正交
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_orthogonal
res = Symmetry(f)

關於LUCIDA & FALCON

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

往期文章

Mirror
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論