價值選股策略——基於機器學習演算法
文獻回顧
回顧價值策略
價值策略通俗地講就是買入便宜股票,賣出昂貴股票,思想非常簡單和直觀。但是實際操作上這非常困難,因為我們沒辦法直接觀察股票的真實價值。投資者可以從不同的視角採用不同的指標來估計股票內在價值。在股票市場中,最傳統的方法就是通過會計報表的各個條目得到企業估值,我們可以從資產負債表得到市凈率,從利潤表得到資產收益率,從現金流量表得到現金流比率。Ma和Smith(2014)在《Sorting through the trash》中提到通過市凈率、預測下期資產收益率和股價/現金流這三個指標合成一個綜合的「價值」因子,可以顯著提升策略表現(MA採取了三個因子Z得分的總和來合成「價值」因子)。
是否可以對公允價值進行建模?
雖然有很多種企業估值方法,2017年8月J.P.Morgan發表了文章《Value Strategies based on Machine Learning》,提出了一種通過大量股票特徵來預測公司市凈率的統計建模方法。換句話說,作者是通過預測公司市凈率,然後與實際市凈率進行比較來得到「公允價值」,以便發現哪些被「錯誤定價」的股票,識別出哪些股票被高估,哪些股票被低估,然後開發出買入低估股票,賣出高估股票的策略。
為什麼要預測市凈率?
首先,市凈率本身就是公司估值的一個常用指標,並被Ma和Smith實踐證明是企業價值很好的一個度量。其次,市凈率這樣的指標來自於財務指標,而財務指標通常很長一段時間才發生變化,因此比較穩定。最後,機器學習、深度學習策略被懷疑的很大一個原因就是行情數據信噪比低,因此財務數據信噪比較高,建模更有效。
價值選股策略
我們在11月介紹過J.P.Morgan關於機器學習進行股票策略開發的最新文章《Value Strategies based on Machine Learning》(基於機器學習的價值投資策略)。與常規演算法預測目標不同,該文選擇股票「公允價值」作為預測目標。作者選擇37個股票特徵作為輸入數據,使用由懲罰回歸(LASSO),梯度提升(XGBoost)和線性回歸3個模型組成的組合模型,以MSCI國家指數中股票為投資標的,預測股票下個月的「公允價值」——市凈率。以預測市凈率與當前市凈率之差作為「錯誤定價」的判斷依據選股,買入被低估的股票,賣出被高估的股票。然後,作者發現使用毛利潤與資產之比(Gross-Profit-to-Assets,GP/A)而不是凈資產收益率(ROE)作為衡量盈利能力的標準,在需買入的低估值股票中,保留前40%GP/A的股票;在需賣出的高估值股票中,保留後40%GP/A的股票,能夠在價值策略的基礎上有所改善。最後,作者通過選擇RavenPack新聞情緒數據作為交易策略的補充,建立情緒型號: 選取時間相關性(「Relevance」)數值在70以上的事件,求取月份情緒值。通過計算不同情緒值閾值對組合效果進行驗證,發現移除買入組合中情緒值小於-0.3的股票,移除賣出組合中情緒大於0.3的股票的交易策略能進一步改善價值策略。
研究計劃
我們希望能夠將J.P.Morgan的價值策略運用在中國A股市場,驗證該策略的有效性。策略思路和J.P.Morgan一致,通過大量的股票特徵來預測市凈率因子,然後根據預測出來的市凈率因子與實際市凈率之差作為股票「錯誤定價」的依據,然後買入被低估的股票,賣出高估的股票。
數據和演算法
數據獲取
Morgan選股池是來自於39個國家的2000隻股票(見下表),但本文的選股池是全A股市場,目前已經超過3000隻股票。我們獲取2010年1月1日至2018年1月1日的全A市場所有股票數據,其中樣本內數據為2010年1月1日至2015年1月1日,樣本外數據為2015年1月1日至2018年1月1日。樣本外的數據段即為回測的區間段。
特徵確定
Morgan的原文中共有37個股票特徵,這些特徵主要反映了公司的盈利能力、運營效率、財務質量、成長性。見圖1。
A股的財務報表和美股存在一些差異,我們選取了共22個股票特徵來預測公司市凈率。見圖2。
數據標註
本文實驗的目的是預測市凈率來實現「公允價值」的建模,因此預測的重點是市凈率,於是在訓練集數據標註中,我們採取下一期的市凈率數據作為標註依據。這樣建模的直觀意義是,我們希望找到24個股票特徵與代表企業價值的市凈率的內在關係,然後能夠在樣本外根據公司的24個特徵預測市凈率,挖掘出哪些公司可能被低估。
模型選擇
本文選擇以XGBoost演算法建模,該演算法全稱為eXtreme Gradient Boosting,是在GBDT的基礎上對boosting演算法進行的改進,內部決策樹使用的是回歸樹,該演算法適用於分類和回歸,主要優點是:速度快,效果好,能處理大規模數據,支持多種語言和自定義損失函數。僅在2015年,在Kaggle競賽中獲勝的29個演算法中,有17個使用了XGBoost庫,而作為對比,近年大熱的深度神經網路方法,這一數據則是11個。在KDDCup 2015 競賽中,排名前十的隊伍全部使用了XGBoost庫。XGBoost不僅學習效果很好,而且速度也很快,相比梯度提升演算法在另一個常用機器學習庫scikit-learn中的實現,XGBoost的性能經常有十倍以上的提升。
特徵預處理
和Morgan思想一致,本文也是預測一年之後的市凈率。鑒於國內A股公司最遲在次年4月最後一天發布上一年財務報表,因此我們以次年5月第一個交易日為月份T,預測T+12月份的市凈率數據。本文會對24個股票特徵數據進行去極值和橫截面標準化處理。「公允價值」被定義為T+12月市凈率減去T期市凈率,為了保證數據的可比性,參照了Morgan的處理方法——也對「公允價值」進行了橫截面標準化處理以便發現哪些是低估股票,哪些是高估股票。
訓練和預測
模型訓練
我們將訓練集內80%的數據拿來訓練模型,剩下數據拿來驗證模型。為了防止機器學習演算法XGBoost對訓練數據過擬合,我們模型超參數採取了常規設置。其中比較重要的幾個參數為:樹的最大深度(max_depth設置為3),學習速率(eta設置為0.1),提升樹的數量(n_estimators設置為100),因為我們想預測市凈率的具體數值,所以採用回歸演算法(objective設置為reg:linear),預測連續性變數,迭代數量(num_round設置為100)。
模型預測
當我們訓練出XGBoost模型後,根據樣本外(2015年1月1日至2018年1月1日包含24個特徵的股票數據,直接將該模型用來預測該時間區間上的股票市凈率數據。
公允價值
「公允價值」的計算為預測市凈率數據和實際市凈率之差,具體計算公式為:
因為在訓練集數據標註時,我們採取的是T+12月的市凈率數據,因此預測市凈率即為T+12月的市凈率數據,實際市凈率為T月市凈率,為了便於股票之間的「公允價值」可以比較,我們對「公允價值」進行標準化——將預測市凈率與實際市凈率之差再除以過去12個月市凈率的標準差。
回測交易
我們根據預測的「公允價值」進行選股,「公允價值」越高的股票越值得投資。和Morgan選股處理一樣,選股時有兩個過濾條件,首先,不買入流通市值最小的10%的股票,其次,不買入過去一個月平均成交金額最低的10%的股票。
我們根據預測的「公允價值」進行選股,「公允價值」越高的股票越值得投資。和Morgan選股處理一樣,選股時有兩個過濾條件,首先,不買入流通市值最小的10%的股票,其次,不買入過去一個月平均成交金額最低的10%的股票。
因為是通過年報出來之後的5月第一個交易日預測下一年的市凈率數據來計算「公允價值」選股,因此調倉周期為1年。持有一年之後,再根據新的選股結果進行調倉。回測結果如下:
策略年化收益10.27%,最大回撤為11.54%,年化波動率為9.22%。Morgan測試結果年化收益3.2%,最大回撤為6.7%,年化波動率為3.6%。相比之下,中國市場的價值投資策略收益更高、風險也更高。
參考文獻
- 《Value Strategies based on Machine Learning》
- 《Big Data and AI Strategies》
- 《XGBoost 入門系列第一講》
- XGBboost Python API
附錄
代碼: 基於XGBoost的價值選股策略代碼
《量化研究每周精選》每周一期,為大家提精選研報、前沿研究、熱門文章等優質內容。
查看所有 量化研究每周精選。歡迎投稿 (i@bigquant.com)。- 前往 BigQuant社區 查看原文並參與討論:BigQuant社區
- 加入 人工智慧量化投資交流群,與大牛共討人工智慧量化話題:微信搜索 bigq100,添加微信群管理員微信,附上姓名、所在機構、部門和職位,審核後管理員會邀請您入群。
- 關注 BigQuant 微信公眾號,及時獲取新鮮資訊:微信搜索 BigQuant, 獲取更多人工智慧、Machine Learning、量化投資相關文章。
推薦閱讀: