王澤宇 上海財經(jīng)大學金融學院
多因子選股模型是量化投資實務中應用最廣泛的一種模型,也是理論研究的重要內(nèi)容,最經(jīng)典的多因子選股模型是Fama- French[1]提出的三因子模型。之后的多因子模型研究主要是在三因子模型提出的思想和方法基礎上對因子的研究和因子模型的有效性檢驗。傳統(tǒng)的因子模型策略多采用回歸的方式,利用歷史數(shù)據(jù)回歸出預期收益率和多個因子之間的線性關系,從而在取得當期數(shù)據(jù)后計算出預期的收益率,并根據(jù)收益率的高低選擇合適的股票。但是股票價格的波動與其影響因子之間的關系往往呈現(xiàn)出復雜的非線性特性[2]。面對股票數(shù)據(jù)的非線性性,利用線性模型的預測方法難以達到令人滿意的效果[3]。
人工智能、機器學習的興起為多因子模型構建提供了新的思路和方法[4],將機器學習模型融入多因子選股模型的研究中,是多因子選股模型的改進方向之一[5]。相比傳統(tǒng)的線性多因子模型,機器學習算法能夠通過對因子的非線性表達,更加精細地捕捉到市場的信號,從而獲取較為穩(wěn)健的超額收益[6],機器學習算法主要基于其從數(shù)據(jù)中學習到的經(jīng)驗知識來預測資產(chǎn)價格,使得從數(shù)據(jù)中挖掘出更多與未來資產(chǎn)價格相關的信息成為可能[7]。決策樹模型能夠較好地映射非線性關系,易于理解和實現(xiàn),速度快,易改造分類規(guī)則[8],因此,使用機器學習中的決策樹模型來對于傳統(tǒng)的三因子模型進行改進有其應有之義,筆者的研究對于豐富金融投資理論和實踐具有一定的參考價值。
Fama-French[1]提出的三因子模型如下:
三因子模型將股票相對于無風險收益的超額收益歸類到三個因子MKT(市場風險溢價)、SMB(市值因子)、HM(賬面市值比因子)。本文運用機器學習中的決策樹模型來對于傳統(tǒng)的三因子模型進行改進。決策樹通過訓練數(shù)據(jù)集進行學習,得出一棵自上向下的樹的模型,再將測試數(shù)據(jù)應用于這棵樹模型得出預測分類結果[9]。決策樹的算法通常是一個遞歸的選擇最優(yōu)特征,并根據(jù)該特征對訓練數(shù)據(jù)進行分割,使得各個子數(shù)據(jù)有一個最好的分類過程,這一過程對應著特征空間的劃分,也對應著決策樹的構建[10]。
本文希望將每只股票分類為“買入”和“賣出”兩類,一個基本的想法是直接用三因子模型中的三個因子來作為劃分屬性,比如說將MKT因子劃分為高、中、低三類。但這種方式僅僅存在三個劃分條件,導致存在嚴重的欠擬合風險,同時,因子的高、中、低三種劃分方式是很模糊的,很難去界定,需要用更精細化的方法來劃分因子模型。事實上,所有的股票構成的集合中,三個因子的取值都應當是連續(xù)的,所以無法直接用離散的分類方法對其進行分類,但可以與某個特定的數(shù)值進行比較從而實現(xiàn)離散化的過程。
圖1 改進后的三因子模型決策樹的劃分方式
例如MKTt,這是市場超額收益率因子,可以考慮它是否大于0的分類,也可以考慮其是否大于0.2的分類,對于SMBt,我們同樣可以考慮其對于某個臨界值的大小比較。這樣就完成了對于三個因子的離散化操作。這是至關重要的一步,這樣決策樹可以精細化地處理離散的數(shù)據(jù)。
當然,不可能將所有的分類標準全部塞入決策樹中,那樣會導致嚴重的過擬合情況的出現(xiàn),因此,在處理完劃分方式后還要再探究最優(yōu)化的樹的最大深度,在之后的研究中會運用利用sklearn.tree.DecisionTreeClassifier(criterion ='entropy')實現(xiàn)決策樹分類,控制決策樹的深度。從1開始逐漸增加最大深度,直到獲得一個完整樹。在測試得到了最優(yōu)深度和信息增益最優(yōu)的測試集合后,即得到了一個經(jīng)過訓練之后的決策樹,在拿到一個新的股票后,只需要按照決策樹進行分類即可得到?jīng)Q策樹對其買入/賣出的判斷。
首先需要確定訓練集來進行訓練,即我們需要收集大量股票的三因子數(shù)據(jù)和我們最終對其進行的買入/賣出的判斷來進行訓練集的構建。本文訓練對象為滬深300的所有成分股,選取計算出的2020年7月1日至2021年6月1日三因子數(shù)據(jù)。這其中,MKT是市場風險溢價,其計算方式為使用了2020年7月1日至2021年6月1日根據(jù)滬深300指數(shù)所計算得到的β值。SMB為市值因子,其計算方式為ln(當前公司總市值),單位為億元。HML為賬面市值比因子,其計算方式對將公司的PB值取倒數(shù)。Label為買入/賣出的標簽,我們將訓練集中的股票于2020年7月1日至2021年6月1日平均最終收益率高于同期滬深300指數(shù)平均收益率的股票記為1,其余的記為0。
這樣,得到了所有所需的元數(shù)據(jù),但這個數(shù)據(jù)沒有辦法直接進行決策樹運算,需要按照上文方法對其進行離散化,并設計了75個分類標簽。
例如,對于平安銀行,其MKT值為0.91,那么相對應的1號分類標準MKT>0.0就會被標記為True,同時,在代碼底稿文件Traindata.txt中就會出現(xiàn)1 1這一行代碼來標識分類識別情況。預處理完的數(shù)據(jù)會被保留在四個文檔中,在去掉缺省值之后共保留了299只股票,其中249只將被用于訓練,50只用于測試。
在完成了數(shù)據(jù)的預處理之后,就使用基于sklearn.tree.DecisionTreeClassifier的決策樹分類器來對以上的數(shù)據(jù)進行訓練和測試,我們需要控制決策樹的深度,從1開始逐漸增加最大深度,直到獲得一個完整樹。由于隨著最大深度的增加,過擬合現(xiàn)象會加劇,所以需要找到一個最佳的最大深度,來使得測試機的精度最高,筆者遍歷了從1到100的所有的最大深度的決策樹,經(jīng)實驗,當最大深度為5時,決策樹具有最高的精度,再依據(jù)信息增益原理,可以得出最優(yōu)化的決策樹模型,如圖2所示。
圖2 最優(yōu)決策樹模型圖
根據(jù)上面所提出的分類標準,例如,圖2中的X[31]≤0.5即對應了判斷第32個標準滿足與否,即SMB是否大于6.4的判斷,而按照在Label中的標記,應當買入最后的標記為1的股票,同時賣出最后標記為0的股票。
用一個比較清晰的方法重新表述一下上面的決策樹模型。
圖3 重新表述的決策樹模型圖
例如,瀘州老窖(000001.SZ),其MKT值為1.46,SMB值為8.14,HML值為0.07。按照上面的決策樹來對該股票進行判斷,首先,其滿足SMB>6.4的條件,因此在第一次判斷向右進行,之后,其不滿足HML>0.3的條件,因此向左進行,之后,其依次滿足MKT>0.8,不滿足SMB>8.6,滿足SMB>6.6的條件,最終得出了應當買入的結論,這與其最近超過大盤的收益率相符合。
因此,為選定一個投資組合,只需要將股票池中的所有股票都按照以上的決策樹進行判定,并買入被分類為“買入”的股票即可以構成一個投資組合。
利用BigQuant平臺對于上文決策樹策略進行回測。需要選定一個股票池,在股票池當中運用在前文所求出的決策樹來判定是否應當買入,之后平均買入被分類為“買入”的股票。隨機抽取50只不屬于滬深300股票池的股票,并收集它們的三因子數(shù)據(jù),對這50只股票依次按照決策樹進行判斷,得到了5只符合決策樹買入分類的股票,并對這5只股票構成的投資組合在2016年1月1日至2021年1月1日這五年的區(qū)間內(nèi)進行長期持有的無擇時策略并進行回測。
圖4 使用BigQuant的僅選股策略回測
可見,僅由這五只股票構成的選股無擇時策略就已經(jīng)戰(zhàn)勝了基準的大盤收益率,可以看出該選股策略確實具有著優(yōu)秀的選股能力。
本文使用了決策樹模型來對于傳統(tǒng)的三因子模型進行改進,利用決策樹對于股票池中的股票進行分類,將股票的各個因子作為判定結點,并創(chuàng)新性地提出了將連續(xù)的因子離散化的方法,最終得出了較為優(yōu)秀的選股策略。本模型使用方便,易于理解,可以有效解決線性模型中系數(shù)恒定的問題并且模型能夠給出明確的結論,為傳統(tǒng)模型方法的局限性引入針對性的解決思路。本文所采用的訓練和測試集僅覆蓋了滬深300的所有成分股票,這些股票的市值都普遍較大并且風險與市場風險差距較小,對于特定類型的股票未必具有普適性,因此,在對于目標行業(yè)的股票進行判別時,可以使用同行業(yè)的其他股票對于模型進行再訓練,讓模型對于特定行業(yè)的股票具有更好的判別效果,這需要進一步的研究。其次,本文所提出的模型是一個純粹的選股模型,它沒有任何擇時的功能。因此,在使用本文的選股策略的同時也可以配合使用一些擇時策略,從而構建出更加優(yōu)秀的投資策略。