沐年國,姚洪剛
(上海理工大學(xué),上海 200093)
傳統(tǒng)時間序列模型受限于固定的模型框架,無法對復(fù)雜的金融時間序列做出準確的預(yù)測,而基于深度學(xué)習(xí)的方法從數(shù)據(jù)本身出發(fā)能更好地應(yīng)對“非理想化”的時間序列。近年來,具有非線性處理能力的方法,如支持向量機[1]、BP神經(jīng)網(wǎng)絡(luò)[2]、小波神經(jīng)網(wǎng)絡(luò)[3]以及循環(huán)神經(jīng)網(wǎng)絡(luò)[4]被應(yīng)用于分析時間序列,也有經(jīng)典計量模型與機器學(xué)習(xí)方法的組合模型[5?6],取得了不錯的效果。
目前而言,RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))及其變種LSTM(長短期記憶網(wǎng)絡(luò))由于其關(guān)注歷史信息的網(wǎng)絡(luò)結(jié)構(gòu)而廣泛被應(yīng)用。LSTM可與進化算法結(jié)合以提升預(yù)測能力[7?8]。Althelaya等使用雙向LSTM以及堆疊LSTM提高性能[9]?;诮鹑跁r間序列高噪聲的特點,也有在使用LSTM預(yù)測之前,對原始序列做相關(guān)處理:Li和Tam對原始序列進行小波去噪[10];Bao等在此基礎(chǔ)上加入堆疊自編碼器[11];Singh等利用雙向二維主成分分析對原始序列降維提取特征[12];Zhang等在LSTM單元內(nèi)的遺忘門以及輸入門后將狀態(tài)向量分解為多頻率信息,最后在輸出門前做聚合重構(gòu)[13]。
可以看出,一般通過優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)或者對原始數(shù)據(jù)進行前期處理兩個角度來提升預(yù)測能力。然而,對于特征序列對目標序列在時間維度上的影響的關(guān)注卻很少,本文利用被廣泛應(yīng)用于情感分析[14]和機器翻譯[15]的注意力機制,對只有特征序列輸入的RNN的每一時間步的隱藏狀態(tài)通過注意力機制進行重構(gòu),并與目標序列共同作為新的RNN輸入進行預(yù)測。結(jié)果表明,加入注意力機制的RNN具有較好的預(yù)測性能,尤其是在特征維度增加的情況下,其預(yù)測效果相較于標準RNN提升更為明顯。
循環(huán)神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)層接收當前時刻的輸入xt以及上一個時刻的網(wǎng)絡(luò)狀態(tài)ht-1,得到當前時刻的網(wǎng)絡(luò)狀態(tài)ht并作為下一時刻的輸入。循環(huán)神經(jīng)網(wǎng)絡(luò)關(guān)注歷史因素的影響使其適合處理時間序列問題,其工作原理如下:
式(1)表示狀態(tài)更新過程,式(2)表示預(yù)測輸出過程。式中:xt為t時刻的特征輸入;ht為t時刻的狀態(tài)向量;ot為t時刻的輸出。
標準的循環(huán)神經(jīng)網(wǎng)絡(luò)更新狀態(tài)向量常常表示如下:
式中激活函數(shù)σ多采用tanh函數(shù)。
由于標準循環(huán)網(wǎng)絡(luò)的結(jié)構(gòu)過于簡單,常常無法長期保存有效信息,即短時記憶問題。為了有效延長這種短時記憶,提出LSTM(長短期記憶網(wǎng)絡(luò))并取得了不錯的效果,同時其簡化的變種門控循環(huán)網(wǎng)絡(luò)(Gated Recurrent Unit,GRU)也被廣泛應(yīng)用。GRU將LSTM的內(nèi)部狀態(tài)向量和輸出向量合并為狀態(tài)向量,同時門控數(shù)量也由3個(遺忘門、輸入門、輸出門)減少到2個(復(fù)位門、更新門)。雖然GRU是在LSTM的基礎(chǔ)上做出簡化,但在大部分情況下兩者的效果相差不大,更為重要的是GRU的參數(shù)相比于LSTM要少,計算代價降低的同時減輕了過擬合的可能。
GRU的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,狀態(tài)的更新規(guī)則如下:
圖1 GRU網(wǎng)絡(luò)結(jié)構(gòu)
其中,式(4)和式(5)表示復(fù)位門的過程,用于控制上一時刻的狀態(tài)ht-1進入GRU的量。r表示復(fù)位門門控向量,由當前輸入xt和上一時刻的狀態(tài)ht-1得到,由于激活函數(shù)使用了sigmoid函數(shù),r的取值范圍在0和1之間,所以可以控制ht-1的接收量并與xt共同得到新輸入式(6)和式(7)表示更新門的過程,用于控制新輸入與上一時刻狀態(tài)ht-1對當前時刻狀態(tài)ht的貢獻量。z表示更新門門控向量,同樣使用sigmoid函數(shù)作為激活函數(shù),以1-z作為上一時刻狀態(tài)ht-1對ht的貢獻程度,以z作為新輸入對ht的貢獻程度。
注意力機制實現(xiàn)了每一時刻的輸入對于當前時刻的輸出的貢獻差異,通過構(gòu)造得分函數(shù)得到相應(yīng)的權(quán)重,通過加權(quán)平均的方法重構(gòu)新的輸入用來預(yù)測當前輸出。注意力機制多在編碼?解碼模型(Encoder?Decoder)中使用,對于循環(huán)神經(jīng)網(wǎng)絡(luò)而言,編碼器所有時刻的隱藏狀態(tài)對于某一時刻解碼器的隱藏狀態(tài)的貢獻度應(yīng)表現(xiàn)出差異,才能更有效地完成預(yù)測任務(wù)。這種貢獻度的度量可以通過得分函數(shù)式(8)獲得,具體形式多樣,如式(9)、式(10)所示。得分函數(shù)需要歸一化才能表現(xiàn)為權(quán)重,一般使用softmax函數(shù)式(11),最后將編碼器的隱藏狀態(tài)加權(quán)平均即可得到新的解碼器輸入式(12)。
式中:st-1表示解碼器在t-1時刻的隱藏狀態(tài);h=(h1,h2,…,hT)表示編碼器的各個時刻的隱藏狀態(tài);et表示貢獻度的得分;at表示得到的權(quán)重;ct表示解碼器的新輸入。
將金融時間序列分為特征序列與目標序列,設(shè)定時間窗大小為T,以特征序列為輸入,建立GRU網(wǎng)絡(luò)作為編碼器,將輸出的所有時刻狀態(tài)與解碼器的每一時間步的狀態(tài)使用注意力機制重構(gòu)新的解碼器輸入分量,并與目標序列一起作為解碼器GRU網(wǎng)絡(luò)的輸入。基于注意力機制的GRU結(jié)構(gòu)如圖2所示。
圖2 基于注意力機制的GRU
本文的實證數(shù)據(jù)來自于上證指數(shù),上證指數(shù)反映了上海證券交易所上市的所有股票價格的變動情況,其變動趨勢在一定程度上能夠反映中國宏觀經(jīng)濟的走勢。本文的預(yù)測目標是上證指數(shù)的收盤價,收盤價作為交易所每一個交易日的最后一筆交易價格,既是當日行情的標準,又是下一個交易日的開盤價的依據(jù),具有重要的意義。為了更為準確地考量模型的預(yù)測效果,考慮不同維度的特征輸入下模型的性能變化。因此,這里選擇兩個不同維度的特征輸入,一個是6個輸入維度的上證指數(shù)開盤價、最高價、最低價、交易量、成交額以及收盤價本身;另一個是在此基礎(chǔ)上增加了與上證指數(shù)相關(guān)的7個綜合指數(shù)(上證A指、上證B指、上證工業(yè)類指數(shù)、上證商業(yè)類指數(shù)、上證房地產(chǎn)指數(shù)、上證公用事業(yè)股指數(shù)、上證綜合股指數(shù))的開盤價、收盤價、最高價、最低價、交易量和成交額作為特征輸入,即48個輸入維度。
本文選取了2000年1月4日—2019年12月26日的日交易數(shù)據(jù),共4 843個樣本。選擇時間窗大小為30個交易日,即以連續(xù)30個交易日的特征輸入和收盤價數(shù)據(jù)預(yù)測下一個交易日的收盤價。因此共有4 813組數(shù)據(jù)作為模型的輸入樣本,并以最后900組數(shù)據(jù)作為模型的測試集,前3 913組數(shù)據(jù)作為模型的訓(xùn)練集。
為了克服序列之間不同量綱的影響,提升模型精度,并提高迭代求解的收斂速度,在訓(xùn)練模型之前選擇以訓(xùn)練集的序列數(shù)據(jù)的最大值和最小值對所有的特征序列以及目標序列做歸一化處理:
式中:x為所有原始數(shù)據(jù);xtrain為訓(xùn)練集數(shù)據(jù);x′為所有歸一化后的數(shù)據(jù)。
將歸一化后的數(shù)據(jù)輸入模型,模型變成對歸一化后的收盤價的預(yù)測,因此需再將最終輸出的結(jié)果進行反歸一化處理,即得到最終的預(yù)測結(jié)果。
為了對比基于注意力機制的GRU與標準形式的GRU的預(yù)測效果,本文用絕對偏差和相對偏差兩個衡量指標進行表示。絕對偏差的衡量指標選擇測試集的收盤價預(yù)測值和真實值的均方誤差(Mean Square Error,MSE),其計算公式為:
相對偏差的衡量指標選擇測試集的收盤價預(yù)測值和真實值的平均絕對百分比誤差(Mean Absolute Percentage Error,MAPE),其計算公式為:
式中:n為樣本總數(shù);y′i為收盤價的預(yù)測值;yi為收盤價的真實值。
為了盡可能減少參數(shù),降低模型復(fù)雜度,選擇式(10)作為注意力機制的得分函數(shù)。另外,基于注意力機制的GRU模型的一些參數(shù)設(shè)定如下:編碼器與解碼器的GRU隱藏層神經(jīng)元個數(shù)均為64;時間窗大小為30;批處理大小為128(每訓(xùn)練128組樣本迭代更新一次參數(shù));訓(xùn)練次數(shù)為150次(將所有訓(xùn)練集樣本完整訓(xùn)練150次);以歸一化后的收盤價的預(yù)測值和真實值的均方誤差MSE作為損失函數(shù),使用Adam優(yōu)化算法更新參數(shù)。
以上證指數(shù)收盤價為預(yù)測目標,分別將6個輸入維度的特征序列和48個輸入維度的特征序列放入模型訓(xùn)練,將測試集數(shù)據(jù)輸入訓(xùn)練好的模型,得到實驗結(jié)果。
表1和表2分別給出了6個輸入維度以及48個輸入維度下標準形式的GRU與基于注意力機制的GRU在測試集上的預(yù)測效果??梢钥闯?,無論是哪一種輸入維度,基于注意力機制的GRU的預(yù)測效果均優(yōu)于標準形式的GRU,這說明在GRU中加入注意力機制是有利于預(yù)測性能提升的。在輸入維度為6時,兩種模型在測試集上的MSE與MAPE相差不大,標準形式的GRU在MAPE上僅僅比基于注意力機制的GRU多0.14%。但在輸入維度為48時,由于輸入維度的增加,導(dǎo)致模型的參數(shù)增加,模型復(fù)雜度上升,對于信息的整合能力下降。
表1 6個輸入維度的模型比較
表2 48個輸入維度的模型比較
相較于6個輸入維度,此時GRU的MAPE增加了0.71%,增加了近1倍。而基于注意力機制的GRU預(yù)測性能變化不大,相反MAPE降低了0.03%。相較于標準形式的GRU,可以認為注意力機制的引入增強了GRU應(yīng)對更高維輸入的能力。
圖3~圖6也分別給出了6個輸入維度以及48個輸入維度下標準形式的GRU與基于注意力機制的GRU在測試集上的實際預(yù)測結(jié)果。通過與原始數(shù)據(jù)的直觀對比,可以看出在6個輸入維度下兩種模型都有著不錯的預(yù)測效果,2個模型在輸入維度變?yōu)?8后才出現(xiàn)較為明顯的預(yù)測差距。
圖3 6個輸入維度的GRU預(yù)測結(jié)果
圖4 6個輸入維度的基于注意力機制的GRU預(yù)測結(jié)果
圖5 48個輸入維度的GRU預(yù)測結(jié)果
圖6 48個輸入維度的基于注意力機制的GRU預(yù)測結(jié)果
本文通過在循環(huán)神經(jīng)網(wǎng)絡(luò)中加入注意力機制,探尋其在金融時間序列方面的應(yīng)用。以上證指數(shù)為例,建立基于注意力機制的GRU,并與標準形式的GRU進行對比,得出基于注意力機制的GRU可以提高預(yù)測金融時間序列的能力的結(jié)論。同時,考慮不同序列輸入維度對模型的影響,發(fā)現(xiàn)隨著輸入維度的增加,標準形式的GRU預(yù)測能力下降明顯,而基于注意力機制的GRU預(yù)測性能變化不大??梢哉J為加入注意力機制后,GRU對于信息的整合能力有所提升。因此,在循環(huán)神經(jīng)網(wǎng)絡(luò)中加入注意力機制,對于金融時間序列的預(yù)測任務(wù)來說,不僅可以提升預(yù)測性能,還能在保證預(yù)測效果的同時應(yīng)對更多維度輸入的情況。