風險中性的深度學習選股策略


一、數據驅動型機器學習模型的問題

目前流行的機器學習方法,包括深度學習,大部分是數據驅動的方法,通過對訓練集數據學習來提取知識。數據驅動型機器學習方法應用成功的前提是:從訓練集數據中學習到的“知識”在樣本外外推時依然適用。

當機器學習方法應用於投資領域時,一般是以歷史數據作為訓練集數據來訓練模型,應用在未來的市場中。在深度學習多因子選股策略中,也是通過對歷史股票行情數據的學習,來建立預測模型。此類機器學習方法在投資領域的應用是否會成功,取決於從歷史數據中學習到的模型在未來的外推中是否有效。

然而在股票市場,一方面由於市場參與者眾多,充滿大量的影響股市的因素和噪聲;另一方面,市場存在着風格切換和行業輪動。因此,可能會使得訓練機器學習模型的歷史場景和應用機器學習模型進行預測的“未來”場景存在顯著差異,使得在樣本內表現優異的機器學習模型在樣本外表現一般。

例如,如果用於訓練模型的股票樣本來自於小市值風格的市場,那么訓練出來的模型在小市值市場中的預測能力更佳,而且會“認為”小市值是股票產生超額收益的重要原因。一旦市場風格切換到大市值,小市值風格下訓練出來的模型就可能失效。

為了解決這個問題,本篇報告嘗試對股票樣本進行風險中性化,減小風險因子輪動和行業輪動對模型訓練和預測的影響。需要指出的是,本報告所提到的“風險中性”是指機器學習模型層面的風險中性化,與多因子選股中通過組合優化方法減小組合風險暴露不同。

本報告首先回顧了深度學習多因子選股模型的模型結構和相關參數設置,然后介紹了對股票樣本進行風險中性的方法,最后通過實證分析證實了所提出的方法的有效性。從結果來看,本報告提出的策略能夠獲得更好的市場表現。

二、深度學習預測模型

(一)深度學習模型結構

在本報告的深度學習選股模型中,我們采用7層深層神經網絡系統建立股票價格預測模型。其中包含輸入層X,輸出層Y,和隱含層H1、H2、H3、……、H5。各層的節點數如下表所示。該深度學習模型的結構是通過網格搜索優化出來的模型結構(參考報告《深度學習系列之三:深度學習新進展,Alpha因子的再挖掘》)。

其中,X是輸入層,其節點數為156個,表示股票樣本的156個特征,包括傳統的選股因子(如估值因子、規模因子、反轉因子、流動性因子、波動性因子),價量技術指標(如MACD、KDJ等指標),以及28個表示申萬一級行業屬性的0-1變量。

Y是輸出層,共3個節點,表示股票未來走勢的三種可能性:上漲(有超額收益)、平盤(無超額收益)、下跌(負的超額收益)。本報告中,用3維的向量表示3種不同的輸出類別。y=[1 0 0]表示上漲樣本,y=[0 1 0]表示平盤樣本,y=[0 0 1]表示下跌樣本。

深層神經網絡是對輸入X和輸出Y的關系進行擬合,建立對輸出Y的預測模型。其中,第1個隱含層的節點j為

第m個隱含層(m=2,3,4,5)的節點j為

輸出層的節點k為

其中,σ_h和σ_o分別表示隱含層激活函數和輸出層的激活函數,不同層的參數可以一並記為參數w,則神經網絡可以記成y=f(x;w),其中w為需要優化的參數。下圖展示了具有2個隱含層H1和H2的神經網絡系統。

萬能近似定理(Universal Approximation Theorem)證明神經網絡具有強大的擬合能力。在應用神經網絡進行預測前,需要采用大量的訓練樣本,通過優化的方法獲得網絡的參數w。具體來說,在深度學習中,通過訓練樣本數據(訓練集),對參數w進行優化,使得模型的預測輸出 y 盡可能地接近於樣本的真實標簽 t,即要使得如下的預測誤差(損失函數)最小化

該目標函數的優化問題稱之為最小化均方誤差。對於分類問題,也可以構建其他形式的目標函數,例如,交叉熵(Cross Entropy)損失函數更適合作為分類神經網絡模型優化的目標函數:

深度學習模型訓練時,一般采用誤差反向傳播的方式求取梯度,優化參數。

為了提高模型的泛化能力,本報告采用Dropout方法,每次參數迭代更新時隨機選擇丟棄不同的隱層節點,這驅使每個隱層節點去學習更加有用的、不依賴於其他節點的特征。同時,本報告采用Batch Normalization技術提高模型的訓練效率。關於Dropout和Batch Normalization的詳細內容,可以參考報告《深度學習系列之三:深度學習新進展,Alpha因子的再挖掘》。

(二)股票樣本標注

多因子選股中,我們希望挑選能夠產生超額收益的股票構建組合,跑贏基准。因而,深度學習預測模型的目標是找出能夠產生超額收益的股票。

相應的,為了構建深度學習模型,對於樣本區間的每一個交易日,根據未來一段時間(本報告為10個交易日)的股票漲跌幅來給不同的股票樣本貼“標簽”(即深度學習模型的輸出Y):“上漲”、“下跌”和“平盤”。其中,標記為上漲的股票是指產生超額收益的股票,即未來10個交易日漲幅最大的一部分股票(漲幅超過90%分位數的);標記為下跌的股票是有負的超額收益的股票,即未來10個交易日漲幅最小的一部分股票(漲幅低於10%分位數的);標記為平盤的股票是指未來10個交易日漲幅處於中間位置的股票(漲幅位於45%分位數到55%分位數之間的)。如下圖所示。這樣使得三類樣本的樣本數量相等,更有利於訓練分類模型。

對股票樣本進行標注和篩選之后,就可以訓練深度學習預測模型。在選股時,按照上漲打分,即預測該股票屬於“上漲”類別的概率 p("上漲"|x) ,進行選股。也就是尋找未來10個交易日漲幅處於前10%位置的概率較大的股票。

這樣進行樣本標注的問題是:股票的標簽容易受到市場風格輪動和行業輪動的影響。在小市值風格下,“上漲”類的股票大部分是小盤股,“下跌”類的股票大部分是大盤股。如果股票樣本大部分來自小市值風格的市場,那么模型會傾向於將市值作為一個重要的特征,而且會傾向於把小市值的股票分類到“上漲”類別中。一旦市場風格切換到大市值風格,該模型就有比較大的失效風險。同樣的,如果當前的行業板塊中,某板塊表現強勢,那么該行業板塊的成份股也更有可能被標注為“上漲”類別,對分類模型來說,容易造成行業偏離。

(三)風險中性的股票樣本標注

為了使得樣本的標注(也就是選股的目標)不容易受到風險因子的影響,可以對樣本標注過程進行風險中性化。

如果需要找出在每個行業內能夠產生超額收益的股票,可以先將全市場的股票按照不同行業進行划分,分別在同一時間截面對不同行業內的股票進行收益率排序,選出每個行業“跑贏”和“跑輸”的股票,如下圖所示。這種樣本標注方法的目標是尋找每個行業內能夠產生超額收益的股票,因而股票樣本的標簽Y不會受到行業輪動的影響。因此,可以將這種方法稱為“行業中性”的樣本標注方法。

大小盤風格輪動是A股中非常顯著的風格切換現象。如果希望尋找不易受到大小盤切換影響的能夠產生超額收益的股票,可以將全市場股票按照不同市值區間進行划分,在不同市值區間內尋找產生超額收益的股票,也就是分別在同一時間截面對不同市值區間內的股票進行收益率排序,選出每個市值區間“跑贏”和“跑輸”的股票,如下圖所示。這種樣本標注方法下,股票樣本的標簽Y不容易受到大小盤風格切換的影響。因此,可以將這種方法稱為“市值風格中性”的樣本標注方法。

以上是針對單一風險因子進行中性化的做法。更一般的情況下,我們需要同時考慮多個風險因子。假設考慮K個風險因子,可以通過回歸的方法對風險因子進行剝離:

其中,r 是股票在隨后一期的收益率,X 表示股票在 K 個風險因子上的因子暴露值。對t時刻的市場股票進行截面回歸,可以獲得 K 個風險因子的收益率 f ,以及剝離風險因子之后的股票收益率 ϵ,即回歸殘差。

然后按照殘差 ϵ 在同一時間截面 t 進行排序,將股票標記為“上漲”、“下跌”和“平盤”三類。預測模型的目標不再是尋找未來一期收益率在前10%的股票,而是剝離風險因子收益之后,收益率在前10%的股票。

本報告中,我們采用行業和流通市值作為風險因子進行風險中性處理。

三、策略與實證分析

(一)深度學習預測模型

深度學習多因子選股交易策略的流程如下圖所示。在模型訓練和選股交易時,都需要先對市場數據進行預處理。在模型訓練階段,需要把歷史市場數據標准化成為適合深度學習模型的特征數據;在選股交易階段,從當前市場的數據中計算每個股票的特征數據,並且進行數據的標准化,通過訓練好的深度學習模型,對每個股票的未來走勢進行預測打分,然后根據每個股票的打分進行分檔選股,構建組合。

數據預處理分成兩步:股票因子的計算和股票因子的標准化。

首先,我們從Wind、天軟科技等金融數據終端提取市場數據,計算股票因子作為機器學習模型的特征。本報告中,我們選擇了156個特征,包括傳統的選股因子(如估值因子、規模因子、反轉因子、流動性因子、波動性因子),價量技術指標(如MACD、KDJ等指標),以及28個表示申萬一級行業屬性的0-1變量。

因子標准化過程分成如下幾個環節:

1、異常值、缺失值處理

對股票因子數據中的異常值和缺失值進行處理。例如,當股票某一期的因子值缺失或者數據有異常時,用上一期的因子值進行替代。

2、極值壓邊界處理

當股票的因子數據顯著偏離同期該行業股票因子數據時,可以設置邊界閾值進行極值處理。例如,我們可以令上邊界ub為同期該行業內股票因子值的均值加上3倍標准差;下邊界lb等於同期該行業內股票因子值的均值減去3倍標准差。當股票因子值超出上邊界,即當x>ub時,令x=ub;當股票因子值超出下邊界,即當x<lb時,令x=lb。這樣,可以使得所有的因子數據位於下邊界 lb 和上邊界 ub之間。

3、沿時間方向的因子標准化

沿時間方向的因子標准化使得不同時段的因子值可比。例如,2015年市場的成交量和當前市場有顯著的區別,成交量相關的選股指標也與當前市場有較大的差異。可以對成交量相關的選股因子按照此前一段時間的成交量均值進行標准化處理,使得不同時期的因子值具有可比性。沿時間方向因子標准化的好處是使得我們用歷史數據訓練出的模型可以用來對未來的市場進行預測。

4、沿截面的因子標准化

沿截面方向的因子標准化使得不同特征的值可比,例如流通市值和換手率的數據相差很大,通過因子標准化,可以使得標准化之后的流通市值和換手率可比。因子標准化的方法有z-score標准化、min-max標准化、排序標准化等。

假設在時刻 t,某股票 k 的因子 i 的值為x(t,k)^i。z-score標准化把變量處理成均值為0,方差為1:

Min-Max標准化把變量處理成0到1之間的數:

排序標准化是根據股票在因子i 的值進行排序,按照序號對應到0到1之間。因子值最小的標准化為0,因子值最大的標准化為1,其他按序號標准化為小於1且大於0的數。

5、按照機器學習模型來調整因子分布

不同的機器學習模型對輸入數據的假設有差別,需要根據模型的假設來調整因子分布。深層神經網絡一般對輸入數據的假設不強,可以同時容納連續型的輸入數據和離散型的輸入數據(如行業的0、1啞變量)。如果采用自編碼器或者受限玻爾茲曼機,需要注意模型對輸入數據的分布假設。

在選股交易階段,將因子數據預處理之后,我們可以直接把處理好的因子數據輸入深度學習預測模型,給出預測打分。但在模型訓練階段,為了訓練好深度學習預測模型,我們需要對不同的股票樣本添加“標簽”,並且進行訓練樣本的篩選。

在樣本標注和樣本篩選環節,我們按照上節所示的方法將股票樣本對風險因子進行截面回歸,剝離風險因子的影響,然后進行樣本的標注和模型學習。

在樣本外,我們可以對每只股票進行預測打分。根據股票的上漲打分,篩選前10%的股票構建組合。

與隱含層采用ReLU激活函數不同,輸出層采用softmax激活函數。在預測時,輸出層softmax激活函數的輸入向量為z=[z1 z2 z3],則經過softmax函數后,預測值為

其中,y1,y2,y3 都是大於0且小於1的數,而且之和等於1。第一個輸出節點的預測值是我們對股票的上漲預測打分,即預測該股票屬於“上漲”類別的概率。

本報告中,我們采用全市場股票來訓練深度學習模型,剔除上市交易時間不滿一年的股票,剔除ST股票,剔除交易日停牌和漲停、跌停的股票。

用於預測的是未來10個交易日的收益率。對於風險中性的深度學習模型,先用行業和市值因子進行截面回歸,剝離風險因子影響,然后建立模型。

樣本期為自2007年1月至2018年4月。模型按照每半年更新一次,每次訓練采用最近4年的市場數據來訓練模型。樣本外數據從2011年1月開始(2007年至2010年的數據用於訓練第一個深度學習預測模型)。

(二)風險中性的作用

本報告中,我們對模型進行滾動更新,每半年重新訓練一次模型。每次訓練時采用最近4年的數據進行模型的訓練。

將股票打分與未來10個交易日的收益率求截面的秩相關系數,計算IC,如下圖所示。IC的平均值為0.082,標准差為0.108。大部分時間,選股模型的IC大於0。

為了檢驗風險中性的作用,本報告分析了普通的深度學習策略和風險中性的深度學習策略分別與流通市值因子的關系。

首先來看深度學習選股模型的IC與流通市值因子IC的關系。下面左圖展示了普通的深度學習選股模型IC與流通市值IC的關系,該相關性越強表示深度學習選股因子的表現與市值因子選股的表現關系越強。從圖中可以看到,流通市值因子IC與普通的深度學習因子IC相關性較強,而且是負的相關性(因為流通市值因子是負向因子)。說明普通的深度學習因子的表現與流通市值因子表現有一定的相關性,當流通市值因子表現好時,普通的深度學習因子表現也比較好。

從右圖中可以看到,在風險中性處理之后,深度學習因子IC與流通市值因子IC的相關性有明顯的降低。這意味着風險中性的深度學習因子的表現與流通市值因子表現的相關性沒有那么強了。

其次來看深度學習選股模型每期的打分與流通市值因子的關系。下圖中的左圖展示了普通的深度學習模型每期打分與流通市值的截面相關系數,截面相關系數的平均值為-0.20,這說明普通的深度學習模型中,市值越小的股票一般打分越高,模型的選股偏小市值。而風險中性的深度學習模型中,截面相關系數的平均值為-0.12,有明顯的下降,沒有那么偏向於小市值。而且在2017年以來,大部分時間截面相關系數大於0,表示模型的選股偏大市值風格。

從以上分析可以看到,經過風險中性化處理,深度學習選股模型不容易受到市值因子的影響。但是,風險中性的深度學習模型的IC與市值因子的IC仍然有一定的相關性,說明當市值因子表現好的時候,深度學習模型也傾向於獲得更好的收益。這是因為市值因子是A股市場長期以來表現較好的因子,基於歷史數據訓練出來的深度學習模型不能完全剝離市值因子的影響。

(三)策略回測

本報告以中證500指數作為股票池,進行選股策略的回測。策略調倉周期為10個交易日。每次調倉時把股票等分成十檔,等權買入深度學習預測模型打分最高的一檔。按照0.3%的交易成本進行回測。

首先來看普通的深度學習模型的選股表現。如下圖所示,普通的深度學習選股模型在中證500成份股內的年化超額收益率為19.71%,超額收益最大回撤-5.35%,超額勝率為69.5%,信息比2.47。

與之相比,風險中性的深度學習模型的選股表現更好一些。如下圖所示,風險中性的深度學習選股模型在中證500成份股內的年化超額收益率為21.95%,超額收益最大回撤-5.03%,超額勝率為74.6%,信息比2.92。

對沖策略分年度的收益回撤情況如下表所示。可以看到,策略每年都獲得了正的超額收益,即使在傳統的市值和反轉因子表現不佳的2017年,策略也獲得了6.93%的超額收益率。(注:2011年數據從2011年1月底開始;2018年數據截止到2018年4月底。)

由於選股因子中技術類指標比較多,策略的換手率較高,每次調倉的平均換手率為70.8%,年化換手率為17.7倍。

(四)策略同質性分析

本報告提出的風險中性的深度學習模型與普通的深度學習模型在模型訓練時的訓練目標不一樣。普通的深度學習模型是把每個時間截面上收益率不一樣的股票區分開,希望尋找能夠產生超額收益的股票;風險中性的深度學習模型是在每個截面上把收益率剝離風險因子影響后不一樣的股票區分開,希望尋找在剝離風險因子影響后能夠產生超額收益的股票。

在不同的機器學習目標下訓練的策略表現不一樣,如下圖所示,總體而言,風險中性的深度學習策略長期表現更好。

兩種策略的相關性比較高,下圖展示了普通深度學習模型的IC與風險中性的深度學習模型IC的關系。可以看到,風險中性的深度學習模型的表現與普通深度學習模型的表現相關性很高,一般情況下,當普通的深度學習模型表現好的時候,風險中性的深度學習模型表現也不錯。兩種策略的表現具有較強的同質性。

然而,兩種深度學習模型選股有較大的差異。當組合規模為50只股票的時候,兩種深度學習模型平均每期所選的股票有21.0只重合(占比41.9%);當組合規模為100只股票的時候,兩種深度學習模型平均每一期所選的股票有53.3只重合(占比53.3%)。如下圖所示。這說明,當給機器學習模型設定的訓練目標不一樣時,模型會從不同的角度篩選股票。

四、總結與討論

機器學習的本質是從數據中學習知識。普通的深度學習選股模型的訓練樣本會受到所在區間風格輪動的影響,采用小市值風格市場的股票樣本訓練出來的模型會偏向小市值風格,從行業表現差異大的市場獲取的股票樣本訓練出來的模型會有較大的行業偏離。在模型訓練時,通過對風險因子的中性化處理,能夠在一定程度上緩解風險因子輪動對模型訓練的影響,使得訓練出來的模型有更穩定的表現。

本報告通過實證分析,證實了將風險因子中性化處理后,訓練出來的深度學習選股模型受市值因子的影響較小。2011年以來,中證500內選股對沖策略年化收益率21.95%,最大回撤 -5.03%,勝率為 74.6%,信息比2.92。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM