宮振華,王嘉寧,蘇 翀
1(南京機電職業(yè)技術(shù)學(xué)院,南京 211135)
2(江蘇科技大學(xué) 電氣與信息工程學(xué)院,張家港 215600)
3(南京郵電大學(xué) 管理學(xué)院,南京 210023)
隨著經(jīng)濟改革開放初期[1],股份制開始誕生,我國股票發(fā)行市場隨即開始萌芽.相比于美國市場,我國股票市場的起步較晚,但是經(jīng)過三十多年經(jīng)濟的建設(shè)、證券制度和法規(guī)的逐步完善,市場已經(jīng)越來越趨于成熟規(guī)范化發(fā)展.因此越來越多的人搖身變成"股民",投身于浩瀚的“股市”之中.
隨著中國股票市場的不斷發(fā)展,上市公司數(shù)量也在逐步遞增,流通于證券市場的股票數(shù)量也隨之增加[2].每只股票都擁有幾十個不同的層面、維度上的數(shù)據(jù),中小股民在面對多維度,數(shù)量巨大的數(shù)據(jù)時就加大了基于股票技術(shù)層面上分析的難度.投資者在處理過多的變量時,容易造成分析過程的混亂.
為了實現(xiàn)較為準確的股票預(yù)測,本文研究了MLP 和BP 神經(jīng)網(wǎng)絡(luò)模型,并結(jié)合兩種模型構(gòu)造了MLBP 模型,分別將爬取的股票歷史數(shù)據(jù)作為神經(jīng)網(wǎng)絡(luò)的輸入集,通過模型的調(diào)參處理,得出預(yù)測的結(jié)果.根據(jù)MSE 誤差對比分析選取誤差最小的作為股票預(yù)測的應(yīng)用模型,并利用其找出每股變化所表現(xiàn)出來的動態(tài)運行規(guī)律,為股市中廣大中小投資者等弱勢群體服務(wù),并指導(dǎo)其進行有效的價值投資[3].
MLP (Multi-Layer Perception)神經(jīng)網(wǎng)絡(luò)是一種結(jié)構(gòu)為層層遞進的人工神經(jīng)網(wǎng)絡(luò),一組輸入變量可以被映射、傳遞到一組輸出變量.該網(wǎng)絡(luò)輸入層、隱藏層和輸出層.除了輸入節(jié)點之外,每個節(jié)點自身都帶有一個非線性激活函數(shù)的神經(jīng)元[4].隱藏層主要實現(xiàn)對輸入空間的非線性映射,輸出層則是實現(xiàn)結(jié)果的線性分類.
MLP 網(wǎng)絡(luò)有輸入層(最左邊),隱藏層(中間兩層),和輸出層(最右邊),MLP 只有向前傳播過程.每個神經(jīng)元上面都有對于一個輸入的權(quán)值、一個偏置和一個激活函數(shù).所以一個前向過程的流程就是input 輸入,然后經(jīng)過第一層神經(jīng)元運算得到輸出,然后第一層的輸出作為第二層的輸入運算,得到第二層的輸出,直到輸出層運算,最后得到結(jié)果.神經(jīng)網(wǎng)絡(luò)就是依靠這樣一套機制來進行計算和預(yù)測的.神經(jīng)網(wǎng)絡(luò)模型圖如圖1.
圖1 MLP 神經(jīng)網(wǎng)絡(luò)模型
BP(Back Propagation)前饋神經(jīng)網(wǎng)絡(luò),是一種在MLP 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上改進的反饋型學(xué)習(xí)網(wǎng)絡(luò).由兩個階段組成,第一階段是將訓(xùn)練輸入送入網(wǎng)絡(luò)以獲得激勵響應(yīng);再將激勵響應(yīng)同訓(xùn)練輸入對應(yīng)的目標輸出求差,獲得最后兩層的響應(yīng)誤差;第二階段將輸入激勵和響應(yīng)誤差相乘獲得權(quán)重的梯度;再將這個梯度乘上一個比例并取反后加到權(quán)重上.當整個訓(xùn)練網(wǎng)絡(luò)輸出層的誤差縮小到期望值范圍或訓(xùn)練次數(shù)超過閾值的時候,所有訓(xùn)練過程才最終結(jié)束,這就是BP 神經(jīng)網(wǎng)絡(luò)一次學(xué)習(xí)訓(xùn)練的全部過程.
BP 神經(jīng)網(wǎng)絡(luò)算法一般由三層或多層組成,是一種多層前饋神經(jīng)網(wǎng)絡(luò).由輸入層、輸出層和隱含層組成[5].由于BP 模型具有誤差反向傳播,能夠很好的改變網(wǎng)絡(luò)的權(quán)值和閾值,因此其具有泛化能力.80%的人工神經(jīng)網(wǎng)絡(luò)中包含了BP 網(wǎng)絡(luò)[6,7],所以是使用最廣泛的神經(jīng)網(wǎng)絡(luò)模型[8],在股票預(yù)測分析系統(tǒng)中也會將BP 模型作為第一選擇,BP 算法的模型如圖2所示.
圖2 BP 神經(jīng)網(wǎng)絡(luò)模型圖
假設(shè)輸入節(jié)點xj、隱層節(jié)點yi、輸出節(jié)點O1分別表示BP 神經(jīng)網(wǎng)絡(luò)三層節(jié)點.隱節(jié)點與輸入節(jié)點間的權(quán)值為Wij,輸出節(jié)點與隱含層節(jié)點的網(wǎng)絡(luò)權(quán)值為Tli.BP 算法的核心是對權(quán)值Wij,Tli的 調(diào)整和對閾值θ 的調(diào)整,使誤差函數(shù)E沿梯度方向下降.假設(shè)在輸出節(jié)點的期望輸出為t1時,BP 模型的計算公式為:
(1)隱含節(jié)點輸出公式:
(2)輸出節(jié)點輸出公式:
(3)輸出節(jié)點誤差的公式:
BP 和MLP 組合模型即為MLBP 模型,其是在BP 模型和MLP 模型的基礎(chǔ)上進行改進的模型,將MLP 的多個隱含層放入到BP 模型中,因此MLBP 模型是有1 個輸入層,2 個隱含層和1 個輸出層的反向傳播神經(jīng)網(wǎng)絡(luò).
MLBP 模型的執(zhí)行流程如下:
(1)首先獲取股票的歷史數(shù)據(jù)及待預(yù)測的數(shù)據(jù),作為模型的輸入集.
(2)對數(shù)據(jù)進行預(yù)處理,包括轉(zhuǎn)置和歸一化.
(3)構(gòu)建MLBP 模型,并初始化參數(shù).
(4)不斷地進行調(diào)參進行訓(xùn)練,直到訓(xùn)練次數(shù)達到一定數(shù)值,保存訓(xùn)練數(shù)據(jù)訓(xùn)練出的模型(包括網(wǎng)絡(luò)的層數(shù)、權(quán)值等參數(shù)).
(5)帶入待測數(shù)據(jù),進行預(yù)測,并進行誤差分析.
主要MLBP 模型的流程圖如圖3所示.
圖3 MLBP 模型流程
MSE (Mean Square Error)均方誤差[9]是衡量訓(xùn)練模型的輸出值與真實值之間平方誤差的總體期望偏差,如式(4)所示.
這里需要引入兩個定義:
(1)估計的偏差bias
其中,期望作用在所有從隨機變量采樣得到的數(shù)據(jù)上,θ為真實值.如果bias為0,則稱估計量是無偏的.
(2)方差Var
其中,μ是樣本的均值.
此處,可以根據(jù)式(5)、式(6)將式(4)改寫為:
MSE包含了偏差和方差,理想的估計具有較小的MSE或是在檢查中會稍微約束它們的偏差和方差.
實驗包括數(shù)據(jù)爬取和模型對比兩部分.首先通過Python 提供的Tushare 接口[10]爬取50 天的股票數(shù)據(jù)信息,對這些數(shù)據(jù)進行轉(zhuǎn)置和歸一化處理,并將數(shù)據(jù)分成訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集存入數(shù)據(jù)庫.隨后分別使用MLP、BP 和MLBP 模型對數(shù)據(jù)庫中的股票數(shù)據(jù)進行訓(xùn)練和預(yù)測,并根據(jù)實驗數(shù)據(jù)進行模型對比.
實驗中的調(diào)參包括:Sigmoid 選取正切函數(shù),初始權(quán)重的范圍在[-0.1,0.1]之間,使用MSE計算誤差.設(shè)訓(xùn)練次數(shù)記為T,T取值300 和500,學(xué)習(xí)速率記為N,N取值0.05、0.1 和0.15,動量因子記為M,M取值0.1,輸入層記為I,隱含層記為H,輸出層記為O,誤差記為E.
實驗內(nèi)容是根據(jù)50 天的歷史數(shù)據(jù)來預(yù)測未來3 天的股票信息.表1至表3分別是MLP、BP 和MLBP的預(yù)測數(shù)據(jù).
在這3 種算法中,BP 和MLBP 模型計算的誤差要遠遠小于MLP 算法,而MLBP 模型相比BP 模型誤差進一步降低.因為MLBP 在訓(xùn)練參數(shù)和權(quán)值時用了反向傳播并更新的過程,所以能夠更加準確的進行預(yù)測.模型誤差對比如圖4所示.
表1 50 天數(shù)據(jù)預(yù)測3 天數(shù)據(jù)表(MLP 模型)
表2 50 天數(shù)據(jù)預(yù)測3 天數(shù)據(jù)表(BP 模型)
表3 50 天數(shù)據(jù)預(yù)測3 天數(shù)據(jù)表(MLBP 模型)
三種模型的誤差都非常均勻,因此預(yù)測的結(jié)果具有平穩(wěn)性.但是三種算法的都有的缺點是當選取的數(shù)據(jù)量特別多時,會導(dǎo)致訓(xùn)練時間過長,而較少的數(shù)據(jù)量雖然能夠加快運算速度,但預(yù)測的誤差會變大,因此選擇合適的數(shù)據(jù)規(guī)??梢詸?quán)衡誤差與效率.
圖4 模型誤差對比圖
通過對股票數(shù)據(jù)的訓(xùn)練和預(yù)測實驗,可證明MLBP模型更能夠準確的對股票數(shù)據(jù)進行分析,因此其在股票分析方面具有潛在的應(yīng)用價值[11].
為了能夠極大地發(fā)揮該模型的作用,同時讓用戶更加方便的進行股票數(shù)據(jù)的分析和預(yù)測,本文將該模型應(yīng)用于股票分析平臺.該平臺為Django 框架[12]的WEB 應(yīng)用程序,以MLBP 模型作為平臺的核心業(yè)務(wù)部分.另外增加了注冊登錄、上市公司信息、財務(wù)報表、行業(yè)分類等功能作為輔助部分.平臺的用例圖和功能模塊圖分別如圖5、圖6所示.
圖5 平臺用例圖
平臺包括用戶、股票、企業(yè)、企業(yè)報表等實體,各個實體之間具有一定關(guān)聯(lián)性包括:
(1)每個用戶可以查看所有股票基本信息、查看所有企業(yè)信息和所有企業(yè)報表信息.
(2)每只股票對應(yīng)一個企業(yè),并且每只股票的所有信息能被所有用戶查詢.
(3)每份企業(yè)報表都可以被所有用戶查看,每份企業(yè)報表對應(yīng)一個企業(yè).
(4)每個企業(yè)對應(yīng)一只股票,并且擁有許多企業(yè)報表,每個企業(yè)可以被所有用戶查看.
實體關(guān)系(E-R)圖如圖7所示.
圖6 平臺功能模塊圖
圖7 平臺E-R 圖
平臺部署在本地服務(wù)器上,通過訪問項目網(wǎng)址可展示平臺界面.平臺首頁如圖8所示.
以股票行情預(yù)測模塊為例,用戶在頭部輸入框中輸入查詢的股票代碼,系統(tǒng)后臺調(diào)用財經(jīng)數(shù)據(jù)接口獲取交易數(shù)據(jù),并將數(shù)據(jù)放入神經(jīng)網(wǎng)絡(luò)算法代碼中處理,將各個算法的輸出值使用MSE 誤差估計模型進行比較,最后得出最佳的預(yù)測結(jié)果.后臺將運行結(jié)果返回到前臺頁面展示,如圖9所示.
圖8 平臺首頁
圖9 股票行情預(yù)測界面
通過分析現(xiàn)今的股票市場發(fā)展,根據(jù)眾多中小投資者對股市信息的預(yù)測需求,本文研究了MLP、BP和MLBP 模型,并通過實驗和模型對比可知,MLP 和BP 組合模型可以進一步提高預(yù)測的準確度,降低誤差率,從而使投資者可以根據(jù)預(yù)測的股票信息更清楚的進行投資決策.另外通過將MLBP 應(yīng)用在WEB 程序中,更加方便了用戶操作,提高了模型的應(yīng)用價值.
在接下來的工作中,還會繼續(xù)完善MLBP 模型,在降低誤差的基礎(chǔ)上進一步提高運行速率.同時廣泛爬取不同種類的股票信息,拓展股票分析平臺的功能,為不同需求的用戶提供多方面服務(wù).