Signal Weighting---基於因子IC的因子權重優化模型
作者:阿毛醬 原文鏈接:基於因子IC的多因子模型
導讀
本帖主要介紹了因子IC的三種計算方法,並提出了基於因子IC的因子權重優化模型,以策略的方式對比了因子權重優化前後的結果,最後簡單介紹了協方差陣優化的方法。
一.前言
多因子模型是一種常用的選股模型,其構建方法一般分為回歸法和打分法兩類。
打分法是指選用若干能夠對股票收益產生預測作用的因子,之後根據股票的每個因子值在截面上的相對位置給出股票在該因子上的得分,然後按照一定的權重將每個股票的各個因子得分相加從而得到該股票的最終得分並按照該得分對股票進行排序,篩選,構造投資組合。
在打分法的模型構建中,各因子上的權重比例設定非常關鍵,若干好的因子在不好的權重配置下很可能會有不好的結果。
因子A得分與下期收益率的相關係數為:0.336665708171
因子B得分與下期收益率的相關係數為:0.596694189719
若按分組收益來看,因子A得分較高的兩隻股票(a,c)相對得分較低的兩隻股票(b,d)有0.003的超額收益,因子B得分較高的b,c相對得分較低的a,d有0.001的超額收益。A與B均有很好的收益預測能力,然而若是以因子A,B得分的平均分作為股票的最終得分,則最終得分最高的是股票c,收益為0.008,低於四只股票的平均收益0.00825下面我們介紹一種基於因子IC的因子模型。
二.因子IC及優化模型
1.因子IC
我們首先要介紹一下因子IC(Information Coefficient)是什麼.
定義可以參考:Information Coefficient
簡單來說,因子在某一期的IC指的是該期因子對股票的下期收益的預測值和股票下期的實際回報值在橫截面上的相關係數,即:
其中,I代表因子A在該期的IC值,為該期因子A對股票下期收益率的預測向量,為股票下期實際收益率向量
那麼,問題就來了,因子對股票下期收益率的預測是怎麼算的呢?最先在腦海里浮現的就是用回歸的方法來做預測嘛,不過這個預測選取的模型不一樣,豈不是結果就不一樣了。查找了下資料,發現有一種叫做原始IC或者傳統IC的計算方法:
傳統IC值
直接用該期因子的值,和股票下期收益率算相關係數,就是因子IC值,即把上面的換為該期因子值向量這樣也很好理解,直接反映了因子的預測能力.IC越高,就表明該因子在該期對股票收益的預測能力越強。下面舉個例子算一下:計算滬深300成分股在20160809這一天因子PE的IC值(點擊查看原文代碼)算出結果:0.16342978257315913
定義IC值
接著按照定義的方式來計算一下IC的值,也就是用該期的股票收益率對上期因子值作回歸,並用該期因子值預測下期股票收益率,取下期預測的收益率和下期實際收益率的相關係數
還是用上面的例子來計算得到如下結果:
0.0038627161210470847
安信證券研報中的IC值
下面是研報里對因子IC的計算方法:
1.對因子進行標準化,去極值處理(橫截面上,可通過優礦中的去極值(winsorize)、中性化(neutralize)、標準化(standardize)函數實現,詳情點擊查看);
2.調整行業和市值影響:因子在大小盤,不同行業的股票上的值會有明顯的差異,比如市盈率因子較低的股票會集中於銀行等板塊.調整的方法就是,把每個因子對市值和行業啞變數做回歸,取殘差作為因子的一個替代;
3.殘差正交化調整:因子間存在較強同質性時,使用施密特正交化方法對上一步得到的殘差做正交化處理,用得到的正交化殘差作為因子對股票收益率的一個預測。
- 前兩步在優礦上可以通過standardize,neutralize,winsorize方便地實現,具體請參考破解Alpha對沖策略
我們只需要在有多個因子時,多作第三步即可
不妨先看看一個因子時的IC值,還是用上面的例子,計算滬深300成分股在20160809這一天因子PE的IC值:0.055529034273016011
因子PE的IC值為:0.055529034273
因子PB的IC值為:0.112320911221以上給出了三種方法來計算因子IC,我們可以根據自己使用因子的方法來選取或設計可行的辦法來計算因子IC
本帖主要重於講述方法和過程,不妨以第三種IC的計算方法為例進行下面的闡述:
2.優化模型
因子的IR(信息比)值為因子IC的均值和因子IC的標準差的比值,IR值越高越好
假設有M個因子,其IC的均值向量為=,IC的協方差矩陣為:Σ,如果各因子權重向量為=,則複合因子的IR值為(今天知乎抽風了,圖片貼不了。到原帖查看):
我們的目標就是要最大化複合因子的IR,一方面,我們可以通過python的優化函數求解,另一方面,我們可以直接求出一個解析解。求導以後,可以得到以上最值問題的解,因子的最優權重向量為(同上):
- 其中δ為任意正數,可以用來調整最後的權重之和為1
- 同樣地,我們舉例子來計算一下,考慮到基本面因子其實變化並沒有那麼快,而技術類因子周期又不能太長,不妨以周度數據為研究對象:
- 這裡需要注意IC的定義以避免未來函數,當期的IC的計算其實是用到了下期的收益數據,所以使用的時候,其實是要再往前推一期才不會用到未來數據.
- 下面按照前面的優化模型來計算當期因子最優的權重配比,這裡又會出現一個參數,就是選取前幾期的因子IC值比較準確.我暫時選取前8期的值來計算,感興趣的可以自己改這個參數進行計算,這裡已經考慮了避免未來函數的因素,也就是說,get_bestweight函數得到的是根據當前日期及之前的數據得到的最優的權重
- 對於因子權重而言,就不考慮權重大於0以及和為1了,因為有些因子的作用是反向的,權重是負的也是有道理的
array([ 17.04617511, 1.19458058, 6.58977061, 3.80548645])
為了寫策略方便,我們不妨把研究時間內的權重都算出來,以後可以直接在這個dataframe里調用即可(點擊查看)
下面我們試一下基於因子IC的多因子模型是否一直有效,選取的因子和處理方法還有很多細節值得優化,所以結果不見得太好還請各位大大們多提意見。
三.基於因子IC的四因子模型
- 研究時間範圍:20160128-20160815
- 股票仍然是滬深300成分股
- 每周第一個交易日調倉
1.因子等權重求和
選股邏輯就是按照上一個周最後一個交易日的四個因子數據,按照等權重對因子值加權求和,選出得分最高的30隻股票(回測結果如下)
2.因子權重優化選股邏輯就是按照上一個周最後一個交易日的四個因子數據,按照我們計算出的上個周最後一個交易日的因子權重加權求和,選出得分最高的30隻股票(回測結果如下)
可以看到,因子權重優化後的結果比原來好得多,某種程度上,因子權重也體現因子的影響到底是正向的還是負向的。
四.協方差陣的收縮估計
我們在計算因子間的協方差陣時,其實是使用的協方差陣的無偏估計--樣本協方差陣。那麼問題就來了,按照目前的節奏,優礦上有幾百個因子,我們的協方差陣就不一定可逆了。即便它是可逆的,樣本協方差陣的逆矩陣也不是協方差陣逆矩陣的無偏估計了,如下(同上):
其中M指因子個數,T指樣本期,即取前幾期的數據
基於以上問題,有人提出了一種壓縮估計得方法。它的基本思想使用一個方差小但偏差大的協方差矩陣估計量Φ^作為目標估計量,和樣本協方差矩陣做一個調和,犧牲部分偏差來獲得更穩健的估計量(同上):
參數λ通過最小化估計量的二次偏差得到,至於估計量Φ^的選擇上。有以下三種形式可供參考:- 單參數形式,可以表示為方差乘以一個單位矩陣
- CAPM單因子結構化模型估計
- 平均相關係數形式
推薦閱讀: