黃有為 高燕



摘 要:金融預測旨在對金融歷史數據進行分析,構建預測模型,并對未來數據走勢作出預測。系統創新性地將最新的深度學習成果與金融預測相結合,提出使用循環神經網絡預測金融數據變化的方法。首先介紹了近幾年人工智能的突破性成果,以RNN相關技術為基礎對系統進行設計,然后通過實驗組展示系統預測效果,并對系統獲得的結果數據,使用深度學習相關評估算法評估其預測準確性。實驗評估結果表明,使用循環神經網絡學習與分析歷史數據,并將其模型用于預測未來金融數據走勢的方案具有較高的可靠性與準確性。因此,深度學習在金融預測領域具有較大發展潛力。
關鍵詞:深度學習;神經網絡;RNN;大數據;金融預測
DOI:10. 11907/rjdk. 181779
中圖分類號:TP303文獻標識碼:A文章編號:1672-7800(2019)001-0028-06
Abstract: The purpose of financial forecasting is to analyze financial historical data, construct forecasting model, and forecast the trend of future data. This paper combines the latest in-depth learning results with financial forecasting systematically and creatively, and puts forward a method of forecasting the changes of financial data using cyclic neural network. Firstly, this paper introduces the breakthrough of artificial intelligence in recent years, designs the system based on RNN technology, realizes it by computer language, and then displays the predictive effect of the system through the experimental group, and evaluates the predictive accuracy of the system by depth learning related evaluation algorithm. According to the final experimental evaluation results, the scheme uses the cyclic neural network to learn and analyze historical data, and using the model to predict the future trend of financial data has certain reliability and accuracy, thus in-depth learning has development potential in financial forecasting.
Key Words: deep learning; neural network; RNN; big data; financial forecast
0 引言
人工智能的概念早在1956年即被提出,經歷了半個多世紀的發展,直至人工神經網絡理論的提出,以及Google第一次發表深度學習技術,并通過“人機大戰”[1]的形式走進公眾視野,人們才真正認識到深度學習的強大能力。
關于人工智能的發展,傳統人工智能技術在上世紀70-90年代占據了絕對領導地位,例如非線性與線性核 SVM、貝葉斯分類器等方法,被認為適合于小型數據計算。隨著互聯網的迅速發展,Internet中的信息產生爆炸式增長。以金融數據為例,對新浪財經進行數據爬蟲,僅期貨一個板塊即獲得了幾十萬條數據,而且該數字每時每刻還在不斷增長。因此,近幾年提出“大數據”概念,以研究互聯網中產生的龐大數據量,并對其加以利用[2]。然而,類似金融領域的相關“大數據”已無法通過人工進行分析、挖掘或預測,即使借助傳統人工智能或統計軟件的幫助,想要擬合出數據變化特征也十分困難。因為人工建立的模型存在效率與容錯率低、擴展與升級緩慢等問題,且傳統人工智能方法并不適用于對龐大數據的特征挖掘。
深度學習不同于傳統人工智能方法[3],其采用“逆向推導思維”方式,以龐大的數據量為基礎,借助神經網絡自主學習的特點(神經元構建連接關系的過程),通過反復學習歷史數據進行不斷改進與優化,擬合出一個最優模型,其中RNN(循環神經網絡)適合于時間序列上數據特征的學習。由于金融數據具有序列性,可通過RNN擬合出歷史數據特征作為預測模型,并在預測過程中對模型不斷進行優化。隨著數據量的累積,模型理論上可無限趨于最優。
金融預測方法在國際上得到了廣泛關注,諾貝爾經濟學獎曾分別于2003年與2011年頒發給成功將基于自回歸條件差異及向量自回歸預測模型應用于金融時間序列預測的兩位經濟學家[4]。
在不同學術領域,學者們提出多種金融分析預測方法,包括:①基于經濟學的金融預測學及其改進的預測方法,例如基于灰色線性回歸組合模型的金融預測方法,其具有數據需求量少、預測模型精確的特點[5];②基于數學與統計學的預測方法與模型,例如改進的隱馬爾科夫模型及其在金融預測中的應用[6-7]、基于貝葉斯最大似然估計的金融預測等[8]。近幾年又出現了結合計算機技術對金融數據進行分析與預測的方法,其中以深度學習為基礎的金融預測技術發展尤為迅速[9],例如基于遺傳算法與神經網絡耦合的金融預測方法[10]、FEPA模型[11]、廣義回歸神經網絡的金融預測模型[12]等。此外,也不乏對計算機技術中傳統預測方法的應用,例如SVM方法[13]、EMD方法[14]等。在與計算機結合的金融分析預測方法中,無論是傳統預測方法,還是基于卷積神經網絡的深度學習金融預測方法,都具有較強的創新性,且在特定領域或環境下具有較高的準確性與可靠性。
綜合上述結合經濟學、數學、計算機科學針對金融數據的分析方案,即使是基于CNN(卷積神經網絡)或傳統人工智能的預測方法,如果是在長時間序列的歷史數據上構建模型,該模型對數據時間前后依賴性關系的記憶與分析能力較差,無法滿足長序列上的金融數據分析要求。本系統創新性地采用RNN(循環神經網絡)中的LSTM(長短期記憶神經網絡)[15]構建金融預測模型,其特點為:預測模型是針對歷史數據在時間線上相互影響產生的變化特征進行擬合,而非數據本身,即當日數據變化與昨日數據相關,昨日與前日數據相關,前日又與更久遠的數據相關,以此類推分析其遞歸關系,并且所追蹤的數據序列更長。該方法充分利用了金融數據變化的時間序列性、關聯性及重演性等特點。
1 系統設計
RNN(循環神經網絡)模型設計過程包括:數據加載、模型構建、數據訓練以及評估模型設計。
1.1 數據加載
(1)數據類型:金融數據。例如,期貨和股票通常提供以下4個價格:最高價、最低價、開盤價、收盤價。由于最高價和最低價已包含開盤價與收盤價,又因為開盤價和收盤價是某天數據中偶然出現的價格,故訓練數據應選擇最高價或最低價作為輸入數據。實驗為了加速數據訓練過程,將輸入數據類型暫時設定為最高價。
(2)數據窗口:對應RNN中的滑動窗口(為了預測目標數據所需輸入的特征數據序列,是一段長度可變、數據量有限、數據性質相同的連續數據,可理解為數學中的離散數據區間,例如:數據1、2、3、4、5可作為一個窗口,滑動到下一個窗口則為2、3、4、5、6)。該窗口大小需要根據RNN實際學習得出的模型進行調整。理論上,若窗口過大,隨著時間推移,數據變化特征對市場隨機噪點越敏感,距離預測目標值過于遙遠的數據對目標的意義則越小;若窗口過小,將導致深度學習產生過擬合,預測結果沒有實際參考價值。
可加載數據類型如表1所示。
1.2 模型構建
RNN包括輸入層(Input Layer)、輸出層(Output Layer)及隱藏層(Hidden Layer),其特點是每層都有時間反饋循環,并且層之間由疊加構成[16],其網絡結構如圖1所示。
由圖1可知,神經網絡結構設計如下:設日期(序列號)為t,價格為P[t],模型分3步預測P[t+w]?;瑒哟翱赑[t…t+w-1],其中t∈(1,tmax-w+1),且t∈N,w為設定窗口大小,P矩陣作為輸入層輸入矩陣,記作INPUT(T)。連接上次隱藏層HIDE(T-1),生成當前隱藏層的HIDE(T),將預測值P[t+w]作為輸出層的輸入,輸出預測結果,記作OUTPUT(T)。
Dropout設計:深度學習過程中,過度擬合是一個嚴重問題,Dropout是解決該問題的一種技術,其關鍵思想是在訓練過程中從神經網絡中隨機地丟棄單元(連同其連接)[17]。金融數據,尤其是期貨和股票受到市場環境影響,存在暴漲暴跌的可能性,因此需要為輸出層添加Dropout函數,以去除巨大價格波動造成的影響。同時由于RNN中的循環會放大噪聲,擾亂學習過程,故將Dropout用于非循環連接。
1.3 訓練與評估方案
將1.2節中已構建的RNN神經網絡模型設為LSTM(),使用LSTM()進行數據預測訓練并給出模型評估方案,具體步驟如下:
(1)對訓練數據組與測試數據組進行數據分離。
(2)將分離的數據組再分別分離為窗口與目標。
(3)配置訓練超參數,包括學習率、循環次數與batch批次。
(4)設計優化方案,定義損失函數與優化器,其中優化器采用Adam。損失函數公式為:
(5)對LSTM(窗口數組、目標值、訓練次數、批次)進行訓練。
(6)對測試數據組中實際值與LSTM()給出的預測值采用評估算法進行誤差評估,誤差越低表示模型越優良。
(7)保存模型文件。
訓練過程設計如圖2所示,圖中訓練預測值與LSTM RNN表示訓練過程中的自優化操作,將自身訓練產生的預測值回收后,執行步驟(4)進行方案優化。
2 關鍵技術
2.1 預測技術可行性
金融學預測技術滿足可行性需要的3個假定前提為:①市場行為消化一切行為;②價格會以趨勢的形式演變;③歷史終會重演[18]。滿足上述條件方可對金融預測進行研究。
2.2 LSTM技術
LSTM(長短期記憶網絡)是在RNN基礎上,為了解決長序數據建模存在的依賴性記憶下降問題而提出的一種改進算法,在LSTM中引入Cell,并將其封裝在block中,每一塊block包含了輸入門、遺忘門、輸出門與Cell[19],其作用是防止對序列中久遠節點的遺忘,增加NN的深度。LSTM block結構如圖4所示。
由于金融分析具有數據量龐大、數據變化快、窗口大、滑動范圍廣(指在訓練模型過程中所需輸入的數據段較多且區間較長)等特點,因此需要使用LSTM技術進行數據訓練,而非傳統的RNN。
2.3 數據可視化技術
針對神經網絡訓練過程制作可視化圖形,采用線性圖分別表現原始數據、訓練預測數據與測試預測數據,實驗使用 Python Data Analysis Library——Pandas進行數據分析,或通過Web技術將數據可視化至瀏覽器的Canvas中。
2.4 數據爬蟲技術
循環神經網絡的模型訓練是無限的,互聯網金融每日會產生新的商品價格、交易量等數據,系統需要定期更新數據庫中的歷史數據,以達到更好的預測效果。本文通過Python、Node.js等工具語言實現爬蟲算法,并提供可視化的爬蟲管理與數據管理功能,負責數據的獲取、整理與存儲。
3 核心算法
基于RNN的神經網絡實現需要對從互聯網爬取的數據進行加載,并去除無效數據。訓練前需要對訓練數據與仿真預測數據,以及訓練過程中的窗口數據與預測目標數據進行分離。其中,窗口數據為二維數組,目標數據為一維數組,在評估模型階段對目標數組與預測數組進行對比,給出評估結果。
3.1 最優爬蟲算法
爬蟲模塊采用最優爬蟲算法,即要求只可爬取規定范圍內的商品數據,從而使冗余數據量達到最少。假定已對數據類型、數據量進行了規范,使用最優爬蟲算法篩選出指定商品、商品屬性及其數據類型,并進行爬取與存儲,以下為實現該算法的關鍵代碼:
3.2 增量式爬蟲策略
爬蟲模塊采用增量式爬蟲,要求不能爬取重復數據,故需要對爬蟲系統實行重新訪問策略,并且是增量式而非重置模式。要實現增量式需要實現數據比對功能,實現該功能關鍵代碼如下:
3.3 LSTM神經網絡算法
在2.2節中已介紹LSTM是一種門限類型的RNN改進算法,并給出了block(下稱節點)結構圖,其節點包括輸入門、輸出門與遺忘門,可使自循環權重發生變化。在模型參數固定的情況下,不同時刻的積分尺寸可以動態改變,從而避免了梯度消失或梯度爆炸問題。LSTM單元(Cell)中包含的計算公式如下:
其中公式(2)為遺忘門限計算公式,公式(3)表示輸入門限計算公式,公式(4)為前一個Cell狀態計算公式,公式(5)表示當前Cell狀態計算公式,公式(6)為輸出門限計算公式,公式(7)表示當前單元最終輸出結果計算公式。所有公式被封裝在LSTM節點中,系統傳入的金融數據經過節點時將采用相關公式進行計算。根據窗口大小及數量,在時間序列上產生多個對應的Cell狀態,且前一狀態可影響下一狀態。其中公式中的tanh為激活函數。
激活函數:非線性函數,將輸出值作非線性變化,然后輸出到下一層。
通過對多組數據進行多組訓練,使節點之間的W、b變量達到最優,該過程需要通過成本函數實現。
成本函數:定量評估特定輸入值,計算該值與真實值的差距,以此調整層之間的權重,減少損失值。該過程稱為反向傳遞,損失值越小,結果越準確[20]。
3.4 數據加載實現
神經網絡的“數據加載”是指對數據庫進行讀取與整理,具體步驟為:引入驅動,加載數據庫配置文件,獲取指定商品價格,去除干擾數據(未交易價格),以float32形式暫存于數組中。
3.5 窗口與目標數據分離算法
訓練實現要求從SQL獲取到的數組數據中分離出窗口數據與目標數據,具體算法如下:
定義函數:窗口分離(數據集, 窗口大?。?/p>
窗口數組, 目標數組 = 數組[][], 數組[];
循環(次數:數據長度 - 窗口大?。?/p>
窗口數組增加(數據集[循環次數] 至 數據集[循環次數+窗口大小]);
目標數組增加(數據集[循環次數 + 窗口大小 + 1]);
循環結束;
返回 窗口數據數組,目標數據數組;
3.6 訓練與測試數據分離算法
為了進行實驗比較,下面對測試數據與訓練數據進行分離,具體算法如下:
定義常量:訓練數據百分比;
定義:訓練數據長度 = 數據集長度 × 訓練數據百分比
測試數據長度 = 數據集長度 - 訓練數據長度
訓練數組,測試數組 = 數據集[起始位置 至 訓練數據長度],數據集[訓練數組長度 至 數據集長度]
定義常量:窗口大小 (系統采用30天)
訓練窗口數組, 訓練目標數組 = 窗口分離(訓練數組, 窗口大小)
測試窗口數組, 測試目標數組 = 窗口分離(測試數組, 窗口大小)
3.7 LSTM數據訓練算法
對上述輸入數據進行矩陣變換,LSTM對輸入矩陣格式的構造方法如下:
訓練數據 = 格式化(訓練窗口數據, 訓練窗口數據長度, 1, 窗口大?。?/p>
數據訓練具體函數與算法如下:
定義函數:LSTM(訓練數據,目標數據,循環次數,批次);
定義變量:輸入權值;
定義變量:輸入偏置;
輸入運算 = 訓練數據*輸入權值+輸入偏置;
創建LSTM神經元(數目);
初始化零值(批次);
輸出數據 = 接收張量;
定義變量:輸出權值;
定義變量:輸出偏置;
預測值 = 輸出數據*輸出權值+輸出偏置;
DROPOUT();
返回 預測值;
3.8 模型評估算法
訓練完成后對模型進行評估與改進,其評估算法如下:
訓練預測數組 = LSTM()=>預測(訓練窗口數組);
測試預測數組 = LSTM()=>預測(測試窗口數組);
格式化數據(訓練預測數組,測試預測數組);
訓練數據評估 = [(訓練預測數據-訓練目標數據)2預測次數];
測試數據評估 = [(測試預測數據-測試目標數據)2預測次數];
打印(訓練數據評估,測試數據評估);
可視化;
4 算法改進實驗
本文對算法中的不同超參數進行調整,并進行了多組實驗,通過對比實驗對算法進行改進。
4.1 訓練次數對照實驗組
4.2 滑動窗口對照實驗組
LSTM中若滑動窗口過大將導致預測準確率下降,原因是距離過于遙遠的數據產生噪點過多,與目標數據的映射關系較小,并且窗口過大會導致可訓練的窗口批次過少,訓練量不足,從而產生過擬合問題。但若滑動窗口過小,數據之間在時間序列上關聯性降低,也將導致訓練過擬合問題,預測曲線過于貼合目標數據曲線,令預測結果沒有實際參考價值。圖9-圖11分別表示滑動窗口為100天、1天、30天的預測結果(彩圖見封底)。
實驗結果顯示,以100天為滑動窗口,預測效果明顯下降;以30天為滑動窗口,預測結果有一定參考價值;以1天為滑動窗口,預測數據幾乎重合于實際目標數據,產生預測過擬合問題,使預測數據沒有實際參考價值。得出結論,以30天為滑動窗口預測下一天價格較為合適,預測走勢曲線與真實曲線基本接近,差價較低,具有一定參考價值。
5 結語
本文研究使用RNN構建與訓練金融大數據預測模型,實驗以30天為滑動窗口,預測第31天的價格,訓練次數為100次,訓練數據量為60%,對不同金融商品進行單獨訓練,生成訓練記憶文件。經過評估算法檢測,部分商品的預測值接近目標值。例如:黃金預測模型評估值(平均差價)為2~5元,該價格較為合適,但目前仍有部分商品評估值(平均差價)高達100~1 000元,因而缺乏參考性。未來考慮針對不同商品的不同特性與數據量單獨調整超參數,或引入更多輸入參數,例如交易量、商品交易數據、相關行業數據等,這類數據會對商品價格走勢造成影響,能夠進一步提高預測準確性。
參考文獻:
[1] 李顥維. 人機大戰與人工智能的未來發展[J]. 考試周刊,2018(40):192-193.
[2] 楊柳. 互聯網時代下的大數據的統籌[J]. 中國戰略新興產業,2018(20):112.
[3] 董鑫. 未來人工智能自主學習網絡的構建[J]. 電子技術與軟件工程,2018(3):252.
[4] 張貴勇.? 改進的卷積神經網絡在金融預測中的應用研究[D].? 鄭州:鄭州大學,2016.
[5] 盧陽. 基于灰色線性回歸組合模型的金融預測方法[J]. 統計與決策,2017(10):91-93.
[6] 何劍. 風險管理和金融預測中的統計方法應用[J]. 商場現代化,2006(32):368-369.
[7] 徐朱佳,謝銳,劉嘉,等. 隱馬爾科夫模型的改進及其在金融預測中的應用[J]. 工程數學學報,2017,34(5):469-478.
[8] 沈斌,溫濤. 基于貝葉斯最大似然估計的金融預測[J]. 統計與決策,2018,34(7):85-88.
[9] 周飛燕,金林鵬,董軍. 卷積神經網絡研究綜述[J]. 計算機學報,2017,40(6):1229-1251.
[10] 宋曉勇,陳年生. 遺傳算法和神經網絡耦合的金融預測系統[J]. 上海交通大學學報,2016,50(2):313-316.
[11] 張承釗.? 一種金融市場預測的深度學習模型:FEPA模型[D]. 成都:電子科技大學,2016.
[12] 廖薇,馮小兵,曹偉瑩,等. 廣義回歸神經網絡的金融預測模型研究[J]. 商業時代,2010(7):42-43.
[13] 李祥飛,張再生. 基于誤差同步預測的SVM金融時間序列預測方法[J]. 天津大學學報:自然科學與工程技術版,2014,47(1):86-94.
[14] 王方.? 基于EMD和STSA的金融波動研究[D]. 天津:天津大學,2016.
[15] 朱星嘉,李紅蓮,呂學強,等. 一種改進的Attention-Based LSTM特征選擇模型[J]. 北京信息科技大學學報:自然科學版,2018,33(2):54-59.
[16] 楊祎玥,伏潛,萬定生. 基于深度循環神經網絡的時間序列預測模型[J]. 計算機技術與發展,2017,27(3):35-38,43.
[17] SRIVASTAVA N, HINTON G, KRIZHEVSKY A, et al. Dropout: a simple way to prevent neural networks from overfitting[J].? Journal of Machine Learning Research, 2014, 15(1):1929-1958.
[18] 黃圣根.? 期貨投資技術分析[J].? 資本市場, 2013(6):126-127.
[19] 唐寅.? 長短時記憶神經網絡模型改進[J]. 時代金融, 2016(24):281-282.
[20] 李嘉璇. TensorFlow技術解析與實戰[M]. 北京:人民郵電出版社,2017.
(責任編輯:黃 ?。?/p>