本文是基於機器學習的選股量化研究。通過 JoinQuant 平台獲取中證全指及滬深 300、中證 500 指數樣本股在 2014 年 1 月 1 日至 2018 年 7 月 31 日期間每個交易日的截面數據作為測試集樣本。另外,當天停牌或者開盤漲跌停的樣本股作為對象外。之所以選擇中證全指及滬深 300、中證 500 指數樣本股作為數據樣本,主要是因為其能夠全方位地反映中國 A 股市場大中小市值公司的股票價格表現。
1.1 因子選取與模型構建#
1.1.1 因子選取#
在不同因子的組合作用下,將會對股票的超額收益產生不同的影響,因此量化投資策略,尤其是多因子模型成功的關鍵在於對因子的選取。為了能夠有效解釋股票收益,候選因子的選取必須考慮足夠的維度,同時還需具備比較合理的經濟意義。另外,因子的獲取成本也需要考慮在內。對於量化因子的研究有很多,其中比較有名的是 WorldQuant 發表的《101 Formulaic Alphas》。本文經過對因子的相關性等方面的測試和綜合考慮,分別從估值,資本結構,盈利,成長四個方面進行考慮,選取如表 1 所示的因子作為候選因子。
表 1 因子及其描述#
No | 大類因子 | 因子名 | 因子描述 |
---|---|---|---|
1 | 估值 | EP | 盈利收益率,取市盈率(TTM)倒數 |
2 | 估值 | BP | 賬面市值比,取市盈率倒數 |
3 | 估值 | PS | 市銷率 |
4 | 估值 | DP | 股息率,取應付股利除以總市值 |
5 | 估值 | RD | 市研率,取開發支出除以總市值 |
6 | 估值 | CFP | 現金收益率,取市現率倒數 |
7 | 資本結構 | log_NC | 對數淨資產 |
8 | 資本結構 | LEV | 財務槓桿,取資產 / 負債 |
9 | 資本結構 | CMV | 對數流通市值 |
10 | 資本結構 | FACR | 固定資產比例,取固定資產 / 總資產 |
11 | 盈利 | NI_p | 淨利潤率,取(淨利潤 / 營業總收入)的絕對值 |
12 | 盈利 | NI_n | 淨利潤率,取((負數)淨利潤 / 營業總收入)的絕對值 |
13 | 盈利 | GPM | 銷售毛利率 |
14 | 盈利 | ROE | 淨資產收益率 |
15 | 盈利 | ROA | 資產回報率 |
16 | 盈利 | OPTP | 主營業務占比, |
17 | 成長 | PEG | 取市盈率 /(淨利潤增長率 * 100) |
18 | 成長 | g | 營業收入增長率(同比) |
19 | 成長 | G_p | 淨利潤增長率(同比) |
1.1.2 模型構建#
某個時間點上,股票的市值可以被多個因素解釋。根據多因子模型的基本思路,我們在截面上將市值作為樣本標籤,按照表 1 所示因子,計算其因子暴露度,作為樣本的原始特徵。
對表 1 的多個因子進行回歸,得到的殘差值越小,說明股票市值向下偏離其理論值越嚴重,也就意味著該股票未來上漲的可能性越大,即收益率越高。構建模型如下所示:
1.2 數據預處理#
本文通過 JoinQuant 平台獲取所需的市值及因子數據。
在進行模型構建與分析之前,為了提高數據的質量,需要對數據進行預處理。數據預處理有多種方法,包括數據清理,數據集成,數據變換,數據歸約等。本文對數據主要進行以下預處理。
1.2.1 缺失值處理#
對於初始數據存在缺失的情況,本文統一用 0 來填充。
1.2.2 離群值處理#
因為過大或過小的因子數據可能會影響到分析結果,尤其是在做回歸的時候,我們需要對因子的離群值進行處理。處理方法是調整因子值中的離群值至上下限(Winsorzation 處理),其中上下限由離群值判斷的標準給出,從而減小離群值的影響力。離群值的判斷標準有三種,分別為 MAD、3σ、百分位法。其中 MAD 標準的具體方法如下:
- 找出所有因子的中位數 。
- 得到每個因子與中位數的絕對偏差值,即 | 。
- 得到絕對偏差值的中位數 MAD。
- 確定參數 n,根據下述公式對因子值做出調整。
本文統一採用 MAD(n=5)標準對因子進行離群值處理。離群值處理前後的比較,以因子 g 在 2018 年 7 月 11 日截面數據為例,參考圖 1 所示。
圖 1 因子 g 的離群值處理前後比較 (來源:JoinQuant)
1.2.3 標準化處理#
由於不同因子所描述的對象單位不一樣,那麼可能導致不同因子數值差異很大,舉個例子,如果我們用不經過標準化的市值作為因子暴露,如果公司 A 的市值是 B 的市值的 100 倍,那是否代表我們能說市值因子的收益率對 A 的收益率的影響是對 B 的收益率的影響的 100 倍呢?顯然是不能的。所以,在利用因子進行策略建立之前,需要先對因子進行標準化處理。標準化的方法有很多,本文採用 z-score 的方法,參考圖 2 所示,將因子值的均值調整為 0,標準差調整為 1。處理後的數據從有量綱轉化為無量綱,從而使得數據更加集中,或者使得不同的指標能夠進行比較和回歸。
圖 2 z-score 方法描述 (來源:量化投資訓練營公眾號)
以因子 log_NC 在 2018 年 7 月 11 日截面數據為例,標準化處理的前後比較參考圖 12 所示。
1.2.4 中性化處理#
在使用因子進行選股時,有時會因為其它因子的影響,而導致選出來的股票具有一些我們不希望看到的偏向。比如說,市淨率會與市值有很高的相關性,這時如果我們使用未進行市值中性化的市淨率,選股的結果會比較集中。另一方面,朝陽行業和夕陽行業的市盈率在大致上也有一定的特點,也就是說行業對估值因子也有影響,那麼我們得到的結果是具有一些多餘偏好的。為了解決這一由不同行業和市值大小導致的誤差問題,讓我們在用某一因子時能剔除其他因素的影響,使得選出的股票更加分散,我們需要對其進行中性化處理。
圖 3 因子 log_NC 的標準化處理前後比較 (來源:JoinQuant)
對於因子來說,市場風險(例如牛市和熊市)和行業風險(同一行業的公司受的影響類似)是中性化主要考慮的因素,對這兩者的處理方式有兩種:
- 將市場因子和行業因子同時納入模型。
- 僅納入行業因子,而將市場因子包含在行業因子中。
第一種方式和第二種方式的區別在於,第一種方式行業因子收益率計算出來的是行業相對於市場的超額收益率,而第二種方式計算出來的收益率是行業絕對收益率。對於驗證風格因子有效性而言,這兩種方式是沒有區別的;對於回歸而言,只是前者是帶截距項的回歸,而後者是穿越原點的回歸。本文採取第二種方式,模型調整如下所示:
若該公司屬於該行業,則將該行業的虛擬變量的值設為 1,否則設為 0。本文不對公司所屬行業進行比例拆分,即公司只能屬於一個特定的行業。本文的行業劃分採用 JoinQuant 行業 1 級分類,參考表 2 所示:
表 2 行業分類一覽#
行業代碼 | 行業名稱 | 起始日期 |
HY001 | 能源 | 1999/12/30 |
HY002 | 材料 | 1999/12/30 |
HY003 | 工業 | 1999/12/30 |
HY004 | 可選消費 | 1999/12/30 |
HY005 | 日常消費 | 1999/12/30 |
HY006 | 醫療保健 | 1999/12/30 |
HY007 | 金融 | 1999/12/30 |
HY008 | 信息技術 | 1999/12/30 |
HY009 | 電信服務 | 1999/12/30 |
HY010 | 公用事業 | 1999/12/30 |
HY011 | 房地產 | 1999/12/30 |
2.1 回測參數設置#
本文採用歷史回測的方式進行實證分析。回測參數設置的不同所得到的測試結果差異很大,客觀設置回測參數關係到策略交易效果的真偽和對策略的最終取舍。本文的回測參數設置及全局設定參考如下:
(1)投資金額
假定投資金額為:100 萬。
(2)回測區間
未指定的情況下,默認回測區間為:2014 年 1 月 1 日 —2018 年 7 月 31 日
(3)佣金及印花稅
為了使回測結果更加接近真實的交易成本,在實證分析中,設置佣金及印花稅的比例。
近十年印花稅的主要兩次變化包括:
- 2008 年 4 月 24 號起,由 3‰調整為 1‰。
- 2008 年 9 月 19 日起,由雙邊徵收改為單邊徵收,稅率保持 1‰。由出讓方按 1‰的稅率繳納股票交易印花稅,受讓方不再徵收。
佣金方面,由於券商及客戶本身的不同,佣金比率各自不同。本文做了單獨設置。
(4)滑點
所謂滑點,是指下單價與實際成交價之間的差價。由於滑點對最終結果的影響較小,本文滑點設定為 0。
(5)倉位管理
根據每次買入時所剩資金,按照買入股票數平均資金,全倉買入。
(6)可行股票池
- 如無特別指定的情況,本文的可行股票池默認為中證全指。
- 實際情況中,當天停牌的股票是無法進行買賣操作的,所以在整體回測前,將當日停牌的股票剔除。
- 本文在跌停狀態下策略不進行買入,漲停狀態下策略不進行賣出。
(7)比較基準
對應可行股票池,選取中證全指的每日價格作為判斷策略好壞和一系列風險值計算的基準。
(8)測試集提取
交易日當天的因子特徵值為樣本的原始特徵,當天的市值對數為樣本的標籤。
(9)訓練集(包括驗證集)合成
以 T 日為例,每 21 個交易日為間隔,在沒有特別指定的情況下,默認使用 T-63 至 T 的特徵和標籤作為訓練集(包含驗證集),且使用 3 折交叉驗證的方法。
(10)機器學習算法參數設置
在沒有特定指定的情況下,各機器學習算法的參數設置參考表 3 所示,使用固定參數的方式。
表 3 各機器學習算法參數設置#
人工智能算法 | 參數設置 |
線性回歸 | 無參數 |
嶺回歸 | alpha:100 |
SVR | C:100,gamma:1 |
隨機森林 | n_estimators:500 |
(11)其他
- 回測使用市價單下單,並假設不存在買不到或賣不出的現象。
- 財報和市值數據使用的回測日的前一天數據,從而避免未來函數。
- 由於本文聚焦研究選股策略,所以未使用止損止盈策略或擇時策略來作為輔助,以保證選股策略以外的參數是一致的。
2.2 模型及因子有效性實證#
在對策略進行深入的研究之前,首先對策略進行有效性的研究及實證,以保證之後的研究在正確的前提下進行。對策略的有效性實證方法如下:
- 根據人工智能的線性回歸算法,對模型中的因子特徵值對市值(取對數)標籤做線性回歸,取實際值與預測值之差作為新的因子特徵值。
- 按照從小到大的順序對股票進行排序。
- 將股票等分為 10 組,分別按照每 10 天和每 30 天進行一次調倉。
根據上述方法,回測條件參考表 4 所示,進行分組回測。分組回測的結果分別參考表 5、圖 4、圖 5 所示。
表 4 回測條件#
股票池 | 調倉周期 | 算法 | 持倉數 | 因子組合 |
滬深300 中證500 中證全指 | 10天, 30天 | 線性回歸 | 10%(分組) | 全因子 |
表 5 分組回測收益率及排名#
圖 4 不同組別的超額收益率(中證全指,調倉周期:10 天)
圖 5 不同組別的回測結果(中證全指,調倉周期:10 天)
由表 5、圖 4、圖 5 可知:
- 根據假定的模型,滬深 300 不能得到明顯的單調的策略收益率,而中證全指能得到相對明顯的單調的策略收益率。中證 500 則居於滬深 300 和中證全指中間。說明該策略不適合用於投資滬深 300,但可以用於投資中證全指或者中證 500。
- 中證全指不僅能得到相對明顯的單調的策略收益率,還可以獲得相對單調的夏普比率和信息比率。
- 中證全指不能獲得單調的最大回測,說明該模型在風險控制上並沒有有效的機制。
以中證全指為股票池,按照每 30 日進行一次調倉,分別採用嶺回歸,SVR 和隨機森林算法進行分組回測。回測條件參考表 6 所示,回測結果參考表 7 所示。
表 6 回測條件#
股票池 | 調倉周期 | 算法 | 持倉數 | 因子組合 |
中證 全指 | 30天 | 嶺回歸, SVR, 隨機森林 | 10%(分組) | 全因子 |
表 7 分組回測排名#
組別 | 嶺回歸 | 排名 | SVR | 排名 | 隨機森林 | 排名 |
1 | 111.91% | 2 | 159.14% | 1 | 96.34% | 1 |
2 | 115.73% | 1 | 96.40% | 2 | 62.81% | 3 |
3 | 84.34% | 3 | 79.04% | 3 | 57.74% | 5 |
4 | 69.23% | 4 | 59.84% | 4 | 47.91% | 8 |
5 | 49.12% | 5 | 49.03% | 5 | 54.28% | 7 |
6 | 34.19% | 8 | 22.80% | 8 | 56.70% | 6 |
7 | 31.04% | 9 | 30.92% | 6 | 69.18% | 2 |
8 | 35.06% | 7 | 17.04% | 10 | 64.71% | 4 |
9 | 15.25% | 10 | 30.65% | 7 | 24.80% | 9 |
10 | 37.7% | 6 | 17.44% | 9 | 19.82% | 10 |
本文選擇 30 日為調倉周期,這是因為:首先,本文選擇的部分交易數據實質是月數據,如果周期為天或者更小的話,這種調整將沒有意義;其次,對於財務數據的選擇,我們選擇的是季度,按照前面的理論來說應將周期調整為季度,但以季度為周期會導致交易成本增加,並且有可能錯過很多投資機會,交易的收益率也有可能受到影響,而且對於財務數據我們進行了滯後處理,因此以季度為周期是不可取的;最後,對於一些指標來說,月數據可能具有更好的效果,例如市盈率和市淨率,以月為周期的數據會使得模型的檢驗更加有效,剔除了一些特殊值的出現。
從表 7 可知,僅從收益角度看,嶺回歸,SVR 和隨機森林三種算法,和線性回歸類似,也能夠得到相對明顯的單調的策略收益率。其中,SVR 的趨勢最為明顯。隨機森林的趨勢不夠顯著,在頭尾的收益率分水嶺比較清晰,在中間分組的分水嶺比較模糊。
2.3 不同因子組合的算法實證比較#
將全部因子分成三種不同的因子組合,參考表 8 所示。
表 8 不同因子組合#
No | 因子名 | 組合1 | 組合2 | 組合3(全因子) |
1 | EP | ● | ● | ● |
2 | BP | ● | ● | |
3 | PS | ● | ||
4 | DP | ● | ||
5 | RD | ● | ● | ● |
6 | CFP | ● | ||
7 | log_NC | ● | ● | ● |
8 | LEV | ● | ● | ● |
9 | CMV | ● | ● | |
10 | FACR | ● | ||
11 | NI_p | ● | ● | ● |
12 | NI_n | ● | ● | ● |
13 | GPM | ● | ● | |
14 | ROE | ● | ● | |
15 | ROA | ● | ||
16 | OPTP | ● | ||
17 | PEG | ● | ● | ● |
18 | g | ● | ||
19 | G_p | ● | ||
合計數 | 7 | 11 | 19 |
利用不同算法下,買入排序後前 50 名股票。每 30 日進行一次調倉。詳細的回測條件參考表 9 所示。
表 9 回測條件#
股票池 | 調倉周期 | 算法 | 持倉數 | 因子組合 |
中證全指 | 30天 | 線性回歸, 嶺回歸, SVR, 隨機森林 | 50 | 組合1, 組合2, 組合3(全因子) |
根據上述方法,利用不同的算法進行回測,回測結果參考表 10 所示:
表 10 不同算法的回測結果#
圖 6 不同算法的超額收益圖(因子組合 3)
圖 7 不同算法的回測結果指標(因子組合 3)
由表 10、圖 6、圖 7 可知:
- 收益和風險的平衡最理想的策略是採用全因子組合的 SVR 算法策略,該策略的收益率為 243%,夏普比率為 0.987,IR 為 1.742。該三項指標在所有投資組合中表現最好,而其最大回測與其他投資組合持平,甚至更低。
- 長期來看,該投資策略在不同的算法皆能跑贏基準。在該投資策略下,總體上看,收益率表現最好的是 SVR。SVR 最低的收益率也比嶺回歸及線性回歸最高的收益率要略高。其次是隨機森林,而嶺回歸和線性回歸不相伯仲。
- 隨著因子數的增多,線性回歸,嶺回歈的收益率反而下降,而 SVR 隨著因子數的增多,收益率上升。隨機森林的收益率表現不穩定。夏普比率和 IR 的表現和收益率相似。
- 不同的因子組合在不同的算法下,最大回測相差不大,沒有一種算法也沒有一種因子組合有特別的優勢。這說明該投資策略本身在風險控制上存在著不足。
- 從測試集及驗證集的打分來看,隨機森林的模型擬合程度最高,預測準確度最高。SVR 的擬合程度表現不穩定。線性回歸和嶺回歸的擬合程度基本一致。
- 隨著因子數的增多,線性回歸,嶺回歸,隨機森林的打分越來越高,說明隨著因子數的增加,其擬合程度越來越高。SVR 打分和因子數沒有明顯的關係。SVR 也是驗證集打分與測試集打分的差別最大。
2.4 不同持倉數的算法實證比較#
在目前國外量化投資界,投資者普遍選擇的組合規模為 50 到 60 股票,國外各大投資基金均以 60 只股票為持股規模,這是因為投資者認為隨著組合規模的擴大,非系統風險會相應的降低直至接近於零,但考慮到過大的規模會導致成本的增加和收益率的下降,根據邊際效用遞減規律,當規模較小時增加規模的個數會使得風險降低,但隨著規模的不斷增大,當超越一定臨界值時,風險降低的速度會變得緩慢起來,因此規模不能選擇無窮大。而且伴隨著規模的擴大,組合的效率就會下降,大量的原始資金和高額的交易成本就會凸現出來。本文為了分析並實證不同持倉數下的收益和風險的不同表現,按照表 11 所示的因子組合 3(全因子組合),將持倉數分別設置為 5、10、30、50,進行回測,詳細的回測條件參考表 11 所示,回測結果參考表 12 所示。
表 11 回測條件#
股票池 | 調倉周期 | 算法 | 持倉數 | 因子組合 | 訓練集 |
中證 全指 | 30天 | 線性回歸, 嶺回歸, SVR, 隨機森林 | 5, 10, 30, 50 | 組合3 (全因子) | 【T-84,T】 |
表 12 不同持倉數的算法比較#
從表 12 可知:
- 收益表現最好的是 SVR 算法(持倉數為 5)的情況,該算法實現了 698% 的最高收益率,夏普比率和 IR 也達到最高,分別為 1.61 和 2.03。但是該算法的最大回測也非常高,超過了 50%,策略波動率遠高於基準波動率。如果考慮最大回測不要超過 50% 的話,SVR 算法(持倉數為 30)的情況最為理想,該算法實現了 263% 的收益率,普遍高於其他情況,夏普比率為 1.07,也普遍高於其他情況。而該持倉數下,最大回測下降到 44%,接近於平均值。
- 在相同持倉數下,收益率及夏普比率排名大致保持 SVR > 隨機森林 > 嶺回歸 > 線性回歸的順序。
- 隨著持倉數減少,各個算法的收益率都有上升,SVR 上升最為明顯。由此可見,持倉越分散,收益越容易被平攤。而策略波動率則剛剛相反。持倉越集中,波動越大。
- 線性回歸和嶺回歸隨著持倉數減少,最大回測出現了逐漸縮小跡象。其中嶺回歸在持倉數為 5 的時候最大回測達到最小,盈虧比達到最大;與之相反,SVR 和隨機森林隨著持倉數減少,最大回測出現明顯擴大。
- 結合收益和風險的指標,利用線性回歸和嶺回歸算法時,最佳持倉數為 5,利用 SVR 和隨機森林算法時,最佳持倉數為 30。
2.5 不同市場風格的算法實證比較#
針對不同的市場風格構建不同的投資策略,之前有不少學者都做過研究,比如中國股市周期劃分實證分析,牛熊市追漲殺跌策略,市場慣性策略與反轉策略,牛熊市周期協同性研究等。最近,將人工智能及機器學習應用到市場選擇上的研究也層出不窮,比如機器學習對 A 股適應性比較研究。本文在以上研究的基礎上,根據不同的市場的風格之間的切換,設置不同的回測區間,參考表 13 所示。
表 13 不同市場風格的回測區間#
區間編號 | 回測區間 | 區間長度 | 市場風格 |
區間1 | 2014年4月1日—2014年9月30日 | 6個月 | 盤整—上漲 |
區間2 | 2014年10月1日—2015年4月30日 | 7個月 | 上漲—上漲 |
區間3 | 2015年3月1日—2015年9月30日 | 7個月 | 上漲—下跌 |
區間4 | 2015年7月1日—2015年11月30日 | 5個月 | 下跌—上漲 |
區間5 | 2017年8月1日—2018年3月31日 | 8個月 | 盤整—下跌 |
區間6 | 2017年10月1日—2017年12月31日 | 3個月 | 盤整—盤整 |
區間7 | 2015年9月1日—2016年1月31日 | 5個月 | 下跌—下跌 |
回測條件參考表 14 所示,回測結果參考表 15 所示:
表 14 回測條件#
股票池 | 調倉 周期 | 算法 | 算法參數 | 持倉數 | 因子 組合 | 回測 區間 |
中證 全指 | 30天 | 線性回歸, 嶺回歸, SVR, 隨機森林 | 固定參數 | 5 | 全因子 | 區間1, 區間2, 區間3, 區間4, 區間5, 區間6, 區間7 |
表 15 回測結果#
為了更加清晰地比較不同算法的收益和風險,對表 15 進行簡化,參考表 16、表 17 所示。
表 16 年化收益率排名#
表 17 最大回測排名#
從表 16、表 17 可知:
- 從收益來看,在市場風格沒有大的切換的期間,整體而言,線性模型要優於 SVR 和隨機森林算法。在市場長期盤整階段,SVR 和隨機森林算法基本失效。在長期盤整走勢當中應該謹慎用機器學習算法進行量化投資的指導,此時更應該結合其他技術分析理論進行投資決策 [50]。在持續下跌的市場環境中,SVR 算法也能獲得超額收益。
- 從收益來看,在市場風格出現明顯切換的期間,SVR 和隨機森林算法整體而言要優於線性模型,SVR 算法尤其突出。但是在市場風格由盤整切換到下跌期間,SVR 和隨機森林算法基本失效。
- 從風險來看,在市場風格沒有大的切換的期間,線性模型整體而言要優於 SVR 和隨機森林算法。在持續上漲階段,SVR 和隨機森林算法基本能趕上線性模型,其他情況下,其風險遠高於線性模型。
- 從風險來看,在市場風格出現明顯切換的期間,並沒有什麼算法表現出特別高的風險預測能力。
- 總體而言,市場風格沒有大的切換的期間,線性模型優於 SVR 和隨機森林算法,反之,SVR 算法更優(市場風格由盤整切換到下跌期間除外)。
2.6 不同參數的算法實證比較#
以中證全指為可行股票池,持倉數為 5,分別使用固定參數和網格搜索(帶標準 3 折交叉驗證)的方法來驗證不同參數的模型泛化程度並調節監督模型參數以獲得最佳泛化性能。回測條件參考表 18 所示,算法參數參考表 19 所示,回測結果參考表 20 所示。
表 18 回測條件#
股票池 | 調倉周期 | 算法 | 算法參數 | 持倉數 | 因子組合 |
中證全指 | 30天 | 嶺回歸, SVR, 隨機森林 | 固定參數, 網格搜索 | 5 | 組合1, 組合2, 全因子 |
表 19 算法參數一覽#
算法 | 固定參數 | 網格搜索 |
嶺回歸 | (參考表6) | alpha:[1,10,100] |
SVR | (參考表6) | C:[10,100],gamma:[0.1,1,10] |
隨機森林 | (參考表6) | n_estimators:[100,500,1000] |
表 20 不同參數的算法的收益率及打分#
由表 20 可知:
- 嶺回歸採用不同的參數設置方式下,固定參數的收益率高於網格搜索的收益率。而 SVR 和隨機森林表現不穩定。
- 嶺回歸和隨機森林的模型擬合程度(測試集打分)在不同參數的設置方式下,網格搜索相對於固定參數而言,沒有明顯的提升。而 SVR 的網格搜索的測試集打分則顯著優於固定參數的打分。
- 總體而言,使用網格搜索可以使 SVR 的模型擬合度更高。但是,使用網格搜索並不能帶來收益率的顯著上升,甚至導致收益率的下降。
2.7 不同訓練集長度的算法實證比較#
調節滾動訓練集的長度,回測條件參考表 21 所示,進行回測。回測結果參考表 22 所示:
表 21 回測條件#
表 22 不同算法的回測結果#
由表 22 可知:
- 收益表現最好的是 SVR 算法(訓練集長度:3)。該策略的夏普比率和信息比率也是最優的。
- 從收益來看,增加訓練集長度,並不一定能帶來收益率的增加。線性回歸,嶺回歸,SVR 表現最佳的訓練集長度是 3,隨機森林表現最佳的訓練集長度為 9。
- 從風險來看,增加訓練集長度,並不一定能降低風險。線性回歸,嶺回歽算法隨著訓練集長度的增加,最大回測有下降趨勢。SVR,隨機森林表現不穩定。
3.1 研究總結#
本文構建了基於四種機器學習算法的選股策略,主要以中證全指成分股為股票池,通過機器學習的算法從中選取具有投資價值的股票構建投資組合,期望該組合在未來的一段時間能夠獲取穩健的超額收益。本文的研究既豐富了選股策略的構建方式,也為機器學習如何應用於投資決策提供了一些借鑒。
本文選取中證全指成分股 2013 年 10 月至 2018 年 7 月定期交易日間隔的因子截面數據作為數據樣本,其中 2013 年 10 月 —2018 年 6 月的數據作為訓練集(包括驗證集),2014 年 1 月至 2018 年 7 月數據作為測試集。實證研究過程主要分為因子選擇,策略構建,數據預處理、實證分析四個部分。
本文構建的量化選股模型在 2014 年 1 月 - 2018 年 7 月間累計收益率最高可達到 698%(SVR 算法,持倉數為 5 的情況),年化收益率達到 59%,遠遠超出同期比較基準(中證全指)的業績表現(收益率:42%),可見本文的策略具有較好的選股效果。
通過分組回測比較分析可以發現,在中證全指的情況下,策略業績隨著分位組變化具有顯著的遞減趨勢,說明該模型在投資中證全指成分股時能夠有效區分強勢股和弱勢股。
與線性模型(線性回歸和嶺回歽)對比分析可以發現,本文的投資策略通過非線性模型(SVR 和隨機森林)可以不斷適應市場環境的變化,可以更好地挖掘具有超額收益的股票。非線性模型在收益率、夏普比率和信息比率方面表現不錯,基於非線性模型選股的投資策略能穩定地優於線性模型;從回撤的角度看,非線性模型相比於線性模型不具備明顯優勢,有些時候回撤與線性模型持平甚至大於線性模型。
隨機森林和 SVR 相比,雖然在個別的情況下,隨機森林比 SVR 能獲取更高的超額收益,但是從整體來看,隨機森林的收益率要低於 SVR。但是,在本文因子條件下,隨機森林的預測能力毋庸置疑遠勝於 SVR。
具有正則化優勢的嶺回歸相比線性回歸對策略沒有明顯的提升作用。我們分析有兩個可能的原因。首先,隨著模型的可用數據越來越多,兩個模型的性能都在提升,最終線性回歸的性能追上了嶺回歽。反過來同時驗證了如果有足夠多的訓練數據,正則化變得不那麼重要,並且嶺回歽和線性回歸將具有相同的性能。其次,由於預處理過程中做了去極值和標準化,在降低因子多重共線性的同時減少了極端樣本的出現概率,因而進一步削弱了正則化的價值。所以,在本文的策略中,正則化並沒有對收益率等指標產生明顯的幫助。
隨著因子數的增多,不管是哪種算法,整體上,擬合度和收益率出現了反向關係。兩者剛好相反的原因可以解釋如下:由於本文的量化投資策略是以購買偏離預測值下方最多的股票為投資標的,所以擬合度不高的算法反而更容易發現那些實際值與預測值偏差過大的股票,從而更能精准地買入。
不同的因子組合,不同的持倉數對策略表現具有一定的影響。線性模型在因子增多時收益率下降。非線性模型在因子增多時更具有收益能力。持倉數越少收益率越高,風險也隨之增大。
在本文,我們將市場風格劃分為 9 種,並實證了其中 7 種不同市場風格,分別是持續盤整,持續上漲,持續下跌,盤整 — 上漲切換,盤整 — 下跌切換,上漲 — 下跌切換,下跌 — 上漲切換。每種市場風格都測試了用人工智能算法對於收益率和最大回測的情況。根據測試結果顯示:在市場風格沒有大的切換的時候,線性模型的算法要優於 SVR 和隨機森林的算法,反之,SVR 表現最佳,且該算法的收益遠勝於其他算法。
最後,關於在算法優化方面,不管是採用網格搜索的方法來優化算法的參數,還是採用增加滾動訓練集長度的方法來優化模型泛化程度,都不能帶來收益率的明顯上升,甚至下降。SVR 算法的收益率對是否使用網格搜索或者說參數值的敏感度很高,在使用 SVR 算法時要充分討論其參數的合理性。從收益率和夏普比率的角度來看,線性模型,SVR 算法的回測效果最佳的滾動訓練集長度是 3 個交易月,隨機森林算法的回測效果最佳的滾動訓練集長度是 9 個交易月。
綜上所述,基於機器學習的選股策略應結合表 23 所示進行使用。
表 23 不同算法對應的最佳策略#
3.2 不足與未來改進方向#
有關機器學習如何應用於量化選股的研究一直是投資領域的一個熱點問題。本文在傳統的多因子模型的基礎上,引入機器學習選股,試圖建立更加有效的量化選股策略,但仍然存在以下的幾點不足:
首先,本文的策略在風險控制上顯得不足,尤其是 2015 年牛熊市的市場風格切換異常迅速,本文的量化投資策略在市場高風險時沒能考慮止損等風險控制,導致最大回撤較大。如能加入止盈止損條件或引入擇時模型對股票的買賣時機以及倉位進行判斷,或利用對沖機制對風險進行對沖,有望能控制風險。由於時間的關係,本文在這方面沒有做深度研究。
其次,本文在使用多因子模型時,使用的因子的範圍比較窄,主要基於基本面。基本面以外,比如技術面的因子並沒有考慮進來。
最後,由於實際條件的限制,本文的量化投資策略的評價主要基於歷史數據的回測結果進行比較和評估,沒有後續的實盤模擬及實時交易跟蹤。本文的策略還待於在實盤交易中進行進一步的驗證。
特別感謝:本文基於 JoinQuant 進行開發研究,所用源代碼可參考以下鏈接:
https://www.joinquant.com/view/community/detail/7a63b350815f79bfd4d83ab22d0f291a