收稿日期:2023-02-26
基金項(xiàng)目:國(guó)家自然科學(xué)基金項(xiàng)目(62266055)
DOI:10.19850/j.cnki.2096-4706.2024.06.020
摘? 要:股票是一種重要的投資渠道,如何更準(zhǔn)確地預(yù)測(cè)股票價(jià)格是一個(gè)熱門的研究課題。由于股票數(shù)據(jù)的非線性、非平穩(wěn)以及前后相關(guān)等復(fù)雜特點(diǎn),傳統(tǒng)的股票價(jià)格預(yù)測(cè)方法已經(jīng)到達(dá)性能瓶頸。隨著深度學(xué)習(xí)方法的興起,LSTM和GRU等深度神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型受到了極大的關(guān)注?;趶B門港務(wù)股票和上證指數(shù)的歷史交易數(shù)據(jù),利用了LSTM和GRU兩種模型對(duì)收盤價(jià)進(jìn)行預(yù)測(cè)研究,通過5個(gè)指標(biāo)MAE、MSE、RMSE、MAPE和R2給出了模型評(píng)價(jià)。
關(guān)鍵詞:股票價(jià)格預(yù)測(cè);LSTM模型;GRU模型
中圖分類號(hào):TP183? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? 文章編號(hào):2096-4706(2024)06-0086-04
Research on Two Stock Price Forecasting Methods Based on Deep Network
SUN Zhenyu1,2
(1.School of Mathematics, Yunnan Normal University, Kunming? 650500, China;
2.Yunnan Key Laboratory of Modern Analytical Mathematics and Applications, Kunming? 650500, China)
Abstract: Stock is an important investment channel, how to forecast stock price more accurately is a hot research topic. Due to the complex characteristics of stock data, such as non-linearity, non-stationarity and before and after correlation, traditional stock price forecasting methods have reached the performance bottleneck. With the rise of Deep Learning methods, deep neural network forecast models such as LSTM and GRU have received great attention. Based on the historical trading data of Xiamen Port Stock and Shanghai Stock Index, LSTM and GRU models are used to forecast the closing price. The model evaluation is given by 5 indexes of MAE, MSE, RMSE, MAPE and R2.
Keywords: stock price prediction; LSTM model; GRU model
0? 引? 言
股票是一種重要的投資渠道,它的價(jià)格走勢(shì)是人們關(guān)注的焦點(diǎn),但股票的價(jià)格走勢(shì)是復(fù)雜多變的,想要準(zhǔn)確預(yù)測(cè)并非易事[1],如何更準(zhǔn)確地預(yù)測(cè)股票價(jià)格是國(guó)內(nèi)外學(xué)者研究的熱門課題。對(duì)于投資者而言,股票價(jià)格預(yù)測(cè)結(jié)果越準(zhǔn)確,風(fēng)險(xiǎn)就越低,收益就越大。
股票價(jià)格預(yù)測(cè)的方法目前有很多,傳統(tǒng)的股票價(jià)格預(yù)測(cè)方法有ARIMA[2]、ARMA[3]和GARCH [4]等模型,后來又出現(xiàn)了支持向量機(jī)[5]和隨機(jī)森林[6]等機(jī)器學(xué)習(xí)方法,這些方法能較好地解決了股票數(shù)據(jù)非線性問題,彌補(bǔ)了傳統(tǒng)的股票價(jià)格預(yù)測(cè)方法在處理非線性數(shù)據(jù)時(shí)的不足,但在處理股票數(shù)據(jù)的時(shí)序相關(guān)性方面仍存在局限性。隨著深度學(xué)習(xí)的發(fā)展,最近涌現(xiàn)了許多深度神經(jīng)網(wǎng)絡(luò)模型來對(duì)股票價(jià)格進(jìn)行預(yù)測(cè),例如LSTM(Long Short Term Memory networks)[7]、GRU(Gated Recurrent Unit)[8]等深度神經(jīng)網(wǎng)絡(luò)模型。在預(yù)測(cè)具有非線性趨勢(shì)和序列相關(guān)性的數(shù)據(jù)問題上,深度神經(jīng)網(wǎng)絡(luò)方法可以達(dá)到更高的精度,突破了傳統(tǒng)機(jī)器學(xué)習(xí)方法的局限性。為了驗(yàn)證深度神經(jīng)網(wǎng)絡(luò)模型在股票價(jià)格預(yù)測(cè)方面的性能,本文以廈門港務(wù)股票和上證指數(shù)的歷史交易數(shù)據(jù)為例,建立了LSTM和GRU兩個(gè)深度神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型,最后通過5個(gè)指標(biāo)MAE、MSE、RMSE、MAPE和R2給出了模型評(píng)價(jià)。
1? 模型原理和方法
1.1? LSTM模型原理
LSTM神經(jīng)網(wǎng)絡(luò),全稱長(zhǎng)短期記憶網(wǎng)絡(luò)[9],是一種循環(huán)神經(jīng)網(wǎng)絡(luò)的變體。如圖1所示,LSTM具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)叫问?,這個(gè)重復(fù)模塊中包含了四個(gè)交互的層,三個(gè)sigmoid激活函數(shù)和一個(gè)tanh激活函數(shù),并以特殊的方式進(jìn)行交互。
在圖1中,σ表示的是sigmoid激活函數(shù),它和tanh激活函數(shù)的作用都是幫助調(diào)節(jié)流經(jīng)網(wǎng)絡(luò)值;二者不同之處在于sigmoid激活函數(shù)把輸出值壓縮到[0,1]區(qū)間內(nèi),而tanh激活函數(shù)把輸出值壓縮到[-1,1]區(qū)間內(nèi);這樣的設(shè)置有助于更新或忘記上一狀態(tài)信息[10]:1)因?yàn)槿魏螖?shù)乘以0都得0,那么這部分信息就會(huì)遺忘;2)任何數(shù)乘以1都得到它本身,那么這部分信息就會(huì)被保存下來。LSTM神經(jīng)網(wǎng)絡(luò)的傳播過程可分為以下4步:
第1步:判別從上一狀態(tài)中丟棄了哪些信息,這個(gè)決定通過一個(gè)稱為“忘記門”的結(jié)構(gòu)完成。忘記門讀取上一個(gè)輸出ht-1和當(dāng)前輸入xt,通過sigmoid激活函數(shù)進(jìn)行非線性映射后,輸出一個(gè)向量ft,其計(jì)算表達(dá)式為:
ft = ( Wf [ht-1,xt] + bf )
第2步:決定什么樣的新信息被存放在下一狀態(tài)中,這個(gè)決定通過一個(gè)稱為“輸入門”的結(jié)構(gòu)完成。該輸入門包含兩個(gè)部分:第一部分是讀取上一個(gè)狀態(tài)輸出ht-1和當(dāng)前輸入xt,通過sigmoid激活后輸出一個(gè)向量it;第二部分是通過一個(gè)tanh激活函數(shù)創(chuàng)建出一個(gè)新的候選值向量 ,將其加入當(dāng)前狀態(tài)中,其計(jì)算表達(dá)式為:
第3步:狀態(tài)更新:將Ct-1更新為Ct。首先將上一狀態(tài)Ct-1與ft相乘,接著再加上 ,得到的結(jié)果就是新的候選值Ct,其計(jì)算表達(dá)式為:
第4步:確定整個(gè)模型輸出的值,這個(gè)決定通過一個(gè)稱為“輸出門”的結(jié)構(gòu)完成。輸出門首先讀取上一個(gè)輸出ht-1和當(dāng)前輸入xt,然后通過一個(gè)sigmoid激活來確定輸出哪些值從而得到向量ot;接著將新狀態(tài)Ct通過一個(gè)tanh激活進(jìn)行處理,并將它和通過sigmoid激活函數(shù)確定的輸出相乘,最終得到整個(gè)模型輸出的值ht,其計(jì)算表達(dá)式為:
圖1? LSTM神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
1.2? GRU模型原理
GRU神經(jīng)網(wǎng)絡(luò)是對(duì)LSTM神經(jīng)網(wǎng)絡(luò)的改進(jìn),它比LSTM神經(jīng)網(wǎng)絡(luò)的參數(shù)更少、結(jié)構(gòu)更簡(jiǎn)單。GRU神經(jīng)網(wǎng)絡(luò)通過引入重置門(Reset Gate)rt與更新門(Update Gate)zt去選擇信息。如圖2所示,GRU神經(jīng)網(wǎng)絡(luò)的門控狀態(tài)來源于前一刻的信息狀態(tài)ht-1和當(dāng)前時(shí)刻的信息狀態(tài)xt。
圖2? GRU神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
GRU神經(jīng)網(wǎng)絡(luò)的傳播過程可分為以下3步:
第1步:通過上一狀態(tài)ht-1和當(dāng)前節(jié)點(diǎn)的輸入xt來獲取兩個(gè)門控狀態(tài):rt為重置門控(reset gate),zt為更新門控(update gate)[12],計(jì)算表達(dá)式為:
,
第2步:使用重置門rt對(duì)上一時(shí)刻的狀態(tài)信息ht-1實(shí)現(xiàn)信息狀態(tài)的重置從而得到重置之后的數(shù)據(jù) ,將其與當(dāng)前時(shí)刻信息xt進(jìn)行拼接,再通過一個(gè)tanh激活函數(shù)將數(shù)據(jù)縮放至[-1,1]范圍,從而得到當(dāng)前時(shí)刻的候選狀態(tài) ,其計(jì)算表達(dá)式為:
第3步:通過更新門zt的遺忘和記憶作用得到當(dāng)前時(shí)刻的狀態(tài)ht,其計(jì)算表達(dá)式為:
其中? 表示對(duì)上一時(shí)刻的狀態(tài)ht-1的選擇性遺忘,即將ht-1中一些不重要的信息舍棄; 表示對(duì)當(dāng)前時(shí)刻的候選狀態(tài)? 的選擇性記憶,即記住 中一些重要的信息;即當(dāng)前時(shí)刻的狀態(tài)ht由忘記上一時(shí)刻的狀態(tài)ht-1中的某些信息,并加入當(dāng)前候選狀態(tài)? 中的某些信息而得到。
2? 股票預(yù)測(cè)應(yīng)用
2.1? 模型設(shè)置
LSTM模型使用的Python中的PyTorch學(xué)習(xí)庫進(jìn)行搭建,模型單特征輸入的輸入層數(shù)input_size為1,多特征輸入的輸入層數(shù)input_size為5,隱藏層數(shù)hidden_size設(shè)置為16,輸出層數(shù)output_size設(shè)置為1,層數(shù)num_layers設(shè)置為1,時(shí)間步長(zhǎng)Sequence設(shè)置為5,即用前五天的數(shù)據(jù)來預(yù)測(cè)第六天的數(shù)據(jù),學(xué)習(xí)率設(shè)置為0.001,Batch_size訓(xùn)練批次大小設(shè)置為12,Epoch訓(xùn)練次數(shù)設(shè)置為1 000。GRU模型也使用的PyTorch學(xué)習(xí)庫進(jìn)行搭建,設(shè)置模型單特征輸入的輸入層數(shù)input_size為1,多特征輸入的輸入層數(shù)input_size為5,隱藏層數(shù)hidden_size設(shè)置為16,輸出層數(shù)output_size設(shè)置為1,層數(shù)num_layers設(shè)置為1,時(shí)間步長(zhǎng)Sequence設(shè)置為5,學(xué)習(xí)率設(shè)置為0.001,Batch_size訓(xùn)練批次大小設(shè)置為12,Epoch訓(xùn)練次數(shù)設(shè)置為1 000。
2.2? 實(shí)驗(yàn)數(shù)據(jù)及模型評(píng)價(jià)指標(biāo)
本次實(shí)驗(yàn)使用的兩個(gè)數(shù)據(jù)集分別是:1)廈門港務(wù)股票2020年10月1日至2022年10月20日之間的歷史交易數(shù)據(jù);2)上證指數(shù)2021年3月31日至2023年4月12日之間的歷史交易數(shù)據(jù)。每個(gè)數(shù)據(jù)集選取收盤價(jià)作為單特征輸入,同時(shí)選取開盤價(jià)、收盤價(jià)、最高價(jià)、最低價(jià)和交易量共5個(gè)指標(biāo)作為多特征輸入。本次實(shí)驗(yàn)將數(shù)據(jù)集以7:3的標(biāo)準(zhǔn)劃分為訓(xùn)練集和測(cè)試集,檢查是否存在異常值和缺失值,對(duì)數(shù)據(jù)分量按如下公式進(jìn)行歸一化處理:
其中xmax為樣本分量最大值,xmin為最小值;歸一化后的數(shù)據(jù)值在[0,1]內(nèi)。
作為神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型性能評(píng)價(jià),選取如下評(píng)價(jià)指標(biāo):
MAE平均絕對(duì)誤差指標(biāo)為:
MSE均方誤差指標(biāo)為:
RMSE均方根誤差指標(biāo)為:
MAPE平均絕對(duì)百分比誤差指標(biāo)為:
R2擬合優(yōu)度指標(biāo)為:
其中m為數(shù)據(jù)集的長(zhǎng)度,yi為在i時(shí)刻的真實(shí)值, 為在i時(shí)刻的預(yù)測(cè)值。
2.3? 實(shí)驗(yàn)結(jié)果及分析
利用LSTM和GRU兩個(gè)深度神經(jīng)網(wǎng)絡(luò)模型分別對(duì)廈門港務(wù)和上證指數(shù)的股票收盤價(jià)進(jìn)行預(yù)測(cè),分別畫出股票價(jià)格的真實(shí)值(true)、LSTM模型的預(yù)測(cè)值和GRU模型的預(yù)測(cè)值的折線圖,結(jié)果如圖3~4所示。
圖3? 廈門港務(wù)股票價(jià)格的預(yù)測(cè)結(jié)果
圖4? 上證指數(shù)股票價(jià)格的預(yù)測(cè)結(jié)果
從圖3~4可看出,LSTM和GRU兩個(gè)深度神經(jīng)網(wǎng)絡(luò)模型的預(yù)測(cè)值與股票價(jià)格的真實(shí)值是較為貼合的,且預(yù)測(cè)值與真實(shí)值之間的誤差較小。
為了對(duì)LSTM和GRU兩個(gè)模型的預(yù)測(cè)能力進(jìn)行更充分的評(píng)價(jià),下面分別計(jì)算MAE、MSE、RMSE、MAPE和R2指標(biāo)值,如表1~4所示。
表1? 多特征輸入時(shí)廈門港務(wù)股票價(jià)格預(yù)測(cè)評(píng)價(jià)結(jié)果
預(yù)測(cè)模型 MAE MSE RMSE MAPE R2
LSTM 0.056 6 0.006 7 0.081 7 0.121 5 0.706 7
GRU 0.050 1 0.005 5 0.074 0 0.107 6 0.759 7
表2? 單特征輸入時(shí)廈門港務(wù)股票價(jià)格預(yù)測(cè)評(píng)價(jià)結(jié)果
預(yù)測(cè)模型 MAE MSE RMSE MAPE R2
LSTM 0.061 0 0.007 1 0.084 2 0.125 5 0.688 5
GRU 0.055 2 0.006 0 0.077 6 0.115 4 0.735 5
表3? 多特征輸入時(shí)上證指數(shù)股票價(jià)格預(yù)測(cè)評(píng)價(jià)結(jié)果
預(yù)測(cè)模型 MAE MSE RMSE MAPE R2
LSTM 0.027 2 0.001 3 0.035 4 0.157 6 0.921 4
GRU 0.029 9 0.001 5 0.038 3 0.209 9 0.907 8
表4? 單特征輸入時(shí)上證指數(shù)股票價(jià)格預(yù)測(cè)評(píng)價(jià)結(jié)果
預(yù)測(cè)模型 MAE MSE RMSE MAPE R2
LSTM 0.025 3 0.001 1 0.032 9 0.174 2 0.932 2
GRU 0.026 5 0.001 2 0.034 4 0.187 7 0.925 8
由表1~4可觀察到:1)LSTM和GRU兩個(gè)模型的在指標(biāo)MAE、MSE、RMSE和MAPE上的值都接近于0,并且在擬合優(yōu)度指標(biāo)R2上的值都接近于1;
2)兩個(gè)模型之間各項(xiàng)評(píng)價(jià)指標(biāo)的差距都很小;3)在廈門港務(wù)股票數(shù)據(jù)上,多特征輸入時(shí)的評(píng)價(jià)結(jié)果優(yōu)于單特征輸入時(shí)評(píng)價(jià)結(jié)果,而在上證指數(shù)股票數(shù)據(jù)上,單特征輸入時(shí)的評(píng)價(jià)結(jié)果優(yōu)于多特征輸入時(shí)的評(píng)價(jià)結(jié)果。
3? 結(jié)? 論
股票價(jià)格受多方面因素影響,包括宏觀經(jīng)濟(jì)、政治因素、公司運(yùn)營(yíng)和投資者的信心等,因此很難做到準(zhǔn)確預(yù)測(cè)。隨著近年來深度學(xué)習(xí)的發(fā)展,本文嘗試使用LSTM和GRU兩個(gè)典型深度神經(jīng)網(wǎng)模型來進(jìn)行股票價(jià)格預(yù)測(cè)。通過5個(gè)常用的MAE、MSE、RMSE、MAPE和R2評(píng)價(jià)指標(biāo)值,我們獲得了一些經(jīng)驗(yàn)結(jié)論:1)LSTM和GRU的預(yù)測(cè)效果都較好,這表明循環(huán)神經(jīng)網(wǎng)絡(luò)善于捕捉時(shí)間序列中的相關(guān)信息;2)LSTM和GRU的在各評(píng)價(jià)指標(biāo)上相差較小,這與二者的模型結(jié)構(gòu)相似有關(guān);3)對(duì)于波動(dòng)較大的廈門港務(wù)股票數(shù)據(jù),多特征輸入時(shí)的評(píng)價(jià)結(jié)果優(yōu)于單特征輸入時(shí)評(píng)價(jià)結(jié)果,這表明遇到波動(dòng)較大的數(shù)據(jù)集時(shí)多特征輸入更有效;對(duì)于波動(dòng)較小的上證指數(shù)股票數(shù)據(jù),單特征輸入時(shí)的評(píng)價(jià)結(jié)果優(yōu)于多特征輸入時(shí)評(píng)價(jià)結(jié)果,這表明遇到波動(dòng)較小的數(shù)據(jù)集時(shí)模型不需要太多的特征輸入來獲得信息。
參考文獻(xiàn):
[1] SINGH N,KHALFAY N,SONI V,et al. Stock Prediction Using Machine Learning a Review Paper [J].International Journal of Computer Applications,2017,163(5):36-43.
[2] 吳玉霞,溫欣.基于ARIMA模型的短期股票價(jià)格預(yù)測(cè) [J].統(tǒng)計(jì)與決策,2016(23):83-86.
[3] 楊琦,曹顯兵.基于ARMA-GARCH模型的股票價(jià)格分析與預(yù)測(cè) [J].數(shù)學(xué)的實(shí)踐與認(rèn)識(shí),2016,46(6):80-86.
[4] 徐楓.股票價(jià)格預(yù)測(cè)的GARCH模型 [J].統(tǒng)計(jì)與決策,2006(18):107-109.
[5] 彭麗芳,孟志青,姜華,等.基于時(shí)間序列的支持向量機(jī)在股票預(yù)測(cè)中的應(yīng)用 [J].計(jì)算技術(shù)與自動(dòng)化,2006(3):88-91.
[6] 張瀟,韋增欣.隨機(jī)森林在股票趨勢(shì)預(yù)測(cè)中的應(yīng)用 [J].中國(guó)管理信息化,2018,21(3):120-123.
[7] 喬若羽.基于神經(jīng)網(wǎng)絡(luò)的股票預(yù)測(cè)模型 [J].運(yùn)籌與管理,2019,28(10):132-140.
[8] 谷麗瓊,吳運(yùn)杰,逄金輝.基于Attention機(jī)制的GRU股票預(yù)測(cè)模型 [J].系統(tǒng)工程,2020,38(5):134-140.
[9] 楊麗,吳雨茜,王俊麗,等.循環(huán)神經(jīng)網(wǎng)絡(luò)研究綜述 [J].計(jì)算機(jī)應(yīng)用,2018,38(S2):1-6+26.
[10] 尹寶才,王文通,王立春.深度學(xué)習(xí)研究綜述 [J].北京工業(yè)大學(xué)學(xué)報(bào),2015,41(1):48-59.
[11] 張軍陽,王慧麗,郭陽,等.深度學(xué)習(xí)相關(guān)研究綜述 [J].計(jì)算機(jī)應(yīng)用研究,2018,35(7):1921-1928+1936.
[12] 鄭遠(yuǎn)攀,李廣陽,李曄.深度學(xué)習(xí)在圖像識(shí)別中的應(yīng)用研究綜述 [J].計(jì)算機(jī)工程與應(yīng)用,2019,55(12):20-36.
作者簡(jiǎn)介:孫震宇(1999—),男,漢族,江蘇鎮(zhèn)江人,本科,研究方向:機(jī)器學(xué)習(xí)。