王平飛
(四川大學計算機學院,成都610065)
股票市場可以帶來高收益率,如何合理預測股票的走勢,獲得最大的收益一直是業界學者探索的方向。但由于股票數據存在噪聲,影響因素頗多,預測過程較為復雜。人工智能技術的發展為股票預測研究提供了新的思路,各種機器學習算法如SVM、BP、隨機森林[1-3]以及深度學習算法LSTM、LSTM-CNN-CBAM、LSTM-AdaBoost[4-6]等算法相繼在股票收盤價預測中得到了應用,但是以上模型均是針對股票的收盤價進行預測,雖然取得了較好的結果,但是仍然存在誤差,并且預測的結果也存在滯后性,加上投資人普遍更關心漲跌的趨勢。針對這一情況,夏陽雨新提出了基于LSTM的股票多類別預測模型[7],包振山在LSTM收盤價預測模型的基礎上使用GA算法對股票的漲跌信號進行判定,提出了基于LSTM-GA的股票漲跌預測模型[8]。
本文對長短記憶網絡(LSTM)、隨機森林(RF)和集成森林進行了深入研究,提出了一種基于時序集成森林的混合股票多類別預測模型,該模型首先使用LSTM和隨機森林進行收盤價的預測,再將預測的收盤價與前一天預測的收盤價進行對比得到漲跌信號,再使用集成森林對LSTM輸出的時序特征和漲跌信號進行分類,得到最終的股票漲跌趨勢。結合了LSTM提取時序特征的能力和隨機森林的回歸能力以及集成森林強大的分類能力,最后使用平安銀行股票數據進行了驗證,實驗結果表明本文提出的股票預測模型精度更高。
本文中提出的股票預測模型總共有3個步驟。
(1)數據獲取及處理。利用Tushare財經接口包下載平安銀行股票數據000001.sz,并將其歸一化到(0,1)之間。
(2)LSTM-RF股票收盤價預測,并將預測的結果與前一天的預測結果對比得到漲跌信號。
(3)集成森林股票漲跌判定。將LSTM訓練完成后輸出的時序特征數據輸入隨機森林訓練。訓練完成后對測試數據進行預測。如圖1所示。

圖1 股票預測模型


其中C t是當前時刻LSTM的控制單元狀態矩陣,W c是更新權重矩陣,b c是更新的偏執矩陣,Ht是當前LSTM在t時刻的輸出。
隨機森林可用于解決分類和回歸問題,當用于回歸時,每一棵決策樹就是一棵回歸樹(CART),通過最小均方差來進行劃分,對于需要劃分的特征A,可以取到一個任意的劃分點s將數據集劃分為兩個部分,這里記為D1和D2,通過迭代使得劃分后得到的數據集的各自的均方差最小,也就是滿足式(6)。

圖2 LSTM模型

式中的c1和c2分別是劃分的兩個數據集D1和D2的輸出均值,通過這個原則進行反復迭代,直到誤差到達設定范圍內或者是達到迭代次數,算法結束,最后的輸出值就是所有決策樹的均值[10-11],具體的算法1所示。
算法1隨機森林回歸算法
輸入:LSTM提取的時序特征數據
輸出:股票預測的最高價
步驟一:利用Bootstrap算法對LSTM提取時序特征后的樣本進行重抽樣,得到k組新的樣本集{θ1,θ2…θk}。
步驟二:利用上一步劃分得到的k組樣本分別構建決策樹{{T(x,θ1)},{T(x,θ2)}…{T(x,θk)}}。
步驟三:從樣本的M維特征中抽取m個作為節點的分裂特征集,并保持m在隨機森林形成中不變。
步驟四:對于給定的數據樣本X=x下,根據每棵決策樹的觀測值{Y1…Y k}得到單棵決策樹的預測值
步驟五:對每個決策樹的權重取平均值,其中X=X i(i∈{1,2,…n}),t=(1,2,…k),進一步得到每個觀測值
集成森林是由多個RF層間級聯構成的一個森林層,每一層的輸出就是一組預測值,在訓練的過程中會使用測試集判定該層的輸入是否滿足收斂條件,如果不滿足就會將輸出向量與初始輸入數據相連接作為下一層的輸入[12],具體的模型如圖3所示,samples為預處理后的數據向量,輸入第1個森林層后,4個森林分別估計所有樣本的類別概率,然后將其作為輸出向量與原始樣本數據進行拼接,并作為下一層的輸入向量,直至達到預設的循環次數或收斂條件為止。最后,對輸出層的向量求均值,將輸出概率最大的類別作為預測的樣本類別。

圖3 集成森林原理圖
在本文的股票多類別預測中,集成森林用來進行最終的漲跌分類,輸入為LSTM輸出的時序特征和漲跌信號模塊輸出的初步漲跌類別,輸出為股票最終的漲跌類別。
本文實驗使用的數據為平安銀行股票數據,包含了2001年至2020年共4675條股票數據,每條數據包含了ts_code(股票代碼)、trade_date(交易日期)、open(開盤價)、high(最高價)、low(最低價)、close(收盤價)、pre_close(前一天收盤價)、change(價格變動)、pct_chog(價格波動百分比)、vol(成交量)、amount(成交金額)共11個指標,部分數據如圖4所示。
由于每個指標的量綱的影響,比如收盤價,最高價和交易數量之間的統計量級之間存在較大差異,為了消除不同指標的量綱的影響,在訓練之前進行了預處理,將數據歸一化到(0,1)之間,歸一化的公式如式(7)所示[5]。

根據當日股票收盤價與前一天的收盤價格波動的百分比,將股票的漲跌情況分成了2個類別,其中漲幅大于等于0為漲,小于等于0為跌,用2位的二進制數據對4中漲跌情況類別進行表示,具體的如表1所示。

表1 漲跌情況二進制表示
LSTM模型中承擔提取時序特征的角色,實驗中設定了三層的LSTM來提取時序特征,每一層LSTM的節點數均設定為128,每一層LSTM之間設定一個參數位0.1的dropout層,激活函數選用ReLU,時間窗口的大小設定為10。
隨機森林在模塊中承擔著對LSTM提取時序進行收盤價擬合的角色,實驗中將決策樹的棵樹nTree取值為30,損失函數選用Gini,其余參數采用默認參數。
集成森林在模型中負責最終的漲跌類別判定,實驗中將每次輸入的特征數量設定為80,決策樹數量設定為20,具體的參數如表2所示。

表2 集成森林參數設定
本文采用分類準確率、精確率和各漲跌類別的F分數作為評價指標[14],具體如式(8)-式(10)所示:

實驗中使用的數據集為平安銀行股票數據,按照8:2的比例分成訓練集和測試集,首先使用訓練集進行LSTM-RF模塊訓練,訓練完成后對股票的收盤價進行預測,在測試集上的驗證結果如圖5所示。
從圖5中不難看出本文的LSTM-RF收盤價預測模塊在測試集上表現出了很大的優勢,預測值與實際值幾乎完全重合。
LSTM-RF模塊訓練完成后通過漲跌信號判別模塊,將當前數據樣本的預測值與其一天樣本的預測值對比,得到漲跌信號,漲跌信號的劃分如表2所示。然后將訓練集的漲跌信號與LSTM輸出的訓練集樣本的時序特征輸入集成森林進行訓練,訓練完成后對測試集進行漲跌情況預測,實驗結果如表4所示。

圖4 股票數據

圖5 LSTM-RF測試集真實值和預測值對比
從表4中可以看出本文算法LSTM-RF-DF在對各類別樣本的檢測率(Recall)、精確度(Precision)、和f1分數三個指標上均優于傳統的LSTM算法和改進后的LSTM-RF算法,對漲跌兩類樣本的檢測率均達到了70%以上。傳統的LSTM和LSTM-RF兩種算法對樣本的識別很不平衡,LSTM對漲類別預測準確率為63%,但對跌樣本的預測準確率進36%,二者相差27%,LSTM-RF雖然準確率有了一定的提高,但是仍然表現出這種不平衡性。本文算法在LSTM-RF算法基礎上使用的集成森林對LSTM-RF的預測結果進行了二次判定,不僅在三個指標上均優于另外兩種算法,而且對兩類樣本的檢測準確率僅相差5%,對樣本識別的平衡度遠遠高于另外兩種算法。

表4 三種算法二分類預測結果/%
圖6和圖7給出了三種算法在整體的檢測準確率和平均精確度,平均f1分數三個指標上的對比,結果表明,本文算法在整體的預測準確率和精確度乃至發分數三個指標上仍然表現出了優勢,在整體的預測準確率這一指標上高出另外兩種算法20%,進一步體現了本文算法的優勢。

圖6 三種算法的2類別預測準確率對比

圖7 三種算法的2類別預測平均精確度和f分數對比
為了進一步驗證本文提出算法的優勢,將股票的收盤價漲幅分成了4個類別進行實驗驗證(其中大于3%為大漲,0到3%之間為小漲,-3%到0之間為小跌,小于-3%為大跌),得到的結果如表7-表7所示。

表5 LSTM-RF-DF算法預測/%

表6 LSTM-RF算法預測/%

表7 LSTM算法預測/%
實驗結果表明,4類別預測的精度明顯低于2類別預測,由此也可以看出股票的價格波動并非僅僅收到某些指標的影響,但是在4類別預測上原始的LSTM算法表現出了很大的劣勢,大漲和大跌兩個類別完全無法識別。而LSTM-RF算法在一定程度上對大跌和大漲由識別能力,但準確率均沒超過5%。本文算法在LSTM-RF的基礎上使用集成森林對預測結果進行了二次判定,在對大跌的檢測率上比LSTM-RF增加了7%,大漲的檢測率上增加了6%。此外,在精確度和f分數兩個指標結果也表明本文算法優于LSTM-RF和原始的LSTM算法。

圖8 三種算法的4類別預測準確率對比
本文結合了LSTM提取時序特征的能力、隨機森林算法強大的擬合能力以及集成森林的多類別預測優勢,提出了基于時序集成森林的股票多類別預測模型,該算法首相將原始股票數據輸入LSTM模塊,得到股票數據的時序特征,然后利用RF預測收盤價,并根據收盤價預測出股票的漲幅,與LSTM輸出的時序特征一起作為集成森林的輸入,最終得到股票下一天的漲跌情況。最后在平安銀行股票數據上進行了二分類預測和4分類預測,得到的結果均表明本文算法優于原始的LSTM算法和LSTM-RF算法。下一步將考慮情感因素對股價的印象,搭建出更加完善的股票預測模型。