王 倫,李 路
上海工程技術大學 數(shù)理與統(tǒng)計學院,上海 201620
近年來,有關股票預測的理論發(fā)展日趨激烈。從早期有效市場假說、隨機漫步[1]理論,后來隨著量化投資的發(fā)展,金融股票交易越來越多地和機器學習產(chǎn)生緊密聯(lián)系。所謂量化選股[2],是指選擇合適的選股指標體系[3],使用機器學習中相關算法,選出優(yōu)質(zhì)股票,其本質(zhì)是數(shù)據(jù)挖掘領域[4]的分類問題。
在過去十幾年中,已經(jīng)有多種機器學習算法應用于股票市場的預測問題。劉道文等[5]在基于支持向量機的基礎上,以交叉驗證方法確定了最佳回歸參數(shù)的選取問題,同時做了股票價格指數(shù)的預測,研究結(jié)果表明支持向量機能夠準確地反映股票價格指數(shù)的變化趨勢。王淑燕等[6]使用指標相關性分析方法,提出了八因子選股模型,然后利用隨機森林算法驗證了該模型在中國股票市場上的有效性。Kumar等[7]將支持向量機與遺傳算法結(jié)合起來,并將該結(jié)合方法應用于股市領域進行股價預測,結(jié)果表明該算法進行的預測準確性高于單一支持向量機。雖然機器學習相關算法在分類問題有著出色的表現(xiàn),但在投資領域的股價漲跌問題的預測準確性上依然沒有達到理想效果。
gcForest(multi-Grained Cascade forest,多粒度級聯(lián)森林,又稱深度森林)是Zhou[8]在2017年提出的新的決策樹集成方法。該算法是在深度學習理論的啟發(fā)下,以隨機森林算法為基礎的一種有監(jiān)督的集成機器學習算法。gcForest算法提出至今,已被應用于多個領域。朱曉妤等[9]首先用多粒度掃描結(jié)構(gòu)提取了火焰的抽象特征,然后利用深度森林模型進行火焰檢測,實驗結(jié)果表明該方法能夠提高火焰檢測率,并且具有強魯棒性。劉超[10]提出一種混合采樣不平衡數(shù)據(jù)集成分類算法,使用SMOTE[11]算法合成新的少數(shù)樣本后,在此基礎上驗證了gcForest算法比邏輯斯蒂回歸和隨機森林算法具有更高的準確性。宮振華等[12]根據(jù)每種森林的預測精度分別對級聯(lián)層中每個森林進行加權(quán),由此提出了一種加權(quán)的深度森林算法,證實了加權(quán)的深度森林在高維和低維數(shù)據(jù)集上性能都獲得一定提升。
由于傳統(tǒng)機器學習算法在股票市場的預測問題上并沒有到達理想效果,而gcForest模型則具有模型復雜度小,參數(shù)設定少等優(yōu)點,同時鑒于gcForest算法在諸多領域[8-10,12]的都達到了預期的效果,為了追求更高的超額收益,本文將建立基于gcForest的多因子量化選股模型來探索股票市場。
gcForest模型把訓練分成兩個階段:多粒度掃描(Multi-Grained Scanning)和級聯(lián)森林(Cascade Forest)。多粒度掃描階段生成特征,級聯(lián)森林階段經(jīng)過多個級聯(lián)層得出預測結(jié)果。
在處理序列數(shù)據(jù)處中,多粒度掃描就是用多個滑動窗口對原始輸入數(shù)據(jù)進行掃描,并通過隨機森林和完全隨機森林兩種森林模型獲得級聯(lián)森林的輸入數(shù)據(jù)。每個完全隨機森林包含500(參數(shù)可調(diào))棵完全隨機樹(complete-random trees),每棵完全隨機樹通過隨機選擇一個特征在樹的節(jié)點進行分裂,直到每個葉節(jié)點的實例都屬于同一類;每個隨機森林也包含500棵決策樹,每棵決策樹隨機選擇輸入的總特征)個特征生成,并且每次選擇具有最佳的基尼值的特征進行分裂。
如圖1中所示,序列數(shù)據(jù)特征為400維,滑動窗口大小選擇為100,滑動步長為1,通過滑動窗口將得到301個100維的實例數(shù)據(jù)。提取的實例數(shù)據(jù)將應用于森林模型的訓練,假設有三類要預測,每個實例通過森林模型會得到三維的類別概率向量,每個森林訓練得到301個3維的類別概率向量,最后將兩個森林得到類別概率向量按順序拼接成1 806維的序列數(shù)據(jù)作為級聯(lián)森林的輸入向量。
圖1 多粒度掃描過程
圖2 中級聯(lián)森林主要由隨機森林和完全隨機森林構(gòu)成。對于每一層的森林模型,首先,訓練樣本通過k折交叉驗證訓練每個森林,同時每個森林都會輸出一個預測的類別概率向量;然后將該層中所有森林輸出的類別概率向量與樣本的原始輸入向量拼接后作為級聯(lián)森林下一層的輸入向量。每層結(jié)束后,都會在測試集上對預測結(jié)果進行檢測,以決定是否產(chǎn)生下一層。最后將輸出的類別概率向量算術平均后,取概率最高的類作為gcForest模型的最終預測結(jié)果。
圖2 級聯(lián)森林過程
取滬深300成分股數(shù)據(jù)起始時間為t0,終止時間為t2,中間時間t1,滿足t0 (1)設訓練集整體股票數(shù)據(jù) 記xi=[xi1,xi2,…,xin]為第i行某只股票的全部因子,其中xij表示第i行某只股票的第j個因子,y=[y1,y2,…,ym]為股票的月收益率。z=[z1,z2,…,zm]為股票收益率標簽,其中: 當股票的月收益率yi>0時,zi=1;當股票的月收益率yi<0時,zi=0。 (2)刪除含有缺失值的股票數(shù)據(jù)。 (3)對股票數(shù)據(jù)進行歸一化處理: 其中,x·j表示每只股票第j個因子的所有數(shù)據(jù)。 3.2.1 選股模型多粒度掃描結(jié)構(gòu) 對于序列數(shù)據(jù)樣本而言,預測模型盡可能地有效地處理樣本的特征,將有利于提高算法的準確性[8]。為提高gcForest算法中級聯(lián)森林階段的股票漲跌的預測效果,這里設置了多粒度掃描過程對股票數(shù)據(jù)的因子進行特征提取。 (1)卷積層 圖3所示為一只股票的所有因子數(shù)據(jù)xi,收益率標簽zi,選股模型要解決的問題為2分類問題。設置1個r維的向量窗口在原始股票數(shù)據(jù)xi上進行滑動取值,步長為c,則可獲得k(k=向下取整符號)個r維向量,將所得的向量均標記為zi。 圖3 多粒度掃描卷積層 (2)森林層 對于股票數(shù)據(jù)集X,總共有m只股票因子數(shù)據(jù)xi,按照圖3步驟處理完每只股票數(shù)據(jù),然后分別經(jīng)過兩種森林模型學習(圖4所示),確定完全隨機森林模和隨機森林模型。 圖4 多粒度掃描中森林模型的構(gòu)建 (3)輸出層 圖5中展示的是股票數(shù)據(jù)xi經(jīng)過卷積層后,將得到的k個r維向量分別經(jīng)兩種森林模型進行分類處理,每個森林得到k個2維類別概率向量。最后每個森林將所有的類別概率向量按順序拼接組成一條新的4×k維特征向量ai(標簽為zi),作為級聯(lián)森林的輸入。對于整體股票數(shù)據(jù)X,得到的是一個新的股票數(shù)據(jù)集: 圖5 多粒度掃描輸出層 3.2.2 選股模型級聯(lián)森林結(jié)構(gòu) 在級聯(lián)森林中,每一層都從上一層獲取經(jīng)過處理后股票的特征信息,并利用股票特征信息產(chǎn)生出新的股票特征信息傳遞至下一層。隨后每一層都將上一層的輸出的股票特征結(jié)果的類別概率向量與原始輸入級聯(lián)森林的股票數(shù)據(jù)拼接作為自身的輸入。 首先將多粒度掃描階段生成的股票數(shù)據(jù)集A分別經(jīng)過級聯(lián)層1中(圖6所示)的四個森林模型進行學習訓練,確定每個森林模型。 圖6 級聯(lián)層森林模型確定過程 圖7 級聯(lián)森林整體流程 圖7 中所示為經(jīng)過多粒度掃描階段生成的股票特征向量ai經(jīng)過級聯(lián)層1中的4個森林模型后,會得到4個2維的類別概率向量,將其按順序拼接得到新的8維增強特征向量bi(gcForest模型[8]認為這4個2維類向量能夠有效地反映樣本的特性,將其稱為增強特征向量)。接著,增強特征向量bi將與級聯(lián)森林的原始輸入向量a拼接組成4×k+8維的特征向量作為下i一層的輸入,依此方法直至進行到級聯(lián)森林的最后一層。最后對產(chǎn)生的類別概率向量取平均值,再取其中最大值所對應的類別作為股票的分類結(jié)果。 3.2.3 選股模型迭代終止條件 級聯(lián)森林的層數(shù)為gcForest模型的深度,gcForest算法在訓練級聯(lián)森林時可由算法自動確定級聯(lián)森林的層數(shù)。設級聯(lián)層N中4個森林產(chǎn)生的類別概率向量取平均值后對應股票的分類標簽為。 定義函數(shù)Acc(h1,h2),表示兩個同維向量h1,h2中相同位置zN=[ ]zN1,zN2,…,zNm元素相等的個數(shù)所占的比例,例如: 則級聯(lián)層每層檢驗的準確率: 每當級聯(lián)森林訓練層數(shù)增加一層后,都會用樣本數(shù)據(jù)對級聯(lián)森林的性能進行檢測,如果準確率dN 3.2.4 gcForest策略回測 本次回測采用每月月末交易,每次交易前賣出所有持倉股票,然后根據(jù)股票得分買入得分排名前30只的股票。 (1)確定股票得分si,根據(jù)級聯(lián)森林最后的輸出層的結(jié)果中選取預測股票標簽zi=1的股票的概率,si=P(zi=1|xi)。 (2)將si從大到小進行排序,取前30只股票,將這30只股票的得分記做s1,s2,…,s30,計算買入股票的權(quán)重gi: 其中,M為資金量,ci為每月末第i只股票價格。 在因子選擇方面,為了比較不同類型因子選擇方法的效果,綜合多篇文獻分析[13-14]結(jié)果,在優(yōu)礦網(wǎng)上,從交易量因子、估值因子、規(guī)模因子、動量因子等幾個方面選取了34個有效因子,見表1,相關因子詳細說明請參考https://uqer.io。 實驗數(shù)據(jù)[t0,t2]是2009年1月1日至2017年12月31日期間滬深300成分股所有股票每月最后一個交易日的股票因子值和每月收益率。[t0,t1]為2009年1月1日至2016年3月31日的數(shù)據(jù)將被作為訓練集來訓練模型,(t1,t2]為2016年4月1日到2017年12月31日的數(shù)據(jù)用于回測部分。所有股票數(shù)據(jù)經(jīng)過歸一化處理,并去掉了包含缺失值的股票數(shù)據(jù),剩余股票數(shù)據(jù)為19 796條。 表1 gcForest策略因子表 Zhou在文獻[8]中介紹了gcForest算法較深度神經(jīng)網(wǎng)絡算法的一大優(yōu)勢,即無需大量設置參數(shù)和調(diào)參。鑒于gcForest算法在文獻[8-10,12]中使用的常用參數(shù)都取得了良好的結(jié)果,因此這里也采用常用參數(shù)設置。 表2中展示的是gcForest在不同窗口下的樣本檢驗結(jié)果,可以看出在不同窗口選取的情況下,其樣本檢驗結(jié)果的準確率約為0.54,誤差不超過0.02,因此窗口的選取原則對實驗最終結(jié)果影響不大。 表2 深度森林算法中不同掃描窗口的樣本檢驗結(jié)果 為了避免和深度學習[15-17]模型一樣需要大量調(diào)參,最終窗口選取原則是按照常用方法,即按照Zhou在文獻[8]中(n為一條股票數(shù)據(jù)的維度)選取三個大小的多窗口模式,具體參數(shù)設定見表3。 表3 深度森林算法中超參數(shù)的設置 圖8展示是實證gcForest整體流程,原始輸入的是一只34維的股票數(shù)據(jù),準備了8、16、24三個大小的滑動窗口進行采樣,股票分類為2分類問題,經(jīng)過多粒度掃描過程后分別產(chǎn)生92、72、44維特征向量,將所有特征向量按順序拼接成212維的特征向量作為級聯(lián)森林的輸入向量。級聯(lián)森林每層輸出的是長度為8的類別概率向量,這個8維類別概率向量與212維的級聯(lián)森林輸入向量拼接在一起作為級聯(lián)森林下一層的輸入向量,這樣層層傳遞下去,直到檢驗停止繼續(xù)加深層數(shù)。 圖8 實證gcForest整體流程(RF:隨機森林,CRF:完全隨機森林) 表4中所示為級聯(lián)森林層數(shù)的迭代過程,從表4中可以看出級聯(lián)層在第3層時終止訓練,確定級聯(lián)森林的層數(shù)為2。 表4 樣本準確率檢驗結(jié)果 為了更好地衡量深度森林(gcForest)算法在股票市場的表現(xiàn),本文將深度森林模型實證結(jié)果和隨機森林[18](Random Forest,RF)、支持向量機[19](SVM)算法進行了比較。表5展示了三種策略和滬深300股票收益指標和風險績效指標。 表5 三種算法在中國A股市場的投資績效 首先,這三種基于機器學習的投資策略的年化收益率都是高于基準年化收益的,年化收益最高的為gcForest模型的29.2%,高于基準的2倍左右。 其次,從阿爾法超額收益上來看,gcForest位于第一,結(jié)果為15.8%,而RF模型的超額收益只有2.4%。 三種算法中,最大回撤較高一點的為RF模型的9.4%,gcForest和SVM分別為6.6%,5.9%,說明其他兩種算法可以更有效地防范回撤風險。 最后從夏普比率看,gcForest的夏普比率明顯高于其他兩種算法,說明在承擔同樣的風險系數(shù)下,gcForest可以更好幫助投資者作出有效的投資決策,獲取更高的收益率。綜合各種指標來看,gcForest較其他兩種算法都具有一定的優(yōu)勢。 圖9繪制gcForest、RF、SVM三種策略的累計收益率。可以看出,在三種策略中gcForest的累計收益率最高,超過50%,然后是SVM策略,累計收益率超過40%,最后則為RF,基本和基準線相同。整體來看,gcForest策略在滬深300指數(shù)穩(wěn)健趨勢中,能夠較好地控制回撤,同時也能有效地抓住證券上漲的機會,獲取更多的超額收益。 圖9 基準、gcForest、SVM、RF策略累計收益率(股市行情上漲時期) 從圖9滬深300基準線可以看出,2017年股市行情較好,基本處于上漲階段,為了比較不同時期股票市場三種策略的收益情況,另外選取了股市行情較為平穩(wěn)時期的2014年,和股市行情下跌時期2015年(股災)的數(shù)據(jù)進行回測。 圖10所示為三種策略在股市行情平穩(wěn)時期的2014年的累計收益率情況,可以看到gcForest策略依然處于領先地位,此時仍能獲取更高的超額收益;圖11中所示為三種策略在股市行情下跌時期2015年的回測結(jié)果,此時獲取的最大累積收益率為SVM策略,其次為gcForest策略。因此結(jié)合圖10、圖11和圖9中結(jié)果結(jié)可以得出,gcForest策略在股市行情平穩(wěn)和上漲時期能夠更好地發(fā)揮其優(yōu)勢,投資者應抓住機會,根據(jù)股市行情合理選擇投資策略。 圖10 基準、gcForest、SVM、RF策略累計收益率(股市行情平穩(wěn)時期) 圖11 基準、gcForest、SVM、RF策略累計收益率(股市行情下跌時期) 多因子量化選股利用有效因子設計相應的投資策略建立有效的投資組合,以尋求超額收益。本文通過利用gcForest算法進行量化選股,并與支持向量機和隨機森林算法進行比較,以股票因子數(shù)據(jù)作為算法的輸入,輸出對未來股票價格形式的預測,并通過預測結(jié)果建立相應投資組合。實證結(jié)果顯示:gcForest算法在股市行情平穩(wěn)和上漲的時期無論從風險還是收益角度均較其他兩種模型有一定的優(yōu)勢,并且在樣本檢測的預測準確率高達55%,顯著高于50%的隨機概率。3.2 gcForest選股模型
4 實證分析
4.1 gcForest策略實證
4.2 gcForest、支持向量機、隨機森林回測結(jié)果比較
4.3 gcForest策略不同時期的有效性分析
5 結(jié)論