多因子模型的步驟梳理(以打分法為例)
https://www.ricequant.com/community/topic/4584/
在量化交易中,多因子策略是一種常被提及且應用廣泛的選股策略。我們會經常使用某種指標或者多種指標來對股票池進行篩選,這些用於選股的指標一般被稱為因子。顧名思義,多因子模型是指使用多個因子,綜合考量各因素而建立的選股模型,其假設股票收益率能被一組共同因子和個股特異因素所解釋。
多因子模型的優點在於,它能通過有限共同因子來有效地篩選數量龐大的個股,在大幅度降低問題難度的同時,也通過合理預測做出了判斷。本篇將對如何構建多因子模型做詳細介紹,同時在各步驟附上相關帖~
圖1:多因子模型流程
一、資料預處理
在構建多因子模型之前,我們首先要準備好待檢驗的原始因子池以及它們的資料,並根據要求對它們進行初步的整理。
1.1 基礎資料採集
作為建立模型最開始的第一步,確保使用資料的全面性和合理性是很重要的。我們首先需要歸納出不同風格的因子種類,再在各個風格大類下細分相關因子,並綜合經濟含義以及相關引數來確定因子的計算方法。
風格因子是指該種類因子具有一種獨特的總體表現,根據Barra的定義可以分為9類,分別是Beta,動量,規模,盈利性,波動性,成長性,價值,槓桿率和流動性。每個大類因子裡面還有細分的因子。除此之外,還有各種被探索出來的新因子,以期能更好的分析不同市場時期所展示的特徵表現。
在我們平臺可以通過get_fundamentals拿到股票的財務資料,目前的提供的財務資料可以在財務資料文件中找到相應欄位。我們的財務資料來源於國內最好的金融資料供應商之一的恆生聚源,從而極好地保證了策略輸出結果的準確性。
表1:部分初始因子池示例
大類因子 | 因子簡稱 | 因子解釋 |
估值因子 | pe_ratio | 市盈率 |
pb_ratio | 市淨率 | |
pcf_ratio | 市現率 | |
ps_ratio | 市銷率 | |
peg_ratio | 市盈率相對盈利增長率 | |
EBIT/EV | 息稅前利潤/企業價值 | |
波動率因子 | idio_vol_FF | 基於Fama的特質波動率 |
idio_vol_CAPM | 基於CAPM的特質波動率 | |
idio_vol_Carhart | 基於Carhart的特質波動率 | |
downside_idio_vol_FF | 基於Fama的特質下行波動率 | |
槓桿因子 | debt_to_equity_ratio | 負債權益比 |
debt_to_asset_ratio | 資產負債比 | |
tangible_asset_to_debt | 有形資產負債比 | |
current_ratio | 現金比率 | |
quick_ratio | 流動比率 |
1.2 離群值處理
對資料進行標準化之前,我們需要先對離群值進行處理。因為過大或過小的資料可能會影響到分析結果,尤其是在做迴歸的時候,離群值會嚴重影響因子和收益率之間的相關性估計結果。
離群值的處理方法是將其調整至上下限,其中上下限由離群值判斷的標準給出。離群值的判斷標準有三種,分別為 MAD、 3σ、百分位法,主要思路是先界定上下限,再將超過界限的離群值調整至上下限。比較常用的是MAD法。
1.3 資料標準化
即使同屬於一種風格因子,各個細分因子間的量級和單位也可能會有很大的差別。為了更好地對因子們進行比較和迴歸,我們需要對因子進行標準化處理。
標準化(standardization)在統計學中有一系列含義,一般使用z-score的方法。處理後的資料從有量綱轉化為無量綱,從而使得資料更加集中,或者使得不同的指標能夠進行比較和迴歸。
對因子進行標準化處理的方法主要有以下兩種:
1、對原始因子值進行標準化;
2、用因子的排序值進行標準化。
實際上方法一更加常用,因為可以保留更多的因子分佈資訊,但是需要去掉極端值,否則會影響到迴歸結果。迴歸的方法一般使用z-score,將因子值的均值調整為0,標準差調整為1。
圖2:標準化處理後因子分佈圖
二、單因子檢驗
我們在最開始採集資料時所初步構建的因子池,在邏輯上與收益率是有著一定經濟意義上的聯絡,接下來我們需要對它們進行實證分析,篩選掉與收益率相關性不高的因子,從而得到真正有效的因子池。
2.1 特徵分析
首先,初步分析因子之間的相關性,判斷因子們的表現是否大致類似。
其次,用 pearson 或 spearman 方法計算因子的自相關係數,並觀察因子的衰退速率是否有顯著區別。
2.2 中性化處理
在使用這些因子進行選股時,有時會因為其它因子的影響,而導致選出來的股票具有一些我們不希望看到的偏向。比如說,市淨率會與市值有很高的相關性,這時如果我們使用未進行市值中性化的市淨率,選股的結果會比較集中。所以我們在使用這些因子之前,需要對它們是否對市值和行業有偏好進行檢驗和處理。
實際上中性化的含義不止對因子的中性化,詳細和下文相關程式碼可以見《資料預處理(下)之中性化》
2.2.1 市值分析
為了確定市值因子是否影響待分析因子的暴露度,我們將全市場股票的市值取對數後由小至大分成5組寬度相等的市值區間,構造待分析因子的市值分佈差異表。若因子暴露度表現出與市值有著明顯相關性,則使用因子時需要對其進行市值中性化處理。
除了暴露度的市值分析,我們也可以對因子的IC值進行市值分析,檢視在不同市值區間中因子的IC值是否有顯著變化。
2.2.2 行業分析
與市值分析類似,我們需要對因子暴露度和IC值做行業分析,並觀察其行業分佈結果。如果表現出明顯行業分佈差異,則使用該因子進行選股時,可以採取行業中性化處理。
圖3:行業、市值中性化處理對比圖
2.3 迴歸法分析
迴歸法是最常用於檢驗因子有效性的方法,具體來說它是將T期因子的暴露度與T+1的股票收益率進行迴歸,所得的迴歸係數即為T期的因子收益率。迴歸模型中包含行業啞變數,若因子在前面的行業分析中發現與行業有明顯相關性,則該模型能夠排除行業差異影響。模型具體如下:
在進行迴歸法分析中,我們需要對資料進一步處理。除了在對資料進行標準化及離群值處理,我們還需要對因子的缺失值進行填補,從而提升迴歸結果的可信度。同時,由於可能存在小盤股的影響以及迴歸的異方差性,我們採用加權最小二乘迴歸(WLS),權重為個股流通市值的平方根。
如果因為出現缺失值就將該個股刪除,可能會導致不同因子迴歸的股票池差距較大,或者導致股票池大大縮水。對於缺失值的填補比較常用的方法是設為0、均值、上下資料、插值法,和演算法擬合進行填充。
由此我們可以得到迴歸時間段中的因子收益率序列,以及相應的因子收益率t值序列。我們通過分析t值,能夠判斷出對應迴歸係數的顯著性,從而得出該因子是否的確對下期的股票收益率有解釋作用。
評價方法:
a. t值絕對值均值:判斷顯著性
b. 因子收益率大於0的佔比:判斷該因子對股票收益率的正向影響是否明顯
c. t值絕對值中大於2的佔比:判斷顯著性是否穩定
d. 因子收益率零假設的t值:判斷該因子的收益率序列是否顯著不為零。
此部分內容的具體程式碼和分析將在下次帖子更新~ 先開個坑~
2.4 IC法輔助分析
因子有效性是指因子是否可以獲得持續、穩定的alpha收益。本部分主要使用IC分析及其衍生的指標對因子的有效性進行評估。
IC(資訊係數)定義為每個時間截點上因子在各個股票的暴露度和股票下期收益的 pearson 或 spearman相關係數,IC值越高意味著該因子的暴露度與未來收益率存在較明顯的相關關係。
第一步,進行IC統計分析。
為了觀察各因子與收益率是否有明顯相關性,我們將比較IC值序列的均值大小(因子顯著性)、標準差(因子穩定性)、IR比率(因子有效性),以及累積曲線(隨時間變化效果是否穩定)這幾方面對因子進行定性評價。其中,IR(資訊比)是指殘差收益率的年化預測值與其年化波動率之比,這裡我們將之簡化定義為因子在測試期間內IC的均值與IC的標準差的比值。
第二步,進行IC特徵分析。
由於市場風格是會輪動的,IC值可能會切換正負號,所以在選擇因子時會計算相關係數的正負比例,並選擇比例高的方向。 作為假如同向顯著比例佔上風,則意味著該段時間內因子的風格延續性較強,可以使用動態權重來調整因子的權重;若狀態切換比例佔上風,對於因子的賦權應該使用靜態權重。
衡量因子方向的指標一般有正相關顯著比例、負相關顯著比例、同向比例和狀態切換比例。
第三步,IC時間序列分析
通過使用移動平均線,對各因子在一定時間內的趨勢進行橫向比較,同時參考當時的重大市場行情變化。
2.5 分層回測
按照因子大小對股票排序,將股票池均分為N個組合,或者對每個行業內進行均分。個股權重一般選擇等權,行業間權重一般與基準(例如滬深300)的行業配比相同,此時的組合為行業中性。
通過分組累計收益圖,就可以簡單的知道因子是否和收益率有著單調遞增或遞減的關係。回測結果有很多評價標準,例如年化收益率、夏普比率、資訊比率、最大回撤等。
三、大類因子合成
在經過前面的分析之後,我們已經篩選出與收益率有著顯著關係的因子池。然而此時的因子們仍然是由我們主觀定義的,它們互相之間可能存在著很強的相關性。如果不作處理,投資組合將在同種因子上暴露過多的風險,並且多重共線性會造成多元線性迴歸的結果偏差。
3.1 細分因子間相關性分析
因子相關性可由 pearson 和 spearman方法計算得出。除了普通的相關性分析之外,因子的IC值整體變化方向的表現對相關性也具有一定的說明性。
3.2 同種因子下的細分因子合成
提取細分因子的有效資訊,並進行合成的方式主要三種:等權細分因子、利用PCA對高相關性因子進行降維、利用逐步迴歸篩選細分因子。不同的因子適合不同的合成方法,一般而言PCA適用於具有較強相關性的細分因子,但所得合成因子的經濟意義可能不明顯。
3.3 合成因子間相關性檢驗
在得到合成的大類因子之後,需要對它們進行相關性檢驗。由於此時的因子之間不再具有相似經濟含義,如果出現明顯相關性,則考慮對合成因子進行取捨,從而保證多因子模型不僅是經濟含義方面或收益效果都能達到最優。
四、構造模型
經過一系列的篩選和分析後,現在已經得到最終的因子集。本篇在此部分以打分法為例,迴歸法的步驟將在之後的文章更新。在打分法中,我們將賦予各因子權重,以期符合選股預期或經濟邏輯。此部分可參考《多因子權重優化方法比較》。
4.1 確定因子權重
確定權重的方法有四種:
a. 各因子等權處理。缺點是未考慮各因子的有效性和穩定性差異。
b. 因子IC均值加權。此方法考慮到了因子有效性的差異,將在表現更顯著的因子上分配更好的權重。
c. IR_IC法加權。此方法根據收益-風險這一基本準則,綜合考慮到了因子有效性和穩定性。
d. 最大化複合因子IR。通過最大化多因子模型的IR來獲得各因子的最優權重,並利用求解構造最佳多因子模型。此處可使用普通的協方差矩陣或者Ledoit-Wolf壓縮方法得到協方差矩陣。
通常而言,方法四即使用壓縮矩陣最大化複合IR的權重配置方式的選股結果表現最佳。
4.2 個股打分並篩選
在最開始的資料預處理中,已將各因子暴露度標準化,故可以通過權重算出個股的分值。根據打分後的結果,通常是按照一個比例(例如前30%),或者一個分值門檻作為篩選標準,買入評分高的股票。
此時可以通過簡單的分配權重完成多因子模型構建,個股間的權重分配一般是等權,或者是按照市值大小進行加權得出。
五、組合優化
我們已經得到了打分法會使用到的基礎資料,但這樣很可能會出現我們不希望的情況,例如風險過多暴露在某一行業,所以需要對模型進行優化。
5.1 新增約束條件
如果單純地採取等權買入,風險可能會過多地暴露在某一不被希望的方面。常見的約束條件如下:
a. 行業權重約束
b. 因子暴露約束
c. 個股上下限
d. 收益目標
e. 風險目標
其中最後兩項一般用於迴歸法的多因子模型構建中。
5.2 二次規劃求解權重
一般二次規劃問題可以表示成如下形式:
其中:
H:需要求解的目標向量
Q:為最優化問題的二次項係數的對稱半正定矩陣
c:為與線性目標方程有關的係數向量
A:為約束等式與非等式的係數矩陣
b:為約束值的向量矩陣
二次與線性最優化的問題都可以通過一般二次規劃最優化程式來解決。對於線性最優化問題,只要令Q = 0,則問題變成一個線性規劃問題。
由此,我們已經得到了新增各種約束後的個股權重,可以由此建立相應的多因子模型。
結語:
通過上文的五個步驟,我們建立了以打分法實現的多因子模型,而實際上大部分的工作量主要集中於確定有效因子這一步。多因子策略也可以配合賣空對應的股指期貨進行套保。
我們有多種指標來衡量多因子模型的績效結果,例如2.5中提到的最大回撤等。在我們米筐平臺中提供了績效分析入口,其展現了Brinson分析、風格分析、淨值迴歸以及績效指標的結果。我們可以通過此報告進一步分析模型的結果和表現,進行業績歸因。
注意,多因子模型的構建與測試時間有關,如其他模型一樣,此模型需要定期進行驗證檢查,以達到理想效果。
參考文獻:
《東方證券_20150909_因子選股系列研究之二:低特質波動,高超額收益》
《華泰單因子測試之波動率類因子》
《東方證券_20150626_因子選股系列研究之一:單因子有效性檢驗》
《華泰多因子系列之一:華泰多因子模型體系初探》