張訓(xùn)韜 范永勝
關(guān)鍵詞:XGBOOST;LSTM;特征排名;股票預(yù)測(cè)
自1990年滬深兩大證券交易所開(kāi)市以來(lái),中國(guó)股市蓬勃發(fā)展。中國(guó)證券登記結(jié)算有限責(zé)任公司于2022年2月披露,中國(guó)股民占全總?cè)丝谄叻种?,突?億[1]??梢?jiàn),隨著經(jīng)濟(jì)的快速發(fā)展,人民的可支配收入顯著提高。除去日常開(kāi)銷(xiāo)外,越來(lái)越多的人選擇股票投資來(lái)實(shí)現(xiàn)剩余資金的最大價(jià)值。雖然A股投資者大量增加,但投資者投資的技術(shù)水平參差不齊。陳興松等研究者發(fā)現(xiàn)A股投資者中,小散戶數(shù)量遠(yuǎn)遠(yuǎn)大于專業(yè)機(jī)構(gòu)投資者[2]。大量散戶投資理念不成熟,有較強(qiáng)的從眾心理,無(wú)法很好地利用歷史數(shù)據(jù)對(duì)股票走勢(shì)進(jìn)行分析判斷,更傾向于追漲殺跌。盲目投資的結(jié)果往往是虧損,更有甚者傾家蕩產(chǎn)。因此,通過(guò)一定的技術(shù)手段指導(dǎo)股票買(mǎi)賣(mài),規(guī)避買(mǎi)家主觀的無(wú)效抉擇是很有必要的。
1 研究綜述
學(xué)者為了讓投資者方便地看出股票的未來(lái)趨勢(shì),研究了很多的技術(shù)指標(biāo)。傳統(tǒng)的技術(shù)指標(biāo)預(yù)測(cè)法主要將K線圖和KDJ,MADC等技術(shù)指標(biāo)結(jié)合來(lái)預(yù)測(cè)股票走勢(shì),帶有一定的主觀性,且很難分析出多維數(shù)據(jù)間的關(guān)聯(lián)。統(tǒng)計(jì)學(xué)預(yù)測(cè)法處理線性問(wèn)題具有一定優(yōu)勢(shì),Li等應(yīng)用統(tǒng)計(jì)學(xué)的ARIMA模型預(yù)測(cè)了股價(jià)的變化趨勢(shì)[3]。但隨著機(jī)器學(xué)習(xí)和深度學(xué)習(xí)在非線性預(yù)測(cè)問(wèn)題上取得了卓越表現(xiàn),研究者們把研究股票預(yù)測(cè)問(wèn)題的重心轉(zhuǎn)移到了機(jī)器學(xué)習(xí)和深度學(xué)習(xí)上。機(jī)器學(xué)習(xí)預(yù)測(cè)法一般就是把時(shí)序問(wèn)題轉(zhuǎn)換為監(jiān)督學(xué)習(xí),通過(guò)特征工程和機(jī)器學(xué)習(xí)方法去預(yù)測(cè)。Hassan提出了一種結(jié)合隱馬爾可夫模型和模糊的方法預(yù)測(cè)股票,其預(yù)測(cè)的精度遠(yuǎn)高于普通隱馬爾可夫模型和ARIMA 模型[4]。Wei等引入了最小二乘支持向量機(jī)(LS-SVM) 預(yù)測(cè)股票,通過(guò)動(dòng)態(tài)慣性權(quán)重粒子群(W-POS) 優(yōu)化參數(shù),其訓(xùn)練速度優(yōu)于SVM,預(yù)測(cè)結(jié)果優(yōu)于BP神經(jīng)網(wǎng)絡(luò)[5]。機(jī)器學(xué)習(xí)在股票預(yù)測(cè)上取得了一定成就,但是股票作為時(shí)序數(shù)據(jù),機(jī)器學(xué)習(xí)忽視了數(shù)據(jù)的前后關(guān)系。目前,研究者熱衷于用深度學(xué)習(xí),尤其是LSTM模型訓(xùn)練時(shí)序數(shù)據(jù)。Lstm在處理非線性問(wèn)題上效果良好,三個(gè)門(mén)實(shí)現(xiàn)了對(duì)時(shí)序數(shù)據(jù)的保護(hù)和控制,并且解決了rnn長(zhǎng)期和梯度消失的問(wèn)題。Althelaya利用標(biāo)準(zhǔn)普爾500指數(shù)評(píng)估變種LSTM模型和GRU模型。實(shí)驗(yàn)表明疊加的LSTM的體系結(jié)構(gòu)有更好的預(yù)測(cè)性能[6]。有了成熟的預(yù)測(cè)模型,需要考慮的是特征的選取。充足的技術(shù)指標(biāo)可以讓預(yù)測(cè)結(jié)果更準(zhǔn)確,但可作為模型輸入數(shù)據(jù)的金融技術(shù)指標(biāo)已有上百種,若將所有的指標(biāo)應(yīng)用于股票預(yù)測(cè)勢(shì)必會(huì)降低算法運(yùn)行效率和增加模型復(fù)雜度?,F(xiàn)有的降維算法很多,主要分為特征提取和特征選擇兩大類。特征提取通過(guò)訓(xùn)練分析原有特征,提取出新的特征,且這些新的特征并未包含于原特征中,其中代表的算法就是主成分分析。而特征選擇主要是將原有特征按重要性排序,最終篩選的特征是原有特征的子集,代表算法有遺傳算法和決策樹(shù)算法。本次研究是選擇后者中的XGBOOST算法選擇特征,選擇排名靠前的金融指標(biāo)訓(xùn)練LSTM模型,達(dá)到預(yù)測(cè)未來(lái)股價(jià)的目的。
2 理論基礎(chǔ)
2.1 XGBOOST 模型
XGBOOST(極值的梯度提升樹(shù))是陳天奇等人提出的一種基于樹(shù)構(gòu)造的算法,其構(gòu)造思想和GDBT(梯度提升決策樹(shù))大致相同,只是在其功能上進(jìn)行提升,兩者都是屬于boosting方法[7]。這種算法的構(gòu)造原理集成多個(gè)弱分類器形成一個(gè)強(qiáng)分類器。XGBOOST不停地迭代,且每次生成的新樹(shù)都擬合了前一棵樹(shù)的殘差,迭代的次數(shù)越多,訓(xùn)練的精度越好。增強(qiáng)學(xué)習(xí)的構(gòu)建模型如下所示:
其中:n表示總共構(gòu)建的決策樹(shù)個(gè)數(shù),xi 代表輸入的特征值,F(xiàn)為所有生成決策樹(shù)的集合,ft 是單棵決策樹(shù)的訓(xùn)練函數(shù),yi 則表示最終的預(yù)測(cè)值。每一棵樹(shù)對(duì)應(yīng)的ft 都包含了一種特征值和葉節(jié)點(diǎn)值的對(duì)應(yīng)關(guān)系。為了更好地闡述XGBOOST樹(shù)與弱學(xué)習(xí)樹(shù)的關(guān)系和更好的訓(xùn)練模型,我們定義了如下的目標(biāo)函數(shù):
其中:yi 是預(yù)測(cè)結(jié)果,yi 表示真實(shí)值或者標(biāo)簽,(1)是預(yù)測(cè)結(jié)果和實(shí)際情況損失函數(shù)的簡(jiǎn)單表示。(2)是一個(gè)正則化項(xiàng),是每棵樹(shù)復(fù)雜度之和。fk 依舊表示的是第k棵樹(shù)的模型,T是每棵決策樹(shù)的葉子節(jié)點(diǎn)數(shù)目,ω是每棵樹(shù)葉子節(jié)點(diǎn)分?jǐn)?shù),γ和λ代表著系數(shù),用于保證葉節(jié)點(diǎn)分?jǐn)?shù)和葉結(jié)點(diǎn)個(gè)數(shù)不會(huì)太大。通過(guò)正則化的引入,防止了勾結(jié)樹(shù)的過(guò)程中過(guò)擬合的情況出現(xiàn)。
2.2 XGBOOST 重要性排名
其中X 是分類到每個(gè)葉節(jié)點(diǎn)的集合,Gainx 是每個(gè)節(jié)點(diǎn)的增益,Coverx 是每個(gè)節(jié)點(diǎn)上的樣本數(shù)目。
2.3 LSTM 模型
LSTM一共包含三個(gè)門(mén)控單元,即遺忘門(mén),輸入門(mén)和輸出門(mén)。通過(guò)三個(gè)門(mén)更新參數(shù)和實(shí)現(xiàn)“記憶”功能,并通過(guò)引入“記憶細(xì)胞狀態(tài)”對(duì)其進(jìn)行長(zhǎng)期保存[8]。
LSTM狀態(tài)由圖1所示。
1) 遺忘門(mén)。遺忘門(mén)通過(guò)選擇性地拋棄上一時(shí)刻的數(shù)據(jù),決定了上一時(shí)刻有多少信息可以保留在當(dāng)前時(shí)刻。其公式如下:
3 實(shí)證分析
3.1 實(shí)驗(yàn)流程與實(shí)驗(yàn)環(huán)境
1) 獲取目標(biāo)股票的金融指標(biāo),通過(guò)XGBOOST重要性分析,求得這些金融指標(biāo)的排名。2) 選擇排名將靠前的十個(gè)指標(biāo)做成多組組合數(shù)據(jù)訓(xùn)練LSTM模型。3) 利用均方差等指標(biāo)對(duì)模型進(jìn)行評(píng)估,選出最佳的指標(biāo)組合,并通過(guò)最佳組合數(shù)據(jù)預(yù)測(cè)股票。4) 利用可視化分析工具對(duì)比最佳組合的預(yù)測(cè)值和真實(shí)值的差距。實(shí)驗(yàn)流程圖如圖2所示。本文選用Python3.7,Tensor?flow2.3.0,和Sklearn0.22.1的語(yǔ)言環(huán)境,通過(guò)交互式筆記本jupyter_notebook 實(shí)現(xiàn)編譯。操作系統(tǒng)是Win?dows10。硬件方面是10 代inter-CORE-i7 搭配一塊NVIDIA-RTX2060。
3.2 數(shù)據(jù)選取
Tushare是一個(gè)免費(fèi)、開(kāi)源的Python財(cái)經(jīng)數(shù)據(jù)接口包。主要實(shí)現(xiàn)對(duì)股票等金融數(shù)據(jù)從數(shù)據(jù)采集、清洗加工到數(shù)據(jù)存儲(chǔ)的過(guò)程,能夠?yàn)榻鹑诜治鋈藛T提供快速、整潔、和多樣的便于分析的數(shù)據(jù)。本次研究的金融數(shù)據(jù)依托于該接口包,通過(guò)對(duì)應(yīng)的API 采集了2017-8-1至2022-8-1的某股票5年1237個(gè)交易日的股票數(shù)據(jù)。在以往的研究中,研究者們希望通過(guò)修改算法提高股票預(yù)測(cè)的準(zhǔn)確率,在金融指標(biāo)的選擇上僅僅依賴常規(guī)五項(xiàng)指標(biāo),即開(kāi)盤(pán)價(jià),收盤(pán)價(jià),最高價(jià),最低價(jià)和成交量。本次研究通過(guò)金融接口直接提取和人工編程計(jì)算,在常規(guī)五項(xiàng)指標(biāo)基礎(chǔ)上,將金融技術(shù)指標(biāo)擴(kuò)展到42項(xiàng)。所有指標(biāo)匯總?cè)绫?所示。
3.3 數(shù)據(jù)歸一化處理
金融屬性取值范圍很大,若直接用于預(yù)測(cè)模型訓(xùn)練,程序運(yùn)行收斂很慢。通過(guò)歸一化處理,可加快收斂。具體的公式如下:
歸一化以后的數(shù)據(jù)雖然方便模型訓(xùn)練,但該模型預(yù)測(cè)的值也是歸一化的狀態(tài),為了方便預(yù)測(cè)值和真實(shí)值比較,還要對(duì)預(yù)測(cè)值進(jìn)行反歸一化處理。具體公式如下:
其中,x 是真實(shí)值,x'是歸一化以后的值,max(x)和min(x) 分別代表最大值和最小值。y'代表歸一化的預(yù)測(cè)值,y 代表反歸一化后的預(yù)測(cè)值。
3.4 XGBOOST 特征選擇
以每日42個(gè)金融屬性作為輸入,第二日收盤(pán)價(jià)作為輸出構(gòu)建決策樹(shù)。借助于第三方庫(kù)XGBOOST下的feature_importances_方法對(duì)屬性打分。該方法首先借助GINI系數(shù)求得各個(gè)屬性重要性,再將所有重要性做歸一化處理,最后依據(jù)重要性對(duì)特征進(jìn)行排名。排名前二十的屬性如圖3所示。
其中對(duì)第二日收盤(pán)價(jià)影響最明顯的是前一日的最收盤(pán)價(jià),五日均價(jià),市銷(xiāo)率,流通市值,最低價(jià)和最高價(jià)。由圖可知,排名靠后特征對(duì)收盤(pán)價(jià)影響太小,本研究?jī)H保留排名前十的特征。通過(guò)累加屬性種類,將前十的屬性分為十組。如:第一組一個(gè)屬性,第二組兩個(gè)屬性,以此類推。將十組屬性分別投入到LSTM,通過(guò)預(yù)測(cè)結(jié)果對(duì)比找到最優(yōu)的金融屬性預(yù)測(cè)組合。
3.5 LSTM 模型構(gòu)造
首先需確定LSTM的輸入數(shù)據(jù)類型。本次研究將通過(guò)前5天金融指標(biāo)對(duì)第6日的收盤(pán)價(jià)進(jìn)行預(yù)測(cè)。原始的數(shù)據(jù)包含了一年內(nèi)所選股票1237個(gè)交易日的42個(gè)金融指標(biāo),其張量的維度為(1237,42)。若將連續(xù)5天數(shù)據(jù)作為一個(gè)輸入單元,則整個(gè)數(shù)據(jù)輸入張量的維度變?yōu)椋?232,5,42),對(duì)應(yīng)的標(biāo)簽張量維度為(1232,)。所以,根據(jù)我們所選的屬性個(gè)數(shù)知道模型的訓(xùn)練數(shù)據(jù)張量維度為(1232,5,X),5代表前五天的數(shù)據(jù),X代表所選擇的金融屬性個(gè)數(shù)。
整個(gè)股票預(yù)測(cè)模型采用了兩層LSTM和一個(gè)全連接層來(lái)構(gòu)造,每個(gè)LSTM層各有64個(gè)神經(jīng)元。為了防止過(guò)擬合的出現(xiàn),每個(gè)LSTM層后面添加了一個(gè)失活率0.2 的Dropout 層。LSTM 層的激活函數(shù)選擇的‘relu’,優(yōu)化器選擇的是‘a(chǎn)dam’,損失函數(shù)選擇的是均方差‘mse’。
將排名前十的屬性分為十組,第一組包含排名第一的屬性所有數(shù)據(jù),第二組包含排名前二屬性的所有數(shù)據(jù),以此類推。將每一組數(shù)據(jù)放入LSTM 中,batch_size設(shè)置為32,每一組數(shù)據(jù)訓(xùn)練100次。
3.6 預(yù)測(cè)結(jié)果分析
本次實(shí)驗(yàn)通過(guò)MSE,MAE 和R2 作為模型好壞的評(píng)價(jià)指標(biāo)。三個(gè)評(píng)價(jià)指標(biāo)公式如下所示:
其中m 代表預(yù)測(cè)值數(shù)目,yi,yi 和yˉ分別代表真實(shí)值,預(yù)測(cè)值和平均值。其中MSE,MAE 越小預(yù)測(cè)誤差越小,R2越接近1說(shuō)明模型擬合效果越好。
用十組組合數(shù)據(jù)訓(xùn)練LSTM,每一組數(shù)據(jù)分別訓(xùn)練十次,取十次指標(biāo)的平均值作為該組的評(píng)測(cè)指標(biāo)。十組指標(biāo)如表2所示。
由表2可知在包含開(kāi)盤(pán)價(jià),五日均價(jià),市銷(xiāo)率和流通市值四個(gè)金融指標(biāo)的第四組數(shù)據(jù)訓(xùn)練結(jié)果中MSE值和MAE 值最小,且R2值最接近1。該組模型的預(yù)測(cè)效果最好。用第四組指標(biāo)預(yù)測(cè)數(shù)據(jù)并與真實(shí)數(shù)據(jù)進(jìn)行可視化分析,近三個(gè)月和近五年的對(duì)比結(jié)果如下圖4所示。
從上圖可知,近來(lái)三個(gè)月預(yù)測(cè)數(shù)據(jù)和真實(shí)數(shù)據(jù)略有偏差,但價(jià)格走勢(shì)基本一致。近五年的預(yù)測(cè)值走勢(shì)和實(shí)際價(jià)格走勢(shì)完全重疊。這表明用排名前四的金融指標(biāo)訓(xùn)練的LSTM模型對(duì)長(zhǎng)線交易有一定的指導(dǎo)作用。
4 結(jié)論
為了找到預(yù)測(cè)股票收盤(pán)價(jià)的最佳金融指標(biāo)組合,本文提出了一種結(jié)合XGBOOST和LSTM的股票預(yù)測(cè)方法。利用某股票五年的歷史數(shù)據(jù)進(jìn)行實(shí)驗(yàn),結(jié)果表明以前五日開(kāi)盤(pán)價(jià),五日均價(jià),市銷(xiāo)率和流通市值為組合的金融數(shù)據(jù)預(yù)測(cè)第六日的收盤(pán)價(jià)效果最好。因此本文提出預(yù)測(cè)方法對(duì)股民判斷股市價(jià)格變化有一定的作用。
本次研究的重心是尋找預(yù)測(cè)股票走勢(shì)的最佳金融指標(biāo)組合。雖然得出了有一定參考價(jià)值的結(jié)論,但還存在一些可進(jìn)一步研究的方向:
1) 本次研究未能對(duì)預(yù)測(cè)的LSTM參數(shù)進(jìn)行優(yōu)化。比如未曾通過(guò)優(yōu)化算法尋找適合本次算法的最佳神經(jīng)網(wǎng)絡(luò)層數(shù)和每層神經(jīng)網(wǎng)絡(luò)的神經(jīng)元個(gè)數(shù),而是直接地指定這些參數(shù)。在后續(xù)研究中,可以進(jìn)一步調(diào)整和優(yōu)化模型,使得預(yù)測(cè)結(jié)果更加準(zhǔn)確。
2) 這次使用的模型中未曾考慮市場(chǎng)情緒對(duì)股票的影響。在后續(xù)的研究中,可以嘗試加入股民的情緒因子作為輸入指標(biāo)幫助預(yù)測(cè)。這樣可以提高預(yù)測(cè)的精度和時(shí)效性。
3) 本次研究的模型,對(duì)于長(zhǎng)期走勢(shì)的判斷基本吻合,但短線的效果吻合度仍然不理想。