【多因子模型】Barra模型講解(1)
在文章開始之前,先幫原CMO集訓隊的T大數學系妹子的Team打個招募廣告:
我們是一個主要由在校學生組成的量化團隊,有著靠譜的IT團隊(清華CS碩士*2 + 電子系phd + 姚班少年),也有優秀的策略開發人員(所有成員均來自清華北大北航中科院 數學、物理、計算機、電子等相關專業,包括兩枚CMO金牌以及即將去Princeton MFin, Stanford ICME, Baruch MFE, Columbia MSFN, Cornell MFE, Chicago MSFN 等Top金工項目讀書的同學)。
目前我們有固定的Office場所進行活動,並已經基於wind的落地資料庫,獨立開發了一套類似worldquant websim的因子篩選、評測與策略回測平台,可以用於進行日內與日間的信號挖掘與策略研究。由於以在校學生居多,團隊有著不錯的交流和學習氛圍,會兼顧每一個新來的同學的具體情況予以指導,同時每周都會定期組織討論。如果你對該我們團隊感興趣,並具有以下技能之一,請將簡歷發送至郵箱:thualphamax@163.com,成為我們的一員,與眾大神一起學習進步,同時我們也會提供與市場行情相符的實習工資以及依據貢獻程度的最終策略分成。如果你是非北京的優秀同學,可以考慮暑期前往(我們將提供食宿)。1. 量化策略研究:對多因子、日內或是統計套利策略的研究感興趣並有著一定coding經驗與數學水平的同學2. Python語言工程師:具有一定coding能力,熟悉Python語言(Pandas/Numpy/sklearn等庫),可以長期參與系統編寫與維護的同學
3. 新聞輿情抓取與分析:熟悉網路爬蟲或是NLP的同學
Barra模型是MSCI公司開發的一個經典的金融風險控制模型,名聲遠播在全球有著大量的機構用戶。本專欄旨在傳播與講解量化知識,故而決定從今天起,通過幾篇文章陸續介紹Barra模型的構建的各步驟與相應的計算方法和細節,請大家持續關注~
本文作者:塗申昊(知乎ID:@感到不爽)
一、傳統框架下的模型介紹
說到金融學的投資組合模型,那麼不得不提就是馬科維茨的投資組合模型。從1952年誕生至今,馬老師的均值-方差基本就是金融學裡面神一般的模型了。至今應用十分廣泛,經久不衰,折磨了一代又一代的金融學子,讓無數童鞋掛在了高高的模型上。
馬老師的模型第一次將均值和方差來刻畫股票的收益和風險,基於馬老師的均值-方差模型,有了三種度量風險的方法,其實本質思想大同小異:
1.1 基本風險模型
即為馬科維茨組合方差。在馬科維茨的均值-方差理論中,投資組合的風險計算需要估計組合中每個資產的波動率及它們之間的相關係數。一般的,當組合中有N只股票的情況下,需要估計的波動率個數為N,而需要估計的相關係數的個數則為N*(N-1)/2。我們可以將所需要估計的參數總結到一個協方差矩陣V中。
問題在哪?很明顯,n*n維的協方差矩陣需要估計的參數太多;比如說A股市場,目前市場上超過3000隻股票,也就是需要顧及大約450,0000個參數。
怎麼辦?
1.2 減少估計次數的模型
令
其中p是股票之間的平均相關係數;雖然這樣只要估計各個股票自身收益率的協方差,但是模型忽略了類似行業或者具有相似屬性的股票之間的微妙聯繫。
既然結果又不精確了,怎麼辦?
1.3 歷史數據估計
用一段時間的歷史數據(比如說一年)來計算樣本協方差矩陣,這也是目前各種論文中的通用方法。
有什麼問題:
1.根據歷史數據的協方差來計算股票的投資比例,也就是用純粹的歷史數據來預測未來,不言而喻,結果肯定會產生一定偏差。
2.從目前的學術研究成果來看,馬科維茨投資組合模型的魯棒性非常差,協方差矩陣稍微有一點變化,股票投資組合的比例變化極大。
3.如果估計月度數據,用T個時期的樣本來估計一個N*N的協方差矩陣,並且要求
T>N(如果T<N,那麼會導致協方差矩陣奇異,無法求其逆矩陣)這就意味著,如果要估計滬深 300 指數成分月度收益率的協方差矩陣,將需要至少超過 25 年的歷史數據,這在應用中顯然不切實際。
既然基於馬科維茨的投資組合模型的協方差矩陣方法有著這樣那樣的問題,怎麼辦?
二、結構化多因子模型
接下來就要引入我們的主題了,結構化風險因子模型,也就是傳說中的多因子模型。本文主要參考的是barra的risk handbook和Qian(2007)的Quantitative Equity Portfolio Management Modern Techniques,以及國內各大券商的研報。
結構化風險因子模型利用一組共同因子和一個僅與該股票有關的特質因子解釋股票的收益率,並利用共同因子和特質因子的波動來解釋股票收益率的波動。結構化多因子風險模型的優勢在於,通過識別重要的因子,可以降低問題的規模,只要因子個數不變,即使股票組合的數量發生變化,處理問題的複雜度也不會發生變化。
結構化多因子風險模型首先對收益率進行簡單的線性分解,分解方程中包含四個組成部分:股票收益率、因子暴露、因子收益率和特質因子收益率。那麼,第j只股票的線性分解如下所示:
也可以寫成矩陣表達式:
其中,Rj表示第j只股票的收益率;Xj表示第j只股票在第k個因子上的暴露(也稱為因子載荷,本質上說白了就是該股票的所對應的因子值);Fj表示第j只股票第k個因子的因子收益率(即每單位因子暴露所承載的收益率);u表示第j只股票的特質因子收益率。(一般情況下,我們都用N代表股票數,K代表因子數)
我們定義因子暴露(因子值)是在時刻t的結果,那麼股票收益率、因子收益率和特質因子收益率均為t+1的結果。這就是一個很典型的,用因子當期值,來預測下一期因子收益率的問題了。
令投資組合的權重
現在我們假設每隻股票的特質因子收益率與共同因子收益率不相關,並且每隻股票的特質因子收益率也不相關(此假設後續模型一直能用到,非常關鍵)。那麼在上述表達式的基礎上,可以得到組合的風險結構為:
其中,X表示N只個股在K個風險因子上的因子載荷矩陣(N*K),F表示因子收益率的協方差矩陣(K*K),
delta表示因子的特異收益率方差矩陣(N*N的對角陣)。三、多因子模型里因子的形式
在有了多因子模型框架之後,就是尋找因子的問題了。通常情況下,影響股票收益率的因子通常可以分為三類:宏觀經濟因子、基本面因子、統計面因子
(1)宏觀經濟因子,宏觀經濟因子通常只可觀察的宏觀經濟序列數據,比如GDP、CPI、利率等。
但是宏觀經濟因子只有一個,股票卻有3000個,這無疑會帶來兩個問題。首先,每一隻股票的收益率都要和宏觀經濟因子做回歸,這非常麻煩。第二,宏觀經濟指標滯後性明顯,對股票收益率的預測效果並不顯著。(研報的觀點,個人覺得這個理論可以商榷)
(2)基本面因子,包括股票財務報表中的各種指標,以及各種K線指標也可以算作此類。
(3)統計面因子,個人理解,統計面因子主要是對因子做處理之後的新因子。比如說六個月動量,12個月之後的反轉,或者可以從股票收益率協方差裡面提取一些參數,作為統計面的因子。
一般而言,實際多因子模型中,用的最多的是基本面因子。
四、多因子模型的預處理流程
(1)去極值
目前去極值一般有三種方法:均值方差去極值、MAD方法去極值、分位數去極值、
1.均值方差去極值
求每一個因子的均值和方差,大於和小於的樣本值轉化為
和。2.MAD法去極值
MAD 法是針對均值標準差方法的改進,把均值和標準差替換成穩健統計量,樣本均值用樣本中位數代替,樣本標準差用樣本MAD代替:
通常把偏離中位數三倍MADe(如果樣本滿足正態分布,且數據量較大,可以證明)以上的數據作為異常值。和均值標準差方法比,中位數和MAD的計算不受極端異常值的影響,結果更加穩健。
3.分位數去極值
分位數去極值是一種經驗處理方法,假設Q1和Q3分別為數據從小到大排列的25%和 75%分位數,記IQR=Q3-Q1, 把區間
里的數據標識為異常點。
分位數是穩健統計量,因此分位數方法對極值不敏感,但如果樣本數據正偏嚴重,且右尾分布明顯偏厚時,分位數去極值方法會把過多的數據劃分為異常數據。
所以,有了改進的分位數去極值法:
定義:
然後定義了調整的上下限:
在區間
上的數據被定義成了異常值。(2)標準化
每個因子做完了去極值之後,就要消除各個因子之間的量綱影響,進行標準化。標準化的步驟通常都是zscore標準化法,非常基礎,沒什麼可說的。
(3)中性化
中性化的內容barra框架中並未提及,但是在A股市場中,各家研報都認為中性化仍然很有必要的。
首先:A股票行業輪動明顯,行業熱點之間切換迅速,量化模型也很難有效預測輪動規律;其次,A股的小市值個股佔比顯著高於國外市場小市值個股具有高波動率、高收益率的特性,為了降低投資組合的波動性和回撤,需要進行行業中性化和市值中性化處理。
個人認為,如果說要博取更大的投資收益,並承擔更高風險的話。市值中性化是可以不用去做的,因為A股市場最近十幾年以來,小市值因子至少有20倍以上的收益。並且到2016年,小市值因子的有效性也沒有消失。2017年初,小市值因子確實出現了失效的情況,但是未來會不會有效,這個就是玄學了。
不做市值中性化的話,完全可以建立一個市值輪動模型進行替代。行業中性化也是同理。但是如果想找到穩定的alpha因子,那麼市值中性化和行業中性化還是要做的。
行業中性化通常有兩種辦法:
1.簡單的標準化法
利用申萬行業指數,將各個行業內股票的因子進行標準化處理,即減均值除標準差。
2.回歸取殘差法
將因子值作為y,行業啞變數作為x,進行線性回歸,然後回歸模型的殘差即為行業中性化後的因子值。
市值中性化因為市值因子是連續的,所以採用的是回歸取殘差法,因子值作為y,市值作為x。
五、因子收益率向量的估計
因子找好之後,就進入了估計因子收益率的部分了。在barra的框架中,因子收益率通常是日數據。
利用第二部分的公式
因子暴露X已知,因子收益率R已知,所以針對每一天的截面數據進行回歸,X取當天的因子值,R取下一天因子的收益率。就可以估算出當天的因子收益率了。
當然,有個非常關鍵的問題,又扯到之前的假設上來了。
Barra模型認為,每隻股票的特質收益率u不相關,這個假設在計量經濟學的理論框架里,造成了一個非常明顯的問題,異方差性。
那麼怎麼估計因子收益率呢,只能用WLS方法了(加權最小二乘)。問題又來了,加權最小二乘的演算法中,權重怎麼取?通常的計量經濟學方法是取殘差平方的倒數,但是barra模型中,這個權重取了根號市值,這個問題是個玄學。
利用WLS方法,可以得到因子收益率的最終表達式:
其中W是加權最小二乘法的權矩陣。參考文獻:
- 國泰君安,數量化專題之五十七:基於組合權重優化的風格中性多因子選股策略
- 愛建證券,多因子系列之一:多因子模型梳理探索
- 華泰證券,多因子系列之一:華泰多因子模型體系初探
- 東方證券,選股因子數據的異常值處理和正態轉換——《金工磨刀石系列之二》
- Barra,USE4
- Qian, Quantitative Equity Portfolio Management, modern techniques andapplications
推薦閱讀:
※交易隨筆(十):寫在新年首個交易日的廢話(附背馳區間套應用一例)
※舊財富評選~
※金融計量、金融工程和計量經濟學有什麼不同?