王平飛
(四川大學(xué)計算機(jī)學(xué)院,成都610065)
股票市場可以帶來高收益率,如何合理預(yù)測股票的走勢,獲得最大的收益一直是業(yè)界學(xué)者探索的方向。但由于股票數(shù)據(jù)存在噪聲,影響因素頗多,預(yù)測過程較為復(fù)雜。人工智能技術(shù)的發(fā)展為股票預(yù)測研究提供了新的思路,各種機(jī)器學(xué)習(xí)算法如SVM、BP、隨機(jī)森林[1-3]以及深度學(xué)習(xí)算法LSTM、LSTM-CNN-CBAM、LSTM-AdaBoost[4-6]等算法相繼在股票收盤價預(yù)測中得到了應(yīng)用,但是以上模型均是針對股票的收盤價進(jìn)行預(yù)測,雖然取得了較好的結(jié)果,但是仍然存在誤差,并且預(yù)測的結(jié)果也存在滯后性,加上投資人普遍更關(guān)心漲跌的趨勢。針對這一情況,夏陽雨新提出了基于LSTM的股票多類別預(yù)測模型[7],包振山在LSTM收盤價預(yù)測模型的基礎(chǔ)上使用GA算法對股票的漲跌信號進(jìn)行判定,提出了基于LSTM-GA的股票漲跌預(yù)測模型[8]。
本文對長短記憶網(wǎng)絡(luò)(LSTM)、隨機(jī)森林(RF)和集成森林進(jìn)行了深入研究,提出了一種基于時序集成森林的混合股票多類別預(yù)測模型,該模型首先使用LSTM和隨機(jī)森林進(jìn)行收盤價的預(yù)測,再將預(yù)測的收盤價與前一天預(yù)測的收盤價進(jìn)行對比得到漲跌信號,再使用集成森林對LSTM輸出的時序特征和漲跌信號進(jìn)行分類,得到最終的股票漲跌趨勢。結(jié)合了LSTM提取時序特征的能力和隨機(jī)森林的回歸能力以及集成森林強(qiáng)大的分類能力,最后使用平安銀行股票數(shù)據(jù)進(jìn)行了驗證,實驗結(jié)果表明本文提出的股票預(yù)測模型精度更高。
本文中提出的股票預(yù)測模型總共有3個步驟。
(1)數(shù)據(jù)獲取及處理。利用Tushare財經(jīng)接口包下載平安銀行股票數(shù)據(jù)000001.sz,并將其歸一化到(0,1)之間。
(2)LSTM-RF股票收盤價預(yù)測,并將預(yù)測的結(jié)果與前一天的預(yù)測結(jié)果對比得到漲跌信號。
(3)集成森林股票漲跌判定。將LSTM訓(xùn)練完成后輸出的時序特征數(shù)據(jù)輸入隨機(jī)森林訓(xùn)練。訓(xùn)練完成后對測試數(shù)據(jù)進(jìn)行預(yù)測。如圖1所示。
圖1 股票預(yù)測模型
其中C t是當(dāng)前時刻LSTM的控制單元狀態(tài)矩陣,W c是更新權(quán)重矩陣,b c是更新的偏執(zhí)矩陣,Ht是當(dāng)前LSTM在t時刻的輸出。
隨機(jī)森林可用于解決分類和回歸問題,當(dāng)用于回歸時,每一棵決策樹就是一棵回歸樹(CART),通過最小均方差來進(jìn)行劃分,對于需要劃分的特征A,可以取到一個任意的劃分點s將數(shù)據(jù)集劃分為兩個部分,這里記為D1和D2,通過迭代使得劃分后得到的數(shù)據(jù)集的各自的均方差最小,也就是滿足式(6)。
圖2 LSTM模型
式中的c1和c2分別是劃分的兩個數(shù)據(jù)集D1和D2的輸出均值,通過這個原則進(jìn)行反復(fù)迭代,直到誤差到達(dá)設(shè)定范圍內(nèi)或者是達(dá)到迭代次數(shù),算法結(jié)束,最后的輸出值就是所有決策樹的均值[10-11],具體的算法1所示。
算法1隨機(jī)森林回歸算法
輸入:LSTM提取的時序特征數(shù)據(jù)
輸出:股票預(yù)測的最高價
步驟一:利用Bootstrap算法對LSTM提取時序特征后的樣本進(jìn)行重抽樣,得到k組新的樣本集{θ1,θ2…θk}。
步驟二:利用上一步劃分得到的k組樣本分別構(gòu)建決策樹{{T(x,θ1)},{T(x,θ2)}…{T(x,θk)}}。
步驟三:從樣本的M維特征中抽取m個作為節(jié)點的分裂特征集,并保持m在隨機(jī)森林形成中不變。
步驟四:對于給定的數(shù)據(jù)樣本X=x下,根據(jù)每棵決策樹的觀測值{Y1…Y k}得到單棵決策樹的預(yù)測值
步驟五:對每個決策樹的權(quán)重取平均值,其中X=X i(i∈{1,2,…n}),t=(1,2,…k),進(jìn)一步得到每個觀測值
集成森林是由多個RF層間級聯(lián)構(gòu)成的一個森林層,每一層的輸出就是一組預(yù)測值,在訓(xùn)練的過程中會使用測試集判定該層的輸入是否滿足收斂條件,如果不滿足就會將輸出向量與初始輸入數(shù)據(jù)相連接作為下一層的輸入[12],具體的模型如圖3所示,samples為預(yù)處理后的數(shù)據(jù)向量,輸入第1個森林層后,4個森林分別估計所有樣本的類別概率,然后將其作為輸出向量與原始樣本數(shù)據(jù)進(jìn)行拼接,并作為下一層的輸入向量,直至達(dá)到預(yù)設(shè)的循環(huán)次數(shù)或收斂條件為止。最后,對輸出層的向量求均值,將輸出概率最大的類別作為預(yù)測的樣本類別。
圖3 集成森林原理圖
在本文的股票多類別預(yù)測中,集成森林用來進(jìn)行最終的漲跌分類,輸入為LSTM輸出的時序特征和漲跌信號模塊輸出的初步漲跌類別,輸出為股票最終的漲跌類別。
本文實驗使用的數(shù)據(jù)為平安銀行股票數(shù)據(jù),包含了2001年至2020年共4675條股票數(shù)據(jù),每條數(shù)據(jù)包含了ts_code(股票代碼)、trade_date(交易日期)、open(開盤價)、high(最高價)、low(最低價)、close(收盤價)、pre_close(前一天收盤價)、change(價格變動)、pct_chog(價格波動百分比)、vol(成交量)、amount(成交金額)共11個指標(biāo),部分?jǐn)?shù)據(jù)如圖4所示。
由于每個指標(biāo)的量綱的影響,比如收盤價,最高價和交易數(shù)量之間的統(tǒng)計量級之間存在較大差異,為了消除不同指標(biāo)的量綱的影響,在訓(xùn)練之前進(jìn)行了預(yù)處理,將數(shù)據(jù)歸一化到(0,1)之間,歸一化的公式如式(7)所示[5]。
根據(jù)當(dāng)日股票收盤價與前一天的收盤價格波動的百分比,將股票的漲跌情況分成了2個類別,其中漲幅大于等于0為漲,小于等于0為跌,用2位的二進(jìn)制數(shù)據(jù)對4中漲跌情況類別進(jìn)行表示,具體的如表1所示。
表1 漲跌情況二進(jìn)制表示
LSTM模型中承擔(dān)提取時序特征的角色,實驗中設(shè)定了三層的LSTM來提取時序特征,每一層LSTM的節(jié)點數(shù)均設(shè)定為128,每一層LSTM之間設(shè)定一個參數(shù)位0.1的dropout層,激活函數(shù)選用ReLU,時間窗口的大小設(shè)定為10。
隨機(jī)森林在模塊中承擔(dān)著對LSTM提取時序進(jìn)行收盤價擬合的角色,實驗中將決策樹的棵樹nTree取值為30,損失函數(shù)選用Gini,其余參數(shù)采用默認(rèn)參數(shù)。
集成森林在模型中負(fù)責(zé)最終的漲跌類別判定,實驗中將每次輸入的特征數(shù)量設(shè)定為80,決策樹數(shù)量設(shè)定為20,具體的參數(shù)如表2所示。
表2 集成森林參數(shù)設(shè)定
本文采用分類準(zhǔn)確率、精確率和各漲跌類別的F分?jǐn)?shù)作為評價指標(biāo)[14],具體如式(8)-式(10)所示:
實驗中使用的數(shù)據(jù)集為平安銀行股票數(shù)據(jù),按照8:2的比例分成訓(xùn)練集和測試集,首先使用訓(xùn)練集進(jìn)行LSTM-RF模塊訓(xùn)練,訓(xùn)練完成后對股票的收盤價進(jìn)行預(yù)測,在測試集上的驗證結(jié)果如圖5所示。
從圖5中不難看出本文的LSTM-RF收盤價預(yù)測模塊在測試集上表現(xiàn)出了很大的優(yōu)勢,預(yù)測值與實際值幾乎完全重合。
LSTM-RF模塊訓(xùn)練完成后通過漲跌信號判別模塊,將當(dāng)前數(shù)據(jù)樣本的預(yù)測值與其一天樣本的預(yù)測值對比,得到漲跌信號,漲跌信號的劃分如表2所示。然后將訓(xùn)練集的漲跌信號與LSTM輸出的訓(xùn)練集樣本的時序特征輸入集成森林進(jìn)行訓(xùn)練,訓(xùn)練完成后對測試集進(jìn)行漲跌情況預(yù)測,實驗結(jié)果如表4所示。
圖4 股票數(shù)據(jù)
圖5 LSTM-RF測試集真實值和預(yù)測值對比
從表4中可以看出本文算法LSTM-RF-DF在對各類別樣本的檢測率(Recall)、精確度(Precision)、和f1分?jǐn)?shù)三個指標(biāo)上均優(yōu)于傳統(tǒng)的LSTM算法和改進(jìn)后的LSTM-RF算法,對漲跌兩類樣本的檢測率均達(dá)到了70%以上。傳統(tǒng)的LSTM和LSTM-RF兩種算法對樣本的識別很不平衡,LSTM對漲類別預(yù)測準(zhǔn)確率為63%,但對跌樣本的預(yù)測準(zhǔn)確率進(jìn)36%,二者相差27%,LSTM-RF雖然準(zhǔn)確率有了一定的提高,但是仍然表現(xiàn)出這種不平衡性。本文算法在LSTM-RF算法基礎(chǔ)上使用的集成森林對LSTM-RF的預(yù)測結(jié)果進(jìn)行了二次判定,不僅在三個指標(biāo)上均優(yōu)于另外兩種算法,而且對兩類樣本的檢測準(zhǔn)確率僅相差5%,對樣本識別的平衡度遠(yuǎn)遠(yuǎn)高于另外兩種算法。
表4 三種算法二分類預(yù)測結(jié)果/%
圖6和圖7給出了三種算法在整體的檢測準(zhǔn)確率和平均精確度,平均f1分?jǐn)?shù)三個指標(biāo)上的對比,結(jié)果表明,本文算法在整體的預(yù)測準(zhǔn)確率和精確度乃至發(fā)分?jǐn)?shù)三個指標(biāo)上仍然表現(xiàn)出了優(yōu)勢,在整體的預(yù)測準(zhǔn)確率這一指標(biāo)上高出另外兩種算法20%,進(jìn)一步體現(xiàn)了本文算法的優(yōu)勢。
圖6 三種算法的2類別預(yù)測準(zhǔn)確率對比
圖7 三種算法的2類別預(yù)測平均精確度和f分?jǐn)?shù)對比
為了進(jìn)一步驗證本文提出算法的優(yōu)勢,將股票的收盤價漲幅分成了4個類別進(jìn)行實驗驗證(其中大于3%為大漲,0到3%之間為小漲,-3%到0之間為小跌,小于-3%為大跌),得到的結(jié)果如表7-表7所示。
表5 LSTM-RF-DF算法預(yù)測/%
表6 LSTM-RF算法預(yù)測/%
表7 LSTM算法預(yù)測/%
實驗結(jié)果表明,4類別預(yù)測的精度明顯低于2類別預(yù)測,由此也可以看出股票的價格波動并非僅僅收到某些指標(biāo)的影響,但是在4類別預(yù)測上原始的LSTM算法表現(xiàn)出了很大的劣勢,大漲和大跌兩個類別完全無法識別。而LSTM-RF算法在一定程度上對大跌和大漲由識別能力,但準(zhǔn)確率均沒超過5%。本文算法在LSTM-RF的基礎(chǔ)上使用集成森林對預(yù)測結(jié)果進(jìn)行了二次判定,在對大跌的檢測率上比LSTM-RF增加了7%,大漲的檢測率上增加了6%。此外,在精確度和f分?jǐn)?shù)兩個指標(biāo)結(jié)果也表明本文算法優(yōu)于LSTM-RF和原始的LSTM算法。
圖8 三種算法的4類別預(yù)測準(zhǔn)確率對比
本文結(jié)合了LSTM提取時序特征的能力、隨機(jī)森林算法強(qiáng)大的擬合能力以及集成森林的多類別預(yù)測優(yōu)勢,提出了基于時序集成森林的股票多類別預(yù)測模型,該算法首相將原始股票數(shù)據(jù)輸入LSTM模塊,得到股票數(shù)據(jù)的時序特征,然后利用RF預(yù)測收盤價,并根據(jù)收盤價預(yù)測出股票的漲幅,與LSTM輸出的時序特征一起作為集成森林的輸入,最終得到股票下一天的漲跌情況。最后在平安銀行股票數(shù)據(jù)上進(jìn)行了二分類預(yù)測和4分類預(yù)測,得到的結(jié)果均表明本文算法優(yōu)于原始的LSTM算法和LSTM-RF算法。下一步將考慮情感因素對股價的印象,搭建出更加完善的股票預(yù)測模型。