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

1、數據驅動型機器學習模型的問題網絡

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

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

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

例如,若是用於訓練模型的股票樣原本自於小市值風格的市場,那麼訓練出來的模型在小市值市場中的預測能力更佳,並且會「認爲」小市值是股票產生超額收益的重要緣由。一旦市場風格切換到大市值,小市值風格下訓練出來的模型就可能失效。優化

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

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

2、深度學習預測模型orm

(一)深度學習模型結構blog

在本報告的深度學習選股模型中,咱們採用7層深層神經網絡系統創建股票價格預測模型。其中包含輸入層X,輸出層Y,和隱含層H一、H二、H三、……、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%的股票。

本報告中,咱們採用行業和流通市值做爲風險因子進行風險中性處理。

3、策略與實證分析

(一)深度學習預測模型

深度學習多因子選股交易策略的流程以下圖所示。在模型訓練和選股交易時,都須要先對市場數據進行預處理。在模型訓練階段,須要把歷史市場數據標準化成爲適合深度學習模型的特徵數據;在選股交易階段,從當前市場的數據中計算每一個股票的特徵數據,而且進行數據的標準化,經過訓練好的深度學習模型,對每一個股票的將來走勢進行預測打分,而後根據每一個股票的打分進行分檔選股,構建組合。

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

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

因子標準化過程分紅以下幾個環節:

一、異常值、缺失值處理

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

二、極值壓邊界處理

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

三、沿時間方向的因子標準化

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

四、沿截面的因子標準化

沿截面方向的因子標準化使得不一樣特徵的值可比,例如流通市值和換手率的數據相差很大,經過因子標準化,可使得標準化以後的流通市值和換手率可比。因子標準化的方法有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的數。

五、按照機器學習模型來調整因子分佈

不一樣的機器學習模型對輸入數據的假設有差異,須要根據模型的假設來調整因子分佈。深層神經網絡通常對輸入數據的假設不強,能夠同時容納連續型的輸入數據和離散型的輸入數據(如行業的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%)。以下圖所示。這說明,當給機器學習模型設定的訓練目標不同時,模型會從不一樣的角度篩選股票。

4、總結與討論

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

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

相關文章
相關標籤/搜索