方義秋,盧 壯,葛君偉
重慶郵電大學 計算機科學與技術學院,重慶400065
金融市場起著社會資源再分配的重要作用,其健康良性發展有利于增加社會投資熱情,加快經濟建設的進程。如今,我國金融市場建設日趨完善,因交易產生了海量的數據,再加上算力大幅度提高,催生了金融從業者和研究人員使用機器學習和深度學習的研究熱情。
經過歷代研究人員的不懈努力,目前已經開發出很多算法用于股票預測。早前,差分自回歸移動平均(autoregressive integrated moving average model,ARIMA)模型[1]因其統計特性被眾多研究人員用于時間序列預測。然而,ARIMA 模型只能提取數據中的線性特征,在對具有高度非線性特征的股票數據研究中,適合提取非線性特征的機器學和深度學習方法逐漸占據主流。機器學習算法中的支持向量機(support vector machine,SVM)因其訓練過程類似于求解線性約束的二次規劃,得到的解,本身就是最優解,避免了非線性模型中經常遇到的局部極小值、過度擬合和維數災難等問題[2],在股票預測研究中也逐漸火熱起來。其中,將SVM用于時間序列分析也被稱作支持向量回歸機(support vector regression,SVR)。但是,SVR 依然存在核函數選擇、參數太多調優困難、提取淺層特征等問題[3]。深度神經網絡傳遞的層數更多,結構更復雜,能將數據中的淺層信息,轉化為更抽象的高特征信息[4],性能強大,適用性廣泛。循環神經網絡(recurrent neural network,RNN)能夠處理時間序列數據中的依賴關系,因此被用于股票預測研究中。然而,RNN 在訓練過程中會出現,損失函數的梯度隨時間呈現指數下降,也即梯度消失的問題[5]。LSTM 在RNN 的基礎上增加了可以對單元進行控制的門限結構,從而可以處理長時間的時序數據,同時又能遺忘那些不重要的特征信息[6]。這正好符合研究人員渴望從大量歷史股票交易數據中一探究竟的心理預期,因此,各種和LSTM 有關的預測算法接踵而來。CNN主要在圖像識別、文本識別、目標識別和目標檢測等領域有廣泛應用[7],因其能提取數據中的局部特征和深層特征的特點[8],可以將股票時序預測轉換為圖像分類,用于股票預測。BP 神經網絡將每次迭代產生的誤差向前傳導,具有很好的非線性擬合能力[9],在研究股票的內在規律方面有著廣泛的應用。
金融市場十分復雜,畢竟決定股票價格的漲跌并非只有賬面數字,還有本身就十分復雜的人為因素,例如輿論導向、政治環境和新聞事件。這形成了股票數據高噪聲、難預測的特點。單一模型在考慮如上因素時,不會面面俱到,當然,模型自身固有屬性也是原因之一。最近,大量研究人員試圖通過模型-模型和方法-模型這樣的組合,來達到考慮問題更加充分,預測更加準確的目的。針對股票數據中高維非線性的特點,Yu等人[10]利用局部線性嵌入(local linear embedding,LLE)將處理過的數據輸入BP 神經網絡,在與單一BP、主成分分析PCA-BP(principal component analysis,PCA)和ARIMA的對比中發現,LLE-BP 的預測精度更好。神經網絡的性能會受到時間窗口、批處理大小和隱藏層單元數目等諸多因素的制約,容易陷入局部最小值。而且,這些參數的調節往往依賴有經驗的研究人員手動調節,耗時費力,浪費計算機資源。宋剛等人[11]提出了一種基于自適應粒子群優化(particle swarm optimization,PSO)的LSTM 股票價格預測模型(PSO-LSTM),減少了人為因素的影響,提高了模型的預測性能。金融市場對新聞事件十分敏感,投資者的行為會受到輿論的影響,造成股價拐點的發生。現有模型很難考慮到這方面的因素,因此,在拐點發生時,模型會產生誤判,相比市場真實的反應,往往具有一定的滯后性,這也是目前研究人員想要突破的難點之一。徐月梅等人[12]提出了一種基于CNNBiLSTM(bi-direction long short term memory)模型,利用CNN提取新聞文本中的特征和BiLSTM判別文本數據中的情感極性,提高了模型預測精度。賀毅岳等人[13]則利用自適應噪聲完備集合經驗模態分解(complete ensemble empirical mode decomposition with adaptive noise,CEEMDAN)將股市指數分解為高頻分量、低頻分量和趨勢項,分別建立LSTM模型,再加和集成各模型的預測值,最終發現此模型的預測誤差更小,時滯性更低。黨建武等人[14]將CNN從股指數據中提取到的隱藏特征輸入到門控循環單元(gated recurrent unit,GRU)做進一步的訓練,得到了更好的預測效果。
LSTM 神經網絡的細胞單元具有存儲數據進行順序學習,在時序特征提取方面具有巨大優勢,顯示出更為優異的成績,許多研究將其視為一個基準模型[15]。CNN 在挖掘數據中的局部特征和深層特征具有優勢。本文結合LSTM 和CNN 各自的優勢,提出聯合RMSE損失LSTM-CNN 模型,并建立了BP、LSTM、CNN 和LSTM-CNN融合模型作為對比。最終通過五個模型在浦發銀行、滬深300指數和上證綜指三個數據集上的實驗結果,證明了本文所提聯合RMSE 損失LSTM-CNN模型具有良好的有效性和普適性。
神經網絡的輸入項是輸出項的影響因素,而股價是輸出項,所以輸入項應該是那些與股價有關系的影響因素。影響股價漲跌的因素很多,針對個股預測總結起來大體上為與股票交易相關的各類基本交易數據如:開盤價、最高價、最低價、收盤價、昨收價、換手率、漲跌幅、成交量和成交額等。進一步,根據基本交易數據提煉出來的交易類指標,它主要是根據價格和成交量衍生出來的技術指標以及大盤指數這類指標;此外,基本面因素也能影響股市漲跌。基本面因素包含國家、行業經濟發展的水平以及公司自身的經營水平。另一類指標是公司財務指標,包括市盈率、市凈率等指標,這類指標反映了公司的經營情況與內部價值。
基本面因素缺乏量化方式,而個股當日的基本交易數據是當前情況的最好反映。因此,本實驗選取最能反應股票漲跌的這9 個基本交易數據,即開盤價、最高價、最低價、收盤價、昨收價、換手率、漲跌幅、成交量、成交額。
實驗數據使用滬深300中的浦發銀行(證券代碼為600000)、滬深300 股指(證券代碼為399300)和上證綜指(證券代碼為000001)2010 年1 月4 日到2021 年3 月31日共計2 685天的股票數據進行訓練和測試。數據集分為訓練集、驗證集和測試集三個部分,其中訓練集用于訓練模型,從2010 年1 月4 日到2019 年1 月11 日,占整個數據集的80%;驗證集用于選擇模型超參數,從2019 年1 月14 日到2020 年2 月24 日,占整個數據集的10%;測試集用于測試模型的性能,從2020 年2 月25 日到2021 年3 月31 日,占整個數據集的10%。三者的組成如表1所示。

表1 數據集劃分Table 1 Data set partitioning
股票的各個交易指標具有不同的量綱和量綱單位,這樣的情況會影響到數據分析的結果,為了消除指標之間的量綱影響,需要進行數據標準化處理,以解決數據指標之間的可比性。原始數據經過數據標準化處理后,各指標處于同一數量級,同時又不消除數據原本的特征屬性,適合進行綜合對比評價。本次實驗中采用最大-最小標準化的方式處理數據,標準化公式如式(1)所示:

實驗數據將同一種數據分成兩種不同的表現形式,即用于LSTM 模型訓練的文本形式,和用于CNN 模型訓練的圖像形式。為了保證兩種訓練數據形式的獨立性,將以上9個交易數據分為兩部分。
1.4.1 股票數據的文本表現形式
LSTM 中使用的數據應是要提取的時間序列數據的時序特征。在這項研究中,選擇6個關鍵基本交易數據作為對LSTM的輸入。用pre_close、change、pct_chg、volume、amount、close分別表示昨收價、漲跌額、漲跌幅、成交量、成交額、收盤價。
如圖1所示,設置窗口長度為30天,滾動窗口長度為1天,預測期設置為5天。這意味著,將根據每天的當前時間點,通過查看之前30天的數據,預測5天后的股價。這些設置也適用于CNN時間序列數據的窗口長度和預測長度。訓練數據的輸入和輸出組成結構如圖2所示。

圖1 窗口長度、預測窗口長度和整個采樣周期滾動窗Fig.1 Window length,prediction window length and whole sampling period rolling window

圖2 訓練數據的輸入和輸出組成結構Fig.2 Input and output components of train data
1.4.2 股票數據的圖像表現形式
使用股票時間序列數據中的開盤價、最高價、最低價、收盤價、成交額,創建了股票圖表圖像作為CNN 的輸入,如圖3所示。

圖3 由30天股票數據所生成的圖像Fig.3 Image generated from 30 days of stock data
圖3上方的柱狀部分是由最高價、最低價、開盤價、收盤價組成的燭臺圖。圖上方的灰色條帶為布林帶,由布林線指標中的上軌線、中軌線和下軌線組成。布林線指標利用統計學原理,求出股價的標準差和信賴區間,從而去確定股價波動的范圍和未來走勢,利用波段顯示股價的安全高低價位。
圖3 中間的曲線和柱狀部分是由指數平滑異同移動平均線(moving average convergence/divergence,MACD)中的MACD 線、信號線、離差圖組成。MACD是股票交易中一種常見的技術分析工具,用于判斷股票價格變化的強度、方向、能量,以及趨勢周期,以便把握股票買進和賣出的時機。
圖3最下方的柱狀部分,由交易量數據組成。為了將數據輸入CNN,調整并裁剪這些圖像為112×112像素。
2.1.1 LSTM原理和結構
RNN最初用于學習時間序列數據的序列模式。然而,隨著網絡的加深而出現的消失梯度問題并沒有得到解決。解決這個問題的網絡是LSTM。
LSTM 是一種遞歸神經網絡,適用于從時間序列中提取時序特征,具有學習長期時間序列依存關系的能力。
LSTM 的結構如圖4 所示。一般,LSTM 由輸入門it、遺忘門ft、輸出門ot這3個門組成。Ct為當前細胞單元的狀態,ht為隱藏層的狀態,xt為輸入數據。

圖4 LSTM結構Fig.4 LSTM structure
結構的輸出向量包含當前細胞單元狀態向量和隱藏層狀態輸出向量。結構的輸入包含上一時刻細胞單元的狀態向量、上一時刻隱藏層輸出向量和當前時刻的輸入數據3個向量。LSTM網絡先經過遺忘門計算上一單元的被遺忘程度,0 表示完全舍棄,1 表示完全保留;下一步是輸入門,決定有多少信息需要輸入到單元中,然后更新單元狀態;輸出門的作用是決定需要輸出的部分;最后再進行誤差反向傳播。下列運算公式中,運算符“·”代表向量外積,“+”代表向量疊加運算。

2.1.2 LSTM模型構建
為了提取股票時間序列數據的序列特征,設計了LSTM模型。數據生成為堆疊數據類型,以便數據可以同時輸入。該模型被設計用來預測t+5 時刻的收盤價,使用的值從t-30 到t。
根據研究,LSTM 為兩層時所表現的結果最佳[16]。構造兩層全連接層,以提高非線性預測能力。基于此使用兩層LSTM和兩層全連通層構建模型,提高模型非線性預測能力。圖5為LSTM建模。

圖5 LSTM模型Fig.5 LSTM model
2.2.1 CNN原理
CNN對輸入數據進行逐層卷積和池化操作。卷積層是CNN 的核心,它利用局部連接和權值共享對輸入進行卷積操作,提取數據的深層特征[14]。卷積過程可以用以下公式表示:

其中,C為卷積層的輸出特征圖,X為輸入數據;f(·)為非線性激活函數;U為卷積操作;W為卷積核的權重向量,b為偏置項。
池化層通過一定的池化規則對卷積層的輸出執行池化操作,保留主要特征,同時減少參數數目和計算量,防止過擬合。池化過程可以用以下公式表示:

其中,p表示池化層的輸出特征圖;pool(·)表示池化規則,如平均池化、最大池化等。
CNN 的特點是能夠提取數據中的隱藏特征,并將其逐層結合,生成抽象的高層特征。然而,CNN不具備記憶功能,缺乏對時序數據時間相關性的考慮。
2.2.2 CNN模型構建
通過深化網絡,可以提高網絡的性能。但是,會出現由于消失梯度問題而產生的過擬合和退化問題。因此,在保持網絡深度的同時,使用一種防止過擬合和退化問題的方法變得非常重要。這里使用殘差學習和瓶頸方法[17]克服這一問題。
利用殘差學習和瓶頸方法設計了圖6 所示的有三個權重層的bottleneck 構建塊。如圖6 所示在快捷連接的情況下,輸入X通過激活函數映射到特征F(X),而不經過權值層。公式(9)中,H(X)或F(X)-X被視為一個優化的映射,X是一個輸入矩陣,F(X)和H(X)是輸出矩陣。


圖6 bottleneck構建塊Fig.6 Bottleneck building blocks
基于上述理論構建CNN 模型,如圖7 所示。其中conv1、conv2、conv3 為卷積層,fc1、fc2 和fc3 為完全連接層。

圖7 CNN卷積建模Fig.7 CNN convolution modeling
在輸入階段,調整股票圖表圖像的大小為112×112像素,然后調整卷積和完全連接層的數量以及各種超參數,如卷積的維數、神經元的數量、完全連接層和dropout比例等。
表2顯示了經過反復實驗優化的CNN模型的結構。

表2 CNN模型參數Table 2 CNN model parameters
在預測股票價格時,將股票圖表圖像與同一數據中的股票時間序列數據同時訓練,可以使兩個模型互補。圖8 為提出的聯合RMSE 損失LSTM-CNN 模型的體系結構,該模型的構建共分三步進行。

圖8 聯合RMSE損失LSTM-CNN模型結構Fig.8 Combined RMSE loss LSTM-CNN model structure
第一階段采用CNN模型架構,使用與表2相同的架構。第二步是建立LSTM模型,采用圖5中的結構。第三步按照一定比例聯合兩個模型的損失值。各模型的損失函數定義如公式(10)、(11)所示:


式中,N為數據點個數,為預測值,R為目標值。為CNN模型的損失函數,為LSTM 模型的損失函數。α和β值是總均方根誤差的權重。這些參數反映了各模型損失的反映程度。從這兩種損失中,可以使用公式(12)推導出總RMSE。在實驗中發現,參數α值升高β值下降,會使模型的預測表現向CNN 模型靠近,模型預測值的局部表現會更加突出,反之,則會使模型向LSTM靠近,模型預測值的整體趨勢會更加突出。而且,參數α值不易過大,β值則對模型的預測精度影響更大,但是,當β值達到一定程度時,再增大反而會影響整個模型的預測精度,所以兩個值要在合理的區間內取值。經過反復實驗,將參數α和β值分別設為0.1和0.9,以反映聯合訓練模型中LSTM的損失大于CNN 模型損失,并使所提模型的預測效果更好。此外,通過CNN和LSTM的總RMSE損失,期望產生一種正則化的效果,達到模型互補和防止過擬合。
聯合模型的預測值,需要按照α和β的值加權求和,以達到兩種模型互補的效果。如公式(13)所示為CNN 分支部分的預測值為LSTM 分支的預測值,為兩個分支預測值的加權和。

選擇三個性能指標,均方根誤差(root mean square error,RMSE),均方根絕對誤差(root mean absolute error,RMAE)和平均絕對百分比誤差(mean absolute percentage error,MAPE),來評估所提模型和各個對比模型的預測能力。RMSE大小與數值無關,是揭示相對較大預測誤差的好方法,RMAE是揭示模型的系統偏差的有用方法,MAPE 大小與數值有關,是統計預測準確性的一種方法。這些方程如下所示,其中是預測值,Ri是真實值。

為了驗證聯合RMSE 損失LSTM-CNN 的可行性,分別在浦發銀行、滬深300股指和上證綜指三個數據集上建立了BP、LSTM、CNN、LSTM-CNN 和聯合RMSE損失LSTM-CNN五個模型。
圖9為BP模型在浦發銀行測試集上的預測值與真實值對比圖。從圖中可以看出,BP 模型的非線性擬合能力是很優秀的,既能反映出股價局部的細微變化又能反映出整體走勢。然而,缺點也是十分明顯的,預測值的滯后性較高,精度低。

圖9 BP模型的預測值與真實值Fig.9 Predicted and true values of BP model
圖10 為LSTM 模型在浦發銀行測試集上的預測值與真實值對比圖。從圖中可以看出,LSTM模型的預測效果,總體趨勢和真實值接近,滯后性比BP 模型要好。但是,局部的細微表現不足,過于平緩。

圖10 LSTM模型的預測值與真實值Fig.10 Predicted and true values of LSTM model
圖11為CNN模型在浦發銀行測試集上的預測值與真實值對比圖。由圖可知,CNN模型的預測效果,雖然總體趨勢表現較差,但是局部效果表現突出,能夠反應出股票局部細微的變化。從另一個方面說明,CNN 模型更加適合做特征分類,也就是說在預測股價漲跌方面,預測效果會更好。

圖11 CNN模型的預測值與真實值Fig.11 Predicted and true values of CNN model
圖12 為LSTM-CNN 融合模型在浦發銀行測試集上的預測值與真實值對比圖。從圖中可以看出,LSTM-CNN 的預測效果,模型表現出了CNN 和LSTM兩個模型的優點,其整體趨勢和局部的細微變化,均表現較好。

圖12 LSTM-CNN融合模型的預測值與真實值Fig.12 Predicted and true values of LSTM-CNN fusion model
圖13 為聯合RMSE 損失LSTM-CNN 模型在浦發銀行測試集上的預測值與真實值對比圖。從圖中顯示的信息來看,聯合RMSE 損失LSTM-CNN 模型同樣結合了LSTM 模型和CNN 模型的優點。模型預測值的總體趨勢,局部表現以及滯后性,相比上面四個模型要更好。

圖13 聯合RMSE損失LSTM-CNN 模型的預測值與真實值Fig.13 Predicted and true values of combined RMSE loss LSTM-CNN model
通過列出五個模型的RMAE、MAPE、RMSE可以更好地反映出各個模型的優劣。
根據表3 中數據,五個模型的優劣順序如下:聯合RMSE 損失LSTM-CNN、LSTM-CNN、LSTM、BP、CNN。五個模型中表現最好的是聯合RMSE 損失LSTM-CNN模型。相比表現次之的LSTM-CNN,本文所提模型的RMAE值要低4.24%,MAPE值低0.04個百分點,RMSE值低16%,這也說明了所提模型具有可行性。

表3 不同模型在浦發銀行數據集上的預測性能Table 3 Prediction performance of different models on Shanghai Pudong Development Bank data set
單一模型可能存在隨機性,為了更好地探究模型,以及其存在的優缺點,在滬深300指數數據集上進實驗與測試,實驗結果如圖14~18所示。

圖14 BP模型的預測值與真實值Fig.14 Predicted and true values of BP model

圖15 LSTM模型的預測值與真實值Fig.15 Predicted and true values of LSTM model

圖16 CNN模型的預測值與真實值Fig.16 Predicted and true values of CNN model

圖17 LSTM-CNN融合模型的預測值與真實值Fig.17 Predicted and true values of LSTM-CNN fusion model

圖18 聯合RMSE損失LSTM-CNN模型的預測值與真實值Fig.18 Predicted value and true value of combined RMSE loss LSTM-CNN model
從圖14~18 中可看出,相較于浦發銀行數據集,BP模型的局部表現和整體趨勢都差了很多;LSTM整體趨勢較好,局部表現依舊欠佳;CNN 的局部表現良好,整體趨勢較差。LSTM-CNN 和聯合RMSE 損失LSTMCNN模型無論是整體趨勢還是局部表現都表現得非常好,十分接近真實值。
通過列出五個模型的RMAE、MAPE、RMSE可以更好地反映出各個模型的優劣。
根據表4 中的數據,五個模型的優劣順序如下:聯合RMSE 損失LSTM-CNN、LSTM-CNN、LSTM、BP、CNN。復合模型的表現均優于單一模型,本文所提模型和LSTM-CNN 性能表現一致。其中,RMAE 值相差無幾,MAPE 值低0.04 個百分點,RMSE 值低1%,整體而言略好于LSTM-CNN。

表4 不同模型在滬深300指數數據集上的預測性能Table 4 Prediction performance of different models on Shanghai and Shenzhen 300 index data set
五個模型在上證綜指數據集上的實驗結果如圖19~23所示。

圖19 BP模型的預測值與真實值Fig.19 Predicted value and real value of BP model

圖20 LSTM模型的預測值與真實值Fig.20 Predicted value and real value of LSTM model

圖21 CNN模型的預測值與真實值Fig.21 Predicted value and real value of CNN model

圖22 LSTM-CNN融合模型的預測值與真實值Fig.22 Predicted value and real value of LSTM-CNN fusion model

圖23 聯合RMSE損失LSTM-CNN融合模型的預測值與真實值Fig.23 Predicted value and real value of combined RMSE loss LSTM-CNN model
如圖19~23 所示,BP、LSTM 和CNN 模型在上證綜指數據集上的表現和在浦發銀行和滬深300 指數數據集上的表現一致;而LSTM-CNN 和聯合RMSE 損失LSTM-CNN模型的局部表現均有所下降。這可能和數據集有關,滬深300指數綜合了上海證券交易所和深證證券交易所表現良好的300只股票的情況,相比上證綜指要更穩定一些。通過表5 可以更加準確地看出各個模型的預測效果。

表5 不同模型在上證綜指數據集上的預測性能Table 5 Prediction performance of different models on Shanghai Composite Index data set
根據表5中的數據,五個模型的優劣順序如下:聯合RMSE 損失LSTM-CNN、LSTM-CNN、LSTM、BP、CNN。其中,聯合RMSE 損失LSTM-CNN 和LSTM-CNN 的表現相當,前者MAPE值比后者高0.01個百分點,而RMAE值低0.5%,RMSE值低6%,總體略好于LSTM-CNN。
綜和各個模型在浦發銀行、滬深300指數和上證綜指三個數據集上的表現,可以看出,單一模型在做時序數據預測時,考慮到的影響因素不夠全面,多模型組合預測時的表現要更好。同時也證明了聯合RMSE 損失LSTM-CNN模型具有良好的有效性和普適性。
本文提出的聯合RMSE損失LSTM-CNN模型結合了LSTM提取時序特征的優點和CNN提取局部特征和深層特征的優點,在做股票預測時,既能表現出股價的整體走勢,又能表現出局部的細微變化。通過在浦發銀行、滬深300 指數和上證綜指數據集上的表現可以得出,相比于BP、LSTM、CNN和LSTM-CNN模型,其總體趨勢、局部表現和滯后性都有更好的表現。
此外,股票數據具有一定的時效性,訓練數據的大小和各個數據集的比例要合理分配。模型在波動比較大的地方,預測效果有待改進。原因是真實的股票波動不僅僅受限于股票基本交易指標,而且與時事聯系緊密,例如公司的經營狀況、財務狀況、投資人的主觀意識還有新聞事件等等。將這些因素量化代入模型也可以提高模型的性能。后續還可以結合金融領域的一些數據處理和分析方法進行改進。