丁睦坤 柴嘯龍
(廣東財經大學 廣東廣州 510320)
相較已成熟的房地產市場,中國股市還處于發展階段。雖然我國股票市場尚未成熟,但關于個股歷史數據和指標的分析仍具有重要意義。因為無論市場發展到何種階段,其趨勢都會遵循一個周期循環,在歷史數據中隱藏了很多有用信息,利用機器學習可以比人工更加細節有效地提取這些信息,幫助觀察市場情況。
最初將深度學習算法與股票市場結合發生在1988年,Rodríguez等(2000)將神經網絡模型運用到對IBM公司的收益率預測中,自此之后,越來越多的研究人員將機器學習算法運用到金融市場中。在國外研究領域中,Nelson等(2017)、Roondiwala等(2017)將LSTM模型應用到股市中。2017年,Selvin等(2017)已將LSTM對股市數據的預測效果與RNN及CNN進行比較。在國內,陳衛華、徐國祥(2018)使用長短時間記憶模型(LSTM)對滬深300中的個股進行預測并進行了精度和比較研究,發現LSTM對個股數據預測的適用性比其他模型更高。Kim等(2019)使用特征融合長短時記憶—卷積神經網絡(LSTM-CNN)對美股的標普500指數中的股票進行預測,發現準確率更高了。雖然前面的研究在模型的改進及新指標的選取都有所提升,但在指標選取方面還較為薄弱,對指標的取舍沒有合理的解釋,于是,國內學者劉玉敏等(2021)發表了關于結合隨機森林(RandomForest)與長短時間記憶模型(LSTM)對個股的指標進行合理的取舍再進行預測分析[8],發現準確率有了更大的提高。本文參考了劉玉敏等(2021)搭建的集合模型,并結合自定義研究的指標及主觀定義的模型,對個股未來走勢進行預測。
與以往機器學習對股票數據進行預測的研究對象相比,本文在閱讀金融書籍的基礎上,參考過去數據,編寫代碼提取個股這段時期內的支撐壓力位,即上漲的壓力點和下跌的底部,從而得到新的自定義指標,并利用自定義指標對RF-LSTM模型的預測結果進行量化。
在對比模型上,本文采用基于自回歸的AR時間序列分析模型與隨機森林的集合模型,在對比模型上較為新穎。
根據隨機抽樣的原則,本文從東方財富數據接口中隨機抽取30只A股個股的數據作為研究對象,劃分訓練集和測試集。通過爬蟲程序得到股票歷史數據后,本文取個股的11個屬性,即日期、開盤價、收盤價、最高價、最低價、成交量、成交額、振幅、漲跌幅、漲跌額和換手率。
在獲取歷史數據后,本文根據參考論文和金融書籍的建議,選取9個常用的二級指標即MACD、KDJ、BOLL、SAR、RSI、OBV、W%R、DPO、ROC。選取這些指標的原因是其能夠較好地反映出股票價格的趨勢和動量,且已被廣泛使用和研究。
通過箱線圖分析已有數據,未發現明顯的異常值,但可以觀察到數據集存在大量缺失值。一級指標均無缺失值,但由于二級指標基于歷史數據生成,在前期存在較多的缺失值,同時兩個自定義指標存在缺失值。由于時間窗口設置為150天且向后滾動了3天,則第154條數據才會出現相應的支撐壓力位。
其中,兩個自定義指標的缺失數量超過100條,屬于嚴重缺失;而其他二級指標的缺失情況并不很嚴重,均在30條以內。因此,本文采用最早一天的數據對這些二級指標進行填補。對于兩個缺失嚴重的自定義指標,本文將以第154條數據的支撐壓力線為基礎,采用同樣的規律進行量化填補。
本文使用歷史的最高價和最低價計算出股票價格的頂部和底部,在時間窗口設置為150天的情況下,通過rolling方法在原始數據上進行滾動處理。再通過shift函數向前移動的3個時間步數(天),利用得到的數值及頂部及19.1%、38.2%、50%、61.8%、80.9%的下跌幅度還有底部,得到7個數值,即對應的支撐壓力線。
本文將當日收盤價與對應當天的支撐壓力位進行比對,自定義一個新的指標將當日股價位置量化為1~8的數字,命名為“150均移3日支撐壓力位-指標1”,表示當日股價在長階段的位置。再利用linspace函數,將當日股價位于的小階段,即最接近的兩根線之間等分為4份,將中間的兩份量化為2,低位一份量化為1,高位一份量化為3,命名為“150均移3日支撐壓力位-指標2”,表示當日股價在短階段的位置。
隨機森林能處理不同類型的問題,處理分類問題的隨機森林由分類樹集成,以及針對股票數據本文要使用到的處理預測回歸問題的隨機森林模型由回歸樹集成。本文利用boost-strap 抽樣方法,由隨機向量,即回歸樹構成組合模型。
該模型將數值型變量作為預測變量,生成多元非線性回歸隨機森林模型。這些樹{h(G, θk)}取的均值形成該模型的預測值,且該模型需要滿足一個條件:由各自相互獨立的訓練集形成隨機森林。
在設定森林的參數時,本文采用k折交叉驗證模型選出最優參數,最終得到的最佳選擇是100個決策樹、最大樹深為7、特征選擇數為7成。
建立RF模型的主要目的是抽取信息重要程度,以給出27個指標的最終排名,進而幫助建立LSTM模型。具體地,本文對每個指標進行重要程度評估,給出其在股票收盤價預測中的相對重要程度,某個股(不同個股特征排名不同)的特征重要排名如表1所示(展示27個指標中的前5個)。

表1 特征排名
訓練好的隨機森林模型對測試集的預測結果R方檢驗為0.9965。
結合上一步實現的隨機森林模型,本文利用statsmodels模塊中的AutoReg方法建立AR模型,設置的滯后階數p為1。由于之前檢驗隨機森林模型的測試集是無序的,在傳入參數時重新劃分測試集,以數據集(以日期為順序)最后200條數據為預測對象,傳入AR模型對各項指標進行預測,再將預測結果與上文建立好的隨機森林RF模型相結合,得到新的收盤價預測結果。在重新劃分測試集之后,本文將數據集的全部數據傳入AR模型,并對未來的數據進行預測。
1.5.1 LSTM模型原理及對股票數據的適用性
長短期記憶模型LSTM是一種遞歸神經網絡(RNN),在處理時序數據時比傳統的MLP等模型能夠更好地捕捉到其序列性和長期依賴關系。在股票價格預測任務中,過去一段時間的收盤價、開盤價、最高價、最低價等信息都與未來的股票價格有一定的相關性,具有一定的時序性。
具體的模型公式如下:
關于輸入門的運算:
關于遺忘門的運算:
關于記憶單元的更新運算:
關于輸出門的運算:
LSTM模型的最終輸出:
式(2)~(6)中:it、ft、ot、ct分別代表輸入門、遺忘門、輸出門和記憶單元的狀態;ReLU 代表ReLU激活函數;tanh 代表雙曲正切函數; W 和 b 分別代表權重和偏置參數;⊙表示逐元素相乘操作。
不同于其他研究,本文采用ReLU函數替代常用的Sigmoid函數作為激活函數,因為Sigmoid函數處理梯度消失和梯度爆炸問題時存在一定限制。相比之下,ReLU函數的計算速度更快,并且在處理梯度問題時更加穩定,可以幫助LSTM模型更好地處理股票數據。
1.5.2 LSTM模型的指標選取與建立
在建立LSTM模型時,有許多參數需要設置,本文通過逐次檢驗誤差的方法,通過獲取模型對測試集的多種誤差檢驗,對參數進行調整,經過篩選,最終選擇時間步數n_steps設置為50。
在設置LSTM隱藏層神經元數量units、訓練迭代次數epochs、批大小batch_size的具體輸入參數時,本文使用3折交叉檢驗模型對指標進行選取,從字典中選出最佳參數,同時對不同的激活函數進行檢驗,驗證選擇ReLU的想法是否對應。最終得到的最佳參數選擇:神經元個數是250個,訓練次數為160,批大小為32;而在激活函數選擇時,3折交叉檢驗在ReLU、TanH、Sigmoid中選擇了ReLU作為激活函數,符合本文的最初選擇。
本文搭建LSTM神經網絡模型是基于keras深度學習框架。關于搭建好的模型,考慮到股票數據的特性,在損失函數選擇均方誤差(MSE),在優化器選擇適應性矩估計(Adam)。
1.5.3 模型的改進
本文通過上一步建立的初步模型,結合前文隨機森林RF模型的指標排名對指標選擇進行篩選改進,并通過列表對排序后的指標進行裝填,利用循環依次將指標輸入LSTM模型,再通過判斷模型的誤差,得到最合適的指標搭配。
結果發現,當去除排名倒數8位指標后將剩余指標輸入模型時,誤差評分最高,四種誤差MSE、RMSE、MAE、R2分別為:[0.030664,1.417732,0.732709,0.99075]。
在對多只股票進行指標選取時,本文發現對于不同個股的指標排名會有明顯浮動,在指標選取時皆舍去排名倒數8個指標,選擇剩余的指標建立最終LSTM模型。
在完成數據的預處理后,本文將30只股票的數據劃分為訓練集和測試集兩部分。其中,訓練集用于訓練模型,測試集用于評估模型的預測準確性。
2.1.1 AR-RF模型對過去數據預測的誤差
在重新劃分測試集后,利用AR模型對各指標進行預測,并將預測結果可視化(見下圖1/2/3),從樣本集中挑選了三只不同走勢的個股(下面的案例皆以這三只個股)其中黑線為真實K線,紅線為AR-RF模型預測結果,可以發現AR-RF模型的預測幅度皆過于單一,大部分個股預測的走勢趨近水平線,分析的價值很小。

圖1/2/3 AR-RF對測試集的預測結果
2.1.2 RF-LSTM模型對過去數據預測的誤差
在確定好輸入指標、時間步長、神經元個數等因素后,本文選擇“epochs=160”作為訓練輪次,并根據評價指標R方誤差、均方根誤差RMSE等指標評估模型的效果(得到的誤差評估效果見表2)。訓練好模型后,對劃分好的測試集進行預測,得到30只個股的R方均值為0.871159193,表明模型具有很好的泛化能力和預測精度(個股的可視化結果見下圖4/5/6)。

圖4/5/6 RF-LSTM對測試集預測的結果

表2 RF-LSTM對測試集預測的誤差
由此可以看到,模型對歷史數據的預測十分精準。
2.2.1 RF-LSTM模型對未來數據的預測
從上文AR-RF模型對測試集的歷史數據預測可以看到,該模型對具有周期性的數據預測效果不佳;對未來數據的預測可以看到,AR-RF模型無法有效利用歷史數據的信息。相反RF-LSTM模型則能很好地給出一個能更好地反映歷史數據的周期性信息。
將預測時長設置為50天,預測可視化結果如圖7/8/9所示。

圖7/8/9 RF-LSTM對未來趨勢的預測
雖然能更好的觀察到RF-LSTM模型預測結果的周期性,但由于預測的時間跨度太長,且帶有劇烈的波動使預測結果難以達到參考的目的。針對這個問題,本文決定最終將預測的趨勢量化成一個投資參考值,結合其它因素,給出一個更加合理的量化結果。
2.3.1 量化方法
在拿到預測數據后,本文主觀定義了一個公式,用于實現量化預測結果及不同個股之間的比較:
式(7)中:F NS(Fi n alSc ore)為最終量化的結果;SC(SelfCol)模型輸出結果及LL(LastLevel)最新交易日的支撐壓力位的定義公式如下:
式(12)(13)中:i-1和j-1是現階段最后一個交易日的自定義指標1和自定義指標2,Z1、Z2是兩個根據自定義指標1和指標2的數據分布實現的,用來實現標準化的數組,分別是
本文通過i-1和j-1從Z1、Z2取出對應的數值,引入LL1和LL2是為了展現當前最新交易數據所處的位置在量化模型中產生的影響,定義Z1和Z2數組是為了保證不同股票之間的同量級,方便比較。
2.3.2 量化結果分析
將股票的模型預測結果代入量化預測公式進行處理,可以得到以下數據(見表3)。

表3 各只個股的自定義指標
模型對這30只個股的給分情況差異較大,其中代碼為601155的個股的量化結果最高,FNS達到89.875,而代碼為002229的個股量化結果最低,FNS為-67.015。
2.3.3 量化結果聚類
從上文的量化結果可視化可以看出,模型給出的得分沒有明顯區分,本文在分析結果時,考慮使用輪廓系數結合Kmeans模型對量化結果進行聚類,聚類對象包括個股的FNS、RLM、LDP等屬性。結果發現,當將個股樣本分為3個類時最為合理,對分類后的數據進行分析,模型將FNS在[-67.015,-42.687]之間的個股分為一類,FNS在[-37.893,14.689]之間的個股分為一類,FNS在[22.144, 89.875]之間的個股分為一類,本文按照FNS的區間將三個類分別命名為“數據悲觀”“數據觀望”及“數據樂觀”。針對隨機抽取的個股樣本,有43.44%的個股處于“數據觀望”范圍,即最終模型對當前大部分個股持“觀望”態度。
綜上所述,本文對于研究建立的RF-LSTM模型的預測結果進行誤差檢驗,30只個股的平均R方為0.87,可見RFLSTM模型對股票數據的適用性。本文結合自定義量化公式實現該模型的目的是將歷史數據中的信息量化作為參考值,以期降低決策者做出判斷的噪聲。在今后的研究方向上,還會考慮引進更多模型及利用能獲取的信息因素對預測結果量化進行二次改進。