(1.浙江工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,浙江 杭州 310023;2.浙江理工大學(xué) 信息工程學(xué)院,浙江 杭州 310018)
股票價格的預(yù)測是金融領(lǐng)域研究的重點。但是由于股市的復(fù)雜性使得股價預(yù)測成為一個很大的難題。股票的價格受到各個方面的因素影響,如銀行存款利率、行業(yè)因素[1]和國家政策等。這些復(fù)雜的因素導(dǎo)致投資者在判斷一支股票的價格走勢時出現(xiàn)了較大的偏差,從而產(chǎn)生了巨大的投資風(fēng)險。所以建立一個可以智能預(yù)測股票價格的模型是很有必要的。在1970年初,美國統(tǒng)計學(xué)家Box等[2]提出了以一種時間序列模型ARIMA來預(yù)測股價。ARIMA模型結(jié)構(gòu)簡單,但是它要求輸入的數(shù)據(jù)必須是線性相關(guān)的,這與股票價格非線性變化的特點矛盾,使得ARIMA模型在預(yù)測股票價格時準(zhǔn)確率不高,應(yīng)用范圍有限。隨后,Engle[3]提出了自回歸條件異方差模型ARCH,很好地描述了股票價格波動的不確定性,在經(jīng)濟學(xué)領(lǐng)域被廣泛的應(yīng)用。隨著近年來人工智能技術(shù)的發(fā)展,不少智能化算法被廣泛地應(yīng)用到股票價格預(yù)測中。Ke等[4]根據(jù)股票價格非線性變化的特點,采用BP神經(jīng)網(wǎng)絡(luò)對股票數(shù)據(jù)進行了實證分析,并且使用遺傳算法改進了傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的計算精度和收斂速度,取得了良好的預(yù)測結(jié)果。但是基于BP神經(jīng)網(wǎng)絡(luò)的預(yù)測模型,需要優(yōu)化大量的參數(shù),容易陷入局部極值和產(chǎn)生過擬合的現(xiàn)象。王衛(wèi)紅等[5]提出了PCA-FOA-SVR算法,采用PCA消除股票價格特征的冗余信息,并通過果蠅算法優(yōu)化SVR的參數(shù),克服了神經(jīng)網(wǎng)絡(luò)過擬合、陷入局部最小等缺陷。但是如何選擇一個合適的核函數(shù)仍缺乏有效的理論指導(dǎo)。
由于股票的價格是一種可觀測的時間序列,而決定股票價格的因素屬于未知變量。這個特性和隱馬爾科夫模型(Hidden Markov Model, HMM)相符,不少學(xué)者將其應(yīng)用到股價預(yù)測中。HMM是一個統(tǒng)計模型,最早由Baum等[6-7]提出,目前已經(jīng)在語音識別[8-9]、生物DNA序列分析[10-11]、圖像處理[12-13]和模式識別[14]等領(lǐng)域有了成熟的應(yīng)用。Hassan等[15]首次將HMM應(yīng)用在金融數(shù)據(jù)上,他將股票的開盤價、收盤價、最高價和最低價作為HMM的觀測序列,在訓(xùn)練得到HMM的參數(shù)后,計算當(dāng)日股票收盤價在HMM下產(chǎn)生的似然值來尋找歷史相似模式,從而對未來股票價格進行了預(yù)測。Gupta等[16]利用Hassan的方法,用股票每日最高價和最低價變化的百分比作為特征訓(xùn)練HMM,取得了不錯的預(yù)測效果。與以上所提出的方法不同,筆者將股票的每日收盤價序列轉(zhuǎn)換為收益率序列,然后將其離散化。對比連續(xù)型HMM,離散型HMM模型較為簡單,參數(shù)個數(shù)少,可以降低異常值的影響保證模型的穩(wěn)定性。在預(yù)測階段,不再通過尋找歷史相似模式,而是結(jié)合Viterbi[17]算法給出預(yù)測結(jié)果的概率分布。通過對上證交易所和深圳交易所的部分股票的實證,實驗結(jié)果表明:筆者提出的方法有著不錯的預(yù)測效果和指導(dǎo)意義。
HMM主要由隱狀態(tài)序列(S1,S2,…,Sn)和觀測序列(O1,O2,…,On)組成。隱狀態(tài)序列是一組含有未知變量的狀態(tài)序列,它的狀態(tài)是不可見的。每一個隱狀態(tài)Sn僅與上一個隱狀態(tài)Sn-1相關(guān),并且與其他狀態(tài)無關(guān)。觀測序列是一組直接觀測可得的值,對于每一個觀測值On,它由與之對應(yīng)的隱狀態(tài)Sn在一定的概率分布下產(chǎn)生,如圖1所示。

圖1 隱馬爾可夫過程
離散型HMM包含5 個參數(shù):λ=(N,M,A,B,π)。其中:
N={q1,q2,…,qn}:狀態(tài)的有限集合。
M={v1,v2,…,vm}:觀察值的有限集合。
A={aij},aij=P(qt=Sj|qt-1=Si):狀態(tài)轉(zhuǎn)移概率矩陣。
B={bjk},bjk=P(Ot=vk|qt=Sj):觀察值概率分布矩陣。
π={πi},πi=P{q1=Si}:初始狀態(tài)概率分布。
令λ={A,B,π}為給定HMM的參數(shù),O={O1,O2,…,On}為觀察序列,則有關(guān)于HMM的3 個基本問題可以描述為
1)評估問題:對于給定HMM模型,求產(chǎn)生某一個觀察序列的概率P(O|λ),該問題可以通過前向-后向算法求解。
2)解碼問題:對于給定HMM模型和觀察序列,求產(chǎn)生此觀測序列可能性最大的狀態(tài)序列maxQ{P(Q|O,λ)},該問題可以通過Viterbi算法求解。
3)學(xué)習(xí)問題:對于給定的一個觀察序列O={O1,O2,…,On},求解參數(shù)λ={A,B,π},使得觀察序列產(chǎn)生的概率P(O|λ)最大,該問題可以通過Baum-Welch算法求解。
將股票的每日收盤價序列CP={CP1,CP2,…,CPn}轉(zhuǎn)換為對應(yīng)的收益率序列ROR={ROR1,ROR2,…,RORn},即
(1)
當(dāng)輸入的觀測序列為連續(xù)值時,給定隱狀態(tài)St=j產(chǎn)生隨機觀測值Ot的概率bj(Ot)應(yīng)表示為連續(xù)概率密度函數(shù),大部分方法會用正態(tài)分布來近似地模擬這種關(guān)系。由于股市的復(fù)雜性,正態(tài)分布無法準(zhǔn)確地模擬觀測值的概率分布。于是筆者采用將股票收益率離散化的方式,將HMM模型產(chǎn)生的觀測值的概率轉(zhuǎn)化為每一個離散值的概率。具體步驟為
1)求得ROR序列中的最大收益率max和最小收益率min。
2)以收益率等于零為中心點,分別向正方向和負方向劃分等距離的區(qū)間,直到該區(qū)間包含max和min。區(qū)間的長度如果太長,會導(dǎo)致預(yù)測結(jié)果誤差增大,若區(qū)間的長度太短,則區(qū)間的數(shù)量增多,使得計算量增大。根據(jù)實驗結(jié)果,本文中筆者取區(qū)間長度為0.001。
3)將收益率值所落在的區(qū)間,將其轉(zhuǎn)換為對應(yīng)的離散值。其中On表示轉(zhuǎn)換后的離散值,length表示區(qū)間長度,即
(2)
將離散化后的觀測序列O={O1,O2,…,On}作為HMM的輸入來訓(xùn)練HMM的參數(shù)λ。將觀測序列記作O,并將相應(yīng)的隱狀態(tài)序列記作I,那么問題就轉(zhuǎn)換為求一個具有隱變量的概率模型的解,即
(3)
該模型參數(shù)可以通過Baum-Welch算法[18-19]計算得到,具體算法為
輸入觀測數(shù)據(jù)O={O1,O2,…,On}
輸出HMM參數(shù)λ={A,B,π}

2)根據(jù)公式迭代參數(shù),即
(4)
(5)
(6)
3)當(dāng)?shù)螖?shù)達到筆者規(guī)定的次數(shù)或者參數(shù)收斂不再變化即可停止迭代,得到模型最終參數(shù)λ(n+1)=(A(n+1),B(n+1),π(n+1))。
Baum-Welch算法受參數(shù)初始值影響較大,所以在實驗中分別隨機初始化10 組不同的參數(shù),對模型進行參數(shù)估計,選取logP(O|λ)最大的一組參數(shù)作為最終的初始化參數(shù)。
在得到訓(xùn)練好的模型后,如何預(yù)測未來的股價是一個重要的問題,因為這直接影響到了最后預(yù)測的結(jié)果。Hassan在歷史數(shù)據(jù)O={O1,O2,…,On-1}中尋找與當(dāng)天觀測值On在λ={A,B,π}下產(chǎn)生的似然值Ln=logP(On|λ)最接近的似然值Li,并認(rèn)為第i天到第i+1天的收盤價變化和第n天到第n+1天的收盤價變化具有一定的相似性,于是預(yù)測出第n+1天的收盤價CPn+1,即
CPn+1-CPn=CPi+1-CPi
(7)
但是這樣的預(yù)測方法存在一定的問題。Hassan認(rèn)為:1)似然值相近的兩天,它們下一天收盤價的變化相似;2)如果收盤價的變化相似,它們下一天與當(dāng)天收盤價的差相等,意味著它們的漲跌幅度一樣。以上兩點都缺乏一定的理論支持,從而會造成最后的預(yù)測結(jié)果出現(xiàn)較大的誤差。于是筆者采取了不同的預(yù)測方法:基于模型的狀態(tài)轉(zhuǎn)移矩陣A和輸出概率矩陣B計算出未來一天觀測值概率分布。這樣使得預(yù)測值更有依據(jù),從而得到更加精確的預(yù)測值。
具體地,通過Viterbi算法求出觀測序列O={O1,O2,…,On}對應(yīng)的最優(yōu)隱狀態(tài)序列S={S1,S2,…,Sn}。Sn即為當(dāng)天的隱狀態(tài),然后通過狀態(tài)轉(zhuǎn)移矩陣A計算出后一天最有可能的隱狀態(tài)Sn+1。再結(jié)合隱狀態(tài)Sn+1對應(yīng)的輸出概率矩陣B得到每一個離散值的概率分布。但無論是通過觀測隱狀態(tài)序列S還是狀態(tài)轉(zhuǎn)移矩陣A,都可以發(fā)現(xiàn)狀態(tài)的轉(zhuǎn)移存在一定的“慣性”。即同一個狀態(tài)持續(xù)的時間長,也就意味著當(dāng)前狀態(tài)轉(zhuǎn)移到自身狀態(tài)的概率會遠遠大于轉(zhuǎn)移到其他狀態(tài)的概率。所以通過狀態(tài)轉(zhuǎn)移矩陣A得到的隱狀態(tài)Sn+1就等于當(dāng)天的隱狀態(tài)Sn。這樣就會忽略當(dāng)前狀態(tài)轉(zhuǎn)移到其他狀態(tài)的情況。為了解決這個問題,將當(dāng)前隱狀態(tài)Sn轉(zhuǎn)移到下一個隱狀態(tài)的轉(zhuǎn)移概率aSnj作為權(quán)重來計算每一個離散值的概率分布,如圖2,3所示。具體的計算方法為
(8)
式中:N表示隱狀態(tài)個數(shù);Pi表示每一個離散值的概率。

圖2 利用狀態(tài)轉(zhuǎn)移矩陣A和概率輸出矩陣B求得第n+1天所有離散值的概率分布

圖3 所有離散值的概率分布
每一個離散值對應(yīng)一個收益率區(qū)間,最后將每個區(qū)間的中位數(shù)mRORi與其對應(yīng)的概率Pi的乘積的累加得到最后預(yù)測的收益率RORn+1,即
(9)
式中M表示離散值個數(shù)。
再將式(1)變形,計算出最終的預(yù)測收盤價CPn+1,即
CPn+1=RORn+1×CPn+CPn
(10)
筆者選取了3 支上證指數(shù)的股票作為實證研究的樣本數(shù)據(jù)。這3 支股票分別為伊利股份(SH600887),中國平安(SH601318)以及招商銀行(SH600036)。將3 支股票2015年至2016年的交易數(shù)據(jù)作為訓(xùn)練集來訓(xùn)練HMM的參數(shù),選取2017年的交易數(shù)據(jù)作為測試集來驗證模型的有效性。實驗中,為了保證預(yù)測結(jié)果的準(zhǔn)確性以及合理性,使用滑動窗口的方式來訓(xùn)練HMM參數(shù)并進行預(yù)測。具體地,將2015年1月1日—2016年12月31日的數(shù)據(jù)用來訓(xùn)練模型參數(shù),預(yù)測2017年1月1日的收盤價;然后用2015年1月2日—2017年1月1日的數(shù)據(jù)用來訓(xùn)練模型參數(shù),預(yù)測2017年1月2日的收盤價,以此類推,直到2017年12月31日。最終得到2017年所有的預(yù)測結(jié)果,如圖4~6所示。

圖4 伊利股份(SH600887)2017年股價預(yù)測值與真實值對比

圖5 中國平安(SH601318)2017年股價預(yù)測值與真實值對比

圖6 招商銀行(SH600036)2017年股價預(yù)測值與真實值對比
為了驗證模型的有效性,選取了連續(xù)型HMM模型(即用正態(tài)分布近似模擬輸出概率矩陣)、Hassan提出的方法以及SVM模型作為對比模型。并且使用了常見的預(yù)測評估指標(biāo),即相對誤差絕對值平均MAPE(Mean absolute percentage error)來評價不同模型預(yù)測結(jié)果的有效性。MAPE定義為
(11)
各個模型的預(yù)測結(jié)果和預(yù)測誤差如表1~4所示。

表1 不同模型對SH600887的預(yù)測值

表2 不同模型對SH601318的預(yù)測值

表3 不同模型對于SH600036預(yù)測值

表4 不同模型的預(yù)測誤差
根據(jù)實驗結(jié)果,發(fā)現(xiàn)離散型HMM對不同股票價格的預(yù)測誤差均低于其他3 種模型,說明離散型HMM在股價預(yù)測上有著比其他方法更高的精度和穩(wěn)定性。與此同時,選取了100 支深圳交易所上市的股票(SZ300開頭)和100 支上證交易所的股票(SH60開頭),利用筆者所提出的方法進行實驗。
以每支股票的市值(億元)作為X軸,預(yù)測誤差指標(biāo)MAPE作為Y軸建立直角坐標(biāo)系,如圖7所示。從圖7中可以發(fā)現(xiàn):當(dāng)股票市值大于240 億元時,筆者提出方法的預(yù)測誤差可以控制在1%之內(nèi),當(dāng)股票市值小于240 億元時,預(yù)測誤差會在0~6%之間波動。實驗結(jié)果表明筆者方法在股票市值大于240 億元時有著較高的預(yù)測精度。
另外從表5中可以發(fā)現(xiàn):對比來自上證交易所的股票,筆者的預(yù)測誤差明顯小于來自深圳交易所的股票。所以綜合以上可知:離散型HMM模型對于來自上證交易所中市值較大的股票有著更好的預(yù)測精度。

表5 不同交易所的股票預(yù)測誤差
提出了一種離散型HMM模型,通過將股票的收盤價轉(zhuǎn)換為收益率,再對收益率離散化作為HMM的輸入。在訓(xùn)練HMM參數(shù)時,通過選取多組初始化參數(shù)來保證得到更好訓(xùn)練結(jié)果。在預(yù)測階段,通過狀態(tài)轉(zhuǎn)移矩陣和輸出概率矩陣計算出后一日預(yù)測結(jié)果的概率分布,從而得出預(yù)測結(jié)果。實驗結(jié)果表明離散型HMM比起現(xiàn)有方法具有更好的預(yù)測精度,并且適用于上證交易所中市值較大的股票,可以為投資者提供合理有效的參考。但是,筆者方法仍舊存在部分缺點需要解決,比如利用Baum-Welch算法訓(xùn)練參數(shù)容易陷入局部最優(yōu)值,訓(xùn)練集的樣本長度選取缺乏理論統(tǒng)計等,這些問題將是未來如何改進模型所研究的內(nèi)容。