,,,
(浙江工業(yè)大學(xué) 理學(xué)院,浙江 杭州 310023)
隨著中國金融市場的逐步發(fā)展,以股票為代表的蘊含經(jīng)濟(jì)利益的眾多金融產(chǎn)品越來越被人關(guān)注。以往對時間序列研究的領(lǐng)域多涉及股市波動性[1]和金融風(fēng)險管理[2]等,由于現(xiàn)在股票投資者在進(jìn)行投資活動時,也越來越關(guān)注股票價格的準(zhǔn)確預(yù)測,從而最大程度地降低投資虧損,增加其投資回報率,所以對股票價格的準(zhǔn)確建模分析成為了投資者進(jìn)行投資決策時最重要的研究內(nèi)容之一。以往的研究者們雖然主要是將各種統(tǒng)計學(xué)和概率論的方法應(yīng)用于時間序列的預(yù)測模型,例如:ARMA(自回歸滑動平均模型)、ARCH[3](自回歸條件異方差模型)和多元線性回歸模型等,但是這些傳統(tǒng)模型往往假設(shè)條件較多,而且一般只能找出股價與其相關(guān)的影響因子之間的線性關(guān)系,不能很好地反映股票非線性變化規(guī)律,預(yù)測精度較低,應(yīng)用也很受限。
近年來,隨著人工智能領(lǐng)域的快速發(fā)展,越來越多的投資者開始嘗試?yán)酶倪M(jìn)的機(jī)器學(xué)習(xí)方法對股價進(jìn)行建模分析和預(yù)測,例如:用改進(jìn)的支持向量機(jī)回歸法[4]、改進(jìn)的神經(jīng)網(wǎng)絡(luò)法[5]和改進(jìn)的聚類算法[6]等,同時也都得到了良好的預(yù)測結(jié)果。而對于時間序列這種序列數(shù)據(jù)來說,采用最廣泛的模型為RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))模型[7]。RNN作為一種專門處理序列數(shù)據(jù)的模型,可以通過網(wǎng)絡(luò)結(jié)構(gòu)提取出數(shù)據(jù)更深層次的特征,從而能夠獲取時間序列之間的高度非線性關(guān)系。又因為傳統(tǒng)的RNN結(jié)構(gòu)容易面臨梯度消失或梯度爆炸的問題[8],所以就很難獲取時間序列的較長時期的依賴關(guān)系。Hochreiter等提出的LSTM(長短時記憶網(wǎng)絡(luò))結(jié)構(gòu)[9]克服了傳統(tǒng)RNN網(wǎng)絡(luò)的梯度消失和梯度爆炸的問題,使得循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)不僅能夠提取出時間序列的深層特征,還能考慮到時間序列的長時依賴,也使得模型獲得了更好的預(yù)測結(jié)果[10]。此外,編碼-解碼循環(huán)神經(jīng)網(wǎng)絡(luò)近年來在機(jī)器翻譯上取得了很大的成功。受到這一結(jié)構(gòu)的啟發(fā),以下將針對上證50股指的每分鐘數(shù)據(jù)做預(yù)測實驗,對影響股指價格的各個因子進(jìn)行編碼,再利用編碼后的向量作為網(wǎng)絡(luò)的輸入向量,然后結(jié)合LSTM結(jié)構(gòu)作股指價格的預(yù)測,最終再與其他模型對比,驗證模型的有效性。
循環(huán)神經(jīng)網(wǎng)絡(luò)是專門用于研究類似于時間序列數(shù)據(jù)等序列型數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò),并且大多數(shù)的循環(huán)神經(jīng)網(wǎng)絡(luò)也能夠處理不同長度的時間序列數(shù)據(jù)。與循環(huán)神經(jīng)網(wǎng)絡(luò)相關(guān)的一個想法是:在一維時間序列上做卷積,即可以將循環(huán)神經(jīng)網(wǎng)絡(luò)看作是對一個包含時間索引t的向量x(t)的操作。此外,需要注意,在循環(huán)神經(jīng)網(wǎng)絡(luò)中,時間索引t僅指序列數(shù)據(jù)的前后位置而已,而不一定指現(xiàn)實世界中的時間先后。除了時間序列數(shù)據(jù),循環(huán)神經(jīng)網(wǎng)絡(luò)還可以應(yīng)用于二維空間數(shù)據(jù),如圖形數(shù)據(jù)。甚至當(dāng)二維圖形數(shù)據(jù)涉及時間時,網(wǎng)絡(luò)也會學(xué)習(xí)到圖形數(shù)據(jù)時間上的特殊關(guān)系。在過去幾年中,應(yīng)用循環(huán)神經(jīng)網(wǎng)絡(luò)在模式識別[11]、語言建模、機(jī)器翻譯和圖片描述等問題上已經(jīng)取得一定成功。傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)包括輸入層、隱藏層和輸出層3層。一般輸入層由時間序列x(t)構(gòu)成,向量x(t)中每個元素代表與目標(biāo)序列y(t)有關(guān)的t時刻的時間序列的特征;隱藏層h(t)則相當(dāng)于對t時刻之前的輸入序列x(t′) (t′從0取到t)的一個歸納提取。一個經(jīng)典的3層循環(huán)神經(jīng)網(wǎng)絡(luò)如圖1所示。
圖1 3層循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Three-layer RNN structure
上述介紹的循環(huán)神經(jīng)網(wǎng)絡(luò)的關(guān)鍵點是可以將先前的信息連接到當(dāng)前的預(yù)測任務(wù)上,例如使用過去的時間序列來預(yù)測未來的時間序列走勢,或者使用過去的視頻段來推測對當(dāng)前段視頻的理解。然而在傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)中,當(dāng)模型想要學(xué)習(xí)變量的長時依賴時,總會面臨網(wǎng)絡(luò)深層上傳播的梯度消失或爆炸的問題,在梯度的這兩種問題中,梯度消失問題往往是很常見的,雖然梯度爆炸問題不太常見,但是一旦出現(xiàn)梯度爆炸問題,就會對模型的優(yōu)化產(chǎn)生很大的不良影響,當(dāng)然也可以通過精心的設(shè)計或者調(diào)節(jié)循環(huán)網(wǎng)絡(luò)的參數(shù)來避免這一問題。事實證明,即使在參數(shù)穩(wěn)定的情況下,與只學(xué)習(xí)較短期影響的網(wǎng)絡(luò)結(jié)構(gòu)相比,想要學(xué)習(xí)長期影響的網(wǎng)絡(luò)結(jié)構(gòu)所面臨的梯度指數(shù)衰減或爆炸的問題,依然是難以解決的[12]。
1997年,由Hochreiter和Schmidhube提出的LSTM結(jié)構(gòu)在很多問題上都取得相當(dāng)巨大的成功,并得到了廣泛的使用。LSTM結(jié)構(gòu)是在RNN發(fā)展過程中獲得的重要成功,LSTM通過刻意設(shè)計RNN中的隱藏層結(jié)構(gòu),使得循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)能學(xué)到序列數(shù)據(jù)之間的長期依賴關(guān)系,并同時成功地避免了傳統(tǒng)RNN結(jié)構(gòu)面臨的梯度問題。實際上,LSTM結(jié)構(gòu)相當(dāng)于在傳統(tǒng)RNN的隱藏層上進(jìn)行了更為復(fù)雜的非線性變換。近期,類似于LSTM的各種其他門控RNN上的研究成果有2015年Cho和Chung提出的GRUs[13]等。一般的LSTM的結(jié)構(gòu)如圖2所示。
圖2 長短時記憶網(wǎng)絡(luò)的隱藏層結(jié)構(gòu)Fig.2 The hidden layer structure of LSTM
對于上證50股指的每分鐘數(shù)據(jù)而言,其輸入層可以是固定長度的歷史價格序列,也可以是影響價格序列的其他各類因子。當(dāng)輸入層是一個固定長度為D的股指歷史收盤價向量時,即采用單因子RNN模型來對股指價格建模時,模型在最后60 min的股指收盤價預(yù)測效果如圖3(a)所示。而當(dāng)輸入層是上證50股指所包含的N個成分股的固定長度為D的歷史收盤價數(shù)據(jù)時,就可以用傳統(tǒng)多因子RNN模型來對股指價格建模,此時輸入層是一個維數(shù)為D×N的成分股歷史價格矩陣,模型在最后60 min的股指收盤價預(yù)測效果如圖3(b)所示。
圖3 傳統(tǒng)模型的預(yù)測結(jié)果Fig.3 The prediction results of traditional model
受啟發(fā)于解決機(jī)器翻譯問題中所采用的編碼-解碼循環(huán)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),下面將對輸入的時間序列x(t)引進(jìn)注意力機(jī)制[14-15]。首先,先介紹實驗中會用到的數(shù)學(xué)符號和一些具體的實驗設(shè)置等。
再給定目標(biāo)序列的歷史數(shù)據(jù),例如(y1,y2,…,yD),其中yi∈R,i∈1,2,…,D,和輸入層的歷史數(shù)據(jù)(x1,x2,…,xD),其中xi∈RN,i∈1,2,…,D?;谧⒁饬C(jī)制的循環(huán)網(wǎng)絡(luò)模型的目的是,給定時間窗口D,根據(jù)這些輸入層和目標(biāo)層數(shù)據(jù),學(xué)習(xí)一個從輸入層到目標(biāo)值yD+1的非線性映射,即
(1)
式中F(·)為最終想要得到的非線性映射函數(shù)。
而關(guān)于編碼-解碼循環(huán)神經(jīng)網(wǎng)絡(luò)的思想,具體地說,就是對于給定的輸入矩陣X=(x1,x2,…,xD),首先在時刻t,學(xué)習(xí)一個從原始輸入序列xt到隱藏層ht的映射,即
ht=f1(xt,ht-1)
(2)
式中:ht∈Rm表示網(wǎng)絡(luò)在時刻t處的隱藏層節(jié)點,m為隱藏層節(jié)點的個數(shù);f1(·)為任意一個非線性激活函數(shù),對于時間序列,一般采用LSTM結(jié)構(gòu)。
(3)
(4)
(5)
圖4 基于注意力機(jī)制的 RNN結(jié)構(gòu)圖Fig.4 The structure of attention-based recurrent neural network
圖5 帶注意力權(quán)重的RNN模型的預(yù)測結(jié)果Fig.5 The prediction results of attention-based RNN
模型的代碼實現(xiàn)是基于Keras和TensorFlow框架,數(shù)據(jù)來源是基于開源的Python數(shù)據(jù)接口Tushare。利用該數(shù)據(jù)接口,可以方便地獲取2016年05月01日至2016年12月30日的上證50股指及其成分股的每分鐘收盤價數(shù)據(jù)。共獲得165 d的數(shù)據(jù)記錄。其中,每天又分別包含240個每分鐘收盤價數(shù)據(jù)。此外,由于節(jié)假日、停牌和退市等不可避免的因素,會導(dǎo)致數(shù)據(jù)有部分缺失,所以在正式建模之前需要先對有缺失的數(shù)據(jù)進(jìn)行填充。具體選擇的方法是:對于有缺失數(shù)據(jù)的股票數(shù)據(jù),以上1個1 min的收盤價對其進(jìn)行補齊,對于在2016年05月01日至2016年12月30日內(nèi)停盤的股票,將該股從研究對象中剔除。經(jīng)過處理后,最終得39支符合要求的個股完整數(shù)據(jù)。部分?jǐn)?shù)據(jù)見表1。該數(shù)據(jù)共有41列,表1中第1列表示時刻,第2~40列分別代表每支成分股所對應(yīng)的收盤價數(shù)據(jù),第41列代表上證50股指的每分鐘收盤價數(shù)據(jù)。在接下來的模型中,均采用前143 d作為訓(xùn)練集,用以訓(xùn)練模型。接下來的11 d作為驗證集,用以選擇模型參數(shù)。最后11 d作為測試集來評估模型的具體表現(xiàn)。為了避免原始輸入變量由于量綱與數(shù)量級的不同對模型的訓(xùn)練過程造成影響,在正式開始訓(xùn)練前,對原始數(shù)據(jù)的每一列分別進(jìn)行去量綱處理,標(biāo)準(zhǔn)化公式為
(6)
式中xk表示第k列數(shù)據(jù)。
表1 上證50股指及其成分股的收盤價表Table 1 The close price of SZ50 index and its constituent stocks
首先,單因子模型的整體思想是只利用上證50股指的歷史收盤價數(shù)據(jù)作為輸入值,構(gòu)建只包含一層隱藏層的簡單循環(huán)神經(jīng)網(wǎng)絡(luò),對股指價格做預(yù)測,以求映射關(guān)系,即
(7)
在具體試驗中,單因子模型中的隱藏層采用了LSTM結(jié)構(gòu)。為了得到單因子RNN模型最優(yōu)的超參值,對時間跨度D1和隱藏層節(jié)點個數(shù)m1采用網(wǎng)格搜索法,找到模型驗證集在D1∈10,20,30,40,50和m1∈25,50,100上的最好表現(xiàn)對應(yīng)的超參值,最后確定時間D1=50,隱藏層節(jié)點m1=50為最優(yōu)的超參值。模型的預(yù)測結(jié)果在圖3(a)中展示,由于單因子RNN模型只選用了目標(biāo)序列的歷史時間序列作為網(wǎng)絡(luò)的輸入值,所以模型在測試集上的預(yù)測效果很差,基本上只能抓住目標(biāo)變量的大致走勢,而不能很好地跟蹤目標(biāo)變量的變化,并且在數(shù)值上明顯滯后于目標(biāo)變量,預(yù)測效果很不理想。
其次,上述提到傳統(tǒng)RNN模型的整體思想是利用上證50股指的歷史收盤價數(shù)據(jù)和其成分股的歷史收盤價數(shù)據(jù),構(gòu)建一個只包含一層隱藏層的循環(huán)神經(jīng)網(wǎng)絡(luò)模型,對股指價格作預(yù)測,以求得類似于式(1)中的映射關(guān)系。而引進(jìn)注意力權(quán)重的RNN模型則是構(gòu)建如圖4所示的網(wǎng)絡(luò)結(jié)構(gòu),來對股指價格作預(yù)測。對于這兩種網(wǎng)絡(luò)模型,均需要確定的超參有:輸入序列的時間跨度D2,隱藏層節(jié)點m2。此外,對于加了注意力權(quán)重的RNN模型來說,還需要確定編碼層的節(jié)點個數(shù)m3和解碼層的節(jié)點個數(shù)m4。結(jié)合網(wǎng)格搜索方法和處理時間序列數(shù)據(jù)的實際經(jīng)驗,最終設(shè)定超參D2=9,m2=m3=m4=128 。
圖3(b)刻畫了傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)在上證50股指測試集中最后一個小時內(nèi)的預(yù)測表現(xiàn),可以看出,與圖3(a)中的單因子RNN模型相比,由于在網(wǎng)絡(luò)的輸入層加入了成分股的歷史數(shù)據(jù),增加了目標(biāo)變量的影響因子,故該模型能夠較為準(zhǔn)確地跟蹤股指價格走勢,但是預(yù)測結(jié)果還是明顯滯后于真實值。圖5(a)是對輸入序列進(jìn)行注意力加權(quán)的模型在測試集最后1 h內(nèi)的預(yù)測表現(xiàn),與圖3(a,b)相比,明顯可以看出加了注意力權(quán)重后的模型預(yù)測效果更好,預(yù)測價格與真實價格走勢基本一致,雖然與真實股指價格走勢還是有一定的延遲,但是延遲程度與圖3(a,b)相比較小,最后還可以看出圖5(a)中去除了解碼過程的模型與圖5(b)中不去除解碼過程的模型預(yù)測結(jié)果相比,無明顯差距。
為了更好地比較和分析各個模型之間的預(yù)測效果,可以根據(jù)模型的預(yù)測值和真實值,進(jìn)一步計算模型的MAE(均方絕對誤差)、RMSE(均方根誤差)、MAPE(平均絕對百分比誤差) 3 種誤差評價指標(biāo),這3 種方法的定義分別為
(8)
(9)
(10)
上述3種模型的評價指標(biāo)的計算結(jié)果如表2所示,表2中數(shù)值均取自模型最后1次迭代所得到的結(jié)果。由表2可以看出:采用注意力加權(quán)模型的評價指標(biāo)明顯優(yōu)于單因子RNN模型和傳統(tǒng)RNN模型,且無解碼過程的RNN模型與有解碼過程的RNN模型的評價指標(biāo)相差不大,再次證明了注意力權(quán)重在時間序列預(yù)測中的顯著有效性。
表2 上證50股價預(yù)測結(jié)果比較Table 2 The prediction results over the shangzheng50 dataset %
利用上證50股指及其成分股在2016年05月01日至2016年12月30日的每分鐘收盤價數(shù)據(jù)建立改進(jìn)后的基于注意力機(jī)制的循環(huán)神經(jīng)網(wǎng)絡(luò),雖然與單因子模型和傳統(tǒng)RNN模型相比,股指價格的預(yù)測精度更高,并且與原始的編碼-解碼循環(huán)網(wǎng)絡(luò)相比,該模型進(jìn)一步簡化了網(wǎng)絡(luò)結(jié)構(gòu),加快了模型的訓(xùn)練速度,但是上述模型均只利用股指及其成分股的歷史價格數(shù)據(jù)對股指未來價格進(jìn)行預(yù)測,利用可能的其他影響因子對股指價格作預(yù)測還需要進(jìn)一步研究。