, ,
(1.西南財(cái)經(jīng)大學(xué) 天府學(xué)院 智能金融學(xué)院,四川 成都 610052; 2.成都大學(xué) 商學(xué)院,四川 成都 610106; 3.重慶金融學(xué)院 智能金融研究中心,重慶 400067)
金融時間序列預(yù)測是一個極具挑戰(zhàn)性的理論和技術(shù)問題,具有重要的經(jīng)濟(jì)意義,近年來引起了金融界和計(jì)算機(jī)界的廣泛關(guān)注。金融時間序列概率可預(yù)測性已被大量文獻(xiàn)所證實(shí)。在有效市場假說(EMH)的基礎(chǔ)上,Box和Jenkins[1]提出了ARIMA模型,Engle[2]提出了ARCH模型,Bollerslev[3]提出了GARCH模型,認(rèn)為金融市場的價(jià)格波動有可預(yù)測性,但并非是價(jià)格本身。而一些跨學(xué)科的研究人員采用從其他不同角度繼續(xù)研究金融市場預(yù)測,包括常見的混沌理論模型[4],支持向量機(jī)(SVM)的預(yù)測模型[5],神經(jīng)網(wǎng)絡(luò)(NN)的預(yù)測模型[6],和基于k-最鄰近元(KNN)的預(yù)測模型[7]。
在這些常用的預(yù)測模型中,Cover和Hart[8]提出的KNN可以處理高維數(shù)據(jù),并能夠簡單直觀地從特征空間中提取相似實(shí)例進(jìn)行預(yù)測分析,由此被廣泛應(yīng)用于時間序列預(yù)測[9]。但是KNN有兩個明顯的缺陷會影響其性能也是眾所周知的。第一,計(jì)算量過大,因?yàn)樾枰?jì)算測試點(diǎn)與已知樣本中的所有點(diǎn)的相似度,并找到k個最鄰近元;第二,受不均衡樣本影響,當(dāng)不同類所含樣本點(diǎn)數(shù)量差距較大時,測試點(diǎn)的k個最鄰近元中,大樣本類容易占多數(shù)而影響測試點(diǎn)的分類或者回歸效果。為了解決這兩個問題,本文提出了一種嵌套式KNN,稱為Nested KNN。Nested KNN分成兩層:第一層首先計(jì)算預(yù)測點(diǎn)前一時點(diǎn)t與各個聚類中心的相似度,并找到其最近的聚類中心和相應(yīng)的聚類;第二層計(jì)算t與第一層輸出的聚類中的各個點(diǎn)的相似度,并找到t的k個最鄰近元。由于第一層只需要計(jì)算t與各個聚類中心的相似度,所以大大減少了算法的計(jì)算量;第二層只計(jì)算t與同一聚類中的各個點(diǎn)的相似度,因此避免了受不均衡樣本的影響。
Tsai和Hsiao[10]指出特征提取是金融時間序列預(yù)測的關(guān)鍵。本文采用主成分分析(PCA)和仿射傳播聚類(AP)對歷史數(shù)據(jù)集進(jìn)行特征提取,將輸出的特征作為Nested KNN預(yù)測的輸入。由此提出了一種將PCA、AP和Nested KNN組合起來的智能預(yù)測模型,簡稱為PANK模型(PCA+AP+Nested KNN)。該模型將用于實(shí)證預(yù)測歐元兌美元匯率及滬深300指數(shù)的走勢。
本文在KNN回歸的基礎(chǔ)上,提出了PANK金融時間序列預(yù)測模型。PANK模型通過PCA來減少原始金融時間序列中的冗余信息,生成富含有效信息的主成分,并將其輸入AP進(jìn)行聚類以找到時間序列的最優(yōu)聚類方案和相應(yīng)的聚類中心集,最后輸入兩層嵌套式Nested KNN進(jìn)行回歸預(yù)測。
一般地,我們?nèi)∫欢巫銐蜷L的歷史數(shù)據(jù)對模型進(jìn)行訓(xùn)練和測試。首先,需要確定數(shù)據(jù)的時間框架,本文采用日數(shù)據(jù),用日作為基本時間尺度。時間序列X(t)表示t時間(一天)的數(shù)據(jù),包含了四個價(jià)格分量:開盤價(jià)X.O(t)、最高價(jià)X.H(t)、最低價(jià)X.L(t)、收盤價(jià)X.C(t)和交易量X.V(t)。在本文中,我們只考慮X.C(t),因此在后面的論述中X(t)僅包含X.C(t),在后續(xù)研究中我們將會加入更多的分量。
對于任意X(t),定義當(dāng)日相對收益率
(1)
其中λ表示預(yù)測步長,最基本預(yù)測步長為1,因此在沒有具體說明時,本文用RR(t)表示RR(t,λ)。取足夠長的歷史相對收益率數(shù)據(jù)
DR(t,T)=(RR(t),RR(t-1),…,
RR(t-(T-m)+1))
(2)
其中t表示所取得的數(shù)據(jù)中最近的時間點(diǎn);T表示全部數(shù)據(jù)的總天數(shù);m< 一般的PANK預(yù)測模型可以表達(dá)為 PANK:RR(t+λ)=NKNN(C(t),k) (3) 其中NKNN表示嵌套式KNN;C(t)是AP聚類后生成的最優(yōu)聚類結(jié)果,是預(yù)測模型提取的特征集;k是模型參數(shù);RR(t+λ)是模型輸出的預(yù)測日的相對收益率。具體地,PANK模型使用PCA和AP聚類生成特征集C(t),因此,PANK模型可以進(jìn)一步地表達(dá)為 PANK:RR(t+λ)=NKNN{FE[AP(PCA(DR(t,m)))],k} (4) 其中FE( )(Feature Extraction, FE)表示聚類提取特征值的過程。 PANK模型由PCA、AP和Nested KNN三個部分組成。模型首先采用PCA提取富含原始數(shù)據(jù)信息的主分量,并輸入AP進(jìn)行信息傳播聚類,生成特征集C(t),最后輸入Nested KNN進(jìn)行回歸預(yù)測。下面將依次介紹PANK模型的各個組成部分及其算法流程。 主成分分析(Principal Component Analysis, PCA)是1901年由Pearson提出并于1933年由Hotelling發(fā)展[11,12],是一種常用的減少冗余信息,對大數(shù)據(jù)進(jìn)行降維的方法。在應(yīng)用PCA提取主分量之前,需要采用滑動窗口(窗口寬度為m)技術(shù)截取歷史數(shù)據(jù)[13],形成預(yù)測模型的輸入,并形成預(yù)測模型訓(xùn)練輸入輸出數(shù)據(jù)集 DT(t,T-m)={D→R} (5) D=(DR(t-1,m)DR(t-2,m)…DR(t-(T-m),m))′ (6) R=(RR(t)RR(t-1)…RR(t-(T-m)+1))′ (7) PANK模型的第一步是PCA變換減少冗余數(shù)據(jù),獲取主分量,這實(shí)際也是一個奇異值分解過程。首先對歷史數(shù)據(jù)矩陣D進(jìn)行標(biāo)準(zhǔn)化處理和奇異值分解,可得矩陣Z Z=UΣVT (8) 其中U和V都是正交矩陣,分別是ZZT和ZTZ的特征向量矩陣。Σ是非負(fù)矩形對角矩陣,其左上角的子矩陣的對角元素λi(i=1,2,…,r)為ZZT的特征值。由此可以得到數(shù)據(jù)轉(zhuǎn)換矩陣 P=ZTU=VΣTUTU=VΣT (9) 其中矩陣P的各列依次為各個主成分。 實(shí)際上,在時間序列組成的矩陣中,存在信息冗余,其信息主要集中于前面部分主分量上。因此,我們可根據(jù)對主成分累積貢獻(xiàn)率(Cumulative Contribution Rate, CCR)的約束來提取前l(fā)(l< (10) 仿射傳播聚類(Affinity Propagation, AP)是2007年Frey和 Dueck[14]在Science上提出的一種快速有效的新聚類算法,該算法事先將所有的數(shù)據(jù)點(diǎn)都看作是可能的聚類中心,通過不斷的循環(huán)迭代,最終獲得包含有一系列聚類中心和相應(yīng)的聚類集的聚類方案。在含有N個數(shù)據(jù)點(diǎn)的樣本中,AP算法首先計(jì)算每兩個數(shù)據(jù)點(diǎn)之間的相似度,并組成相似度矩陣SN×N。在此基礎(chǔ)上,每個數(shù)據(jù)點(diǎn)都被看作是潛在的聚類中心(稱為exemplar),然后通過迭代循環(huán),在信息的搜集和傳遞過程中不斷競爭,最后產(chǎn)生一系列最優(yōu)的聚類中心,并將各個數(shù)據(jù)點(diǎn)分配到最相似的聚類中心所代表的類中,形成AP最優(yōu)的聚類結(jié)果[14]。下面將具體說明AP的算法流程。 在金融時間序列經(jīng)過PCA后,將選出的主成分組成樣本空間,計(jì)算每兩個樣本點(diǎn)i和j之間的相似度S(i,j)。在本文中,以歐氏距離作為相似度測度,后續(xù)的研究中將探索更適合金融時間序列相似度的測度方法,有 S(i,j)=-‖i-j‖2 (11) 同時生成了由所有的相似度S(i,j)組成的相似度矩陣S。 為了找到最合適的聚類中心,AP算法在相似度矩陣S的基礎(chǔ)上,對每個樣本點(diǎn)進(jìn)行信息搜集和傳遞,并進(jìn)行迭代循環(huán)。在每一個迭代循環(huán)過程中,對于任意一個潛在的聚類中心e,都從任意一個樣本點(diǎn)i搜集信息R(i,e),同時,也為點(diǎn)i從潛在的聚類中心e搜集信息A(i,e) (12) (13) 其中R(i,e)表示點(diǎn)e對點(diǎn)i的吸引度(responsibility)或者說是點(diǎn)e適合作為點(diǎn)i的聚類中心的程度。A(i,e)表示點(diǎn)i對點(diǎn)e的歸屬度(availability)或者說是點(diǎn)i選擇點(diǎn)e作為其聚類中心的適合程度。整個過程中R(i,e)和A(i,e)不斷被計(jì)算迭代直到R(i,e)+A(i,e)達(dá)到最大值,點(diǎn)e才是選出來的最適合點(diǎn)i的聚類中心。 需要指出的是,在相似度矩陣的對角線上存在非常重要的偏向參數(shù)p,它表示每個點(diǎn)被選作聚類中心的傾向性。一般地,設(shè)定p的初始值pm為相似度矩陣S中元素的中值,下降步幅[15] (14) 在迭代循環(huán)的過程中,若聚類個數(shù)收斂到某個值h時,以pstep逐漸減小p,并繼續(xù)迭代,以獲得不同聚類個數(shù)的不同聚類方案。為了在不同的聚類方案中,選取一個最優(yōu)的,可引入能夠有效反映聚類結(jié)構(gòu)中的類內(nèi)緊密性和類間分離性的Silhouette指標(biāo)[15]。假設(shè)樣本空間被分成了r個聚類Ci(i=1,2,…,r),可以計(jì)算點(diǎn)x*的Silhouette指標(biāo) (15) 其中d(x*,Ci)表示聚類Cj中的點(diǎn)x*與另一聚類Ci(i≠j)中所有的點(diǎn)之間的平均不相似度,a(x*)表示聚類Cj中的點(diǎn)與同聚類中其他所有點(diǎn)的平均不相似度。由此,可以計(jì)算出整個樣本空間中所有點(diǎn)的Silhouette指標(biāo)的平均值Silaverage (16) Silaverage值可以有效反映聚類結(jié)果的質(zhì)量,Silaverage>0.5表示各個不同聚類間具有明顯的可分離性,Silaverage值越大表示聚類質(zhì)量越好[15]。 作為一種簡單、直觀、有效的非參數(shù)模式識別方法,KNN既能用于分類,又能用于回歸,因此被廣泛應(yīng)用[16,17]。但是KNN算法有兩個非常明顯的缺點(diǎn):計(jì)算量過大和受不均衡樣本影響。為了改進(jìn)KNN算法的這兩個不足之處,本文特別提出了一種嵌套式的KNN算法,稱為Nested KNN。 對于一段足夠長的、包含N個樣本點(diǎn)的歷史時間序列,可構(gòu)建基于原始KNN的預(yù)測模型 x(t+λ)=KNN(N,k) (17) 首先,用歐氏距離作為相似度測度,計(jì)算測試點(diǎn)x(t)與任意樣本點(diǎn)xn(n=1,2,…,N)的相似度 S(x(t),xn)=-‖x(t)-xn‖2 (18) 將S進(jìn)行排序,找到前k個最大的S值和最相似的k個最鄰近元xj(j=1,2,…,k),其中k (19) 針對KNN的兩大不足之處,本文特別在以上模型的基礎(chǔ)上,將KNN改進(jìn)為兩層嵌套式算法Nested KNN。該算法由三個函數(shù):NKNN、NKNN1和NKNN0組成。其中NKNN作為主函數(shù),對應(yīng)整個算法的輸入-輸出,并調(diào)用NKNN1找到與輸入測試點(diǎn)最相似的聚類中心和相應(yīng)的聚類;NKNN1再調(diào)用NKNN0在前一步輸出的聚類中找到與測試點(diǎn)最相似的k個最鄰近元用于回歸預(yù)測。具體如下: 函數(shù)NKNN1, 輸入預(yù)測點(diǎn)Xt+λ的前一點(diǎn)Xt=DR(t,T)和AP聚類輸出的r個類Ci(i=1,2,…,r)的集合C和各個聚類中心ei(i=1,2,…,r)的集合E,輸出與Xt最相似的聚類中心enearest和相應(yīng)的聚類Cnearest,即 (Cnearest,enearest)=NKNN1(Xt,C,E,k=1) (20) 計(jì)算Xt與任意聚類中心ei(i=1,2,…,r)之間的相似度S(Xt,ei)。當(dāng)S(Xt,enearest)為最大值時,enearest就是與Xt最相似的聚類中心,由此,可以得到以enearest為代表的聚類Cnearest,并將Xt歸為此類。 函數(shù)NKNN0,輸入Xt和Cnearest,輸出Xt+λ,即 (Xt+λ)=NKNN0(Xt,Cnearest,k) (21) (22) 其中參數(shù)k直接影響輸出結(jié)果。在實(shí)際的測試中,具體的不同樣本都對應(yīng)于不同的最優(yōu)k值,因此,為了得到更好的預(yù)測效果,本文將通過模型訓(xùn)練,找到最優(yōu)的k值。 函數(shù)NKNN,輸入Xt、C和E,先調(diào)用NKNN1輸出Cnearest和enearest,再調(diào)用NKNN0輸出Xt+λ,即 (Xt+λ)=NKNN(Xt,C,E,k) (23) 其中有Xt+λ=DR(t+λ,T),由此可以得出RR(t+λ)。 在Nested KNN算法中,NKNN1只需要計(jì)算測試點(diǎn)Xt與各個聚類中心之間的相似度,因此較KNN算法極大地減少了計(jì)算量。同時在NKNN0中,只需要計(jì)算測試點(diǎn)Xt與其最相似的聚類中心所在聚類Cnearest中的各個點(diǎn)之間的相似度,因此有效避免了不均衡樣本的問題。 在構(gòu)建一個具體的PANK預(yù)測模型時,需要設(shè)定三個關(guān)鍵的模型結(jié)構(gòu)參數(shù):m,λ,k。其中m表示截取歷史金融時間序列的滑動窗口寬度;λ表示預(yù)測未來時間序列的步幅;k表示所取最鄰近元的個數(shù)。由此,可以將(3)式和(4)式中的PANK模型表達(dá)為 PANK:RR(t+λ)=NKNN{AP*[PCA(DR(t,m))],k} (24) 其中AP*=FE(AP)表示聚類提取預(yù)測輸入的過程。 對于時間序列預(yù)測模型的效能測度,我們常見的指標(biāo)有均方根誤差(Root Mean Square Error, RMSE)[18]、平均絕對百分比誤差 (Mean Absolute Percentage Error, MAPE)[19]和平均絕對誤差(Mean Absolute Difference, MAD),用來測度實(shí)際值與預(yù)測值偏差。然而,對于量化投資而言,只有在預(yù)測趨勢方向有了顯著的正確率后,這些效能測度指標(biāo)才有意義。因此,本文對于具體PANK預(yù)測模型的效能測度將采用衡量預(yù)測趨勢方向正確性的命中率(Hit Rate,HR)[20] (25) 浮動匯率制度在世界市場有效,大家對外匯市場廣泛關(guān)注,為了避免外匯市場風(fēng)險(xiǎn),提出了各種匯率趨勢預(yù)測的模型[21,22]。與此同時,中國的股市,如滬深300股指等也受到了研究者的關(guān)注[23]。在本文的模型實(shí)證部分,我們構(gòu)建了兩個具體的PANK預(yù)測模型,分別對歐元兌美元匯率和滬深300指數(shù)真實(shí)的歷史數(shù)據(jù)進(jìn)行預(yù)測實(shí)證。 PANK_EURUSD_D1預(yù)測模型針對歐元兌美元匯率日線收盤價(jià)數(shù)據(jù),對t+1日線收益率進(jìn)行預(yù)測,該模型可從(24)式具體化為 PANK_EURUSD_D1:RR(t+1) =NKNN{AP*[PCA(EURUSD_D1_DR(t,m))],k} (26) 模型訓(xùn)練和測試的歷史數(shù)據(jù)集由2002年11月1日至2017年11月24日期間的3909個交易日數(shù)據(jù)組成,前面時段的3128個數(shù)據(jù)點(diǎn)用于樣本內(nèi)訓(xùn)練,后面時段的781個數(shù)據(jù)點(diǎn)用于樣本外檢驗(yàn)。表1顯示了PANK_EURUSD_D1預(yù)測模型的樣本外檢驗(yàn)預(yù)測命中率結(jié)果,其中在m=25和k=5時,取得了最高的命中率0.80(80%),這表明PANK_EURUS_D1模型是一種性能優(yōu)良的匯率預(yù)測模型。 表1 PANK_EURUSD_D1 預(yù)測歐元兌美元匯率t+1日線收益率的命中率 PANK_HS300_D1預(yù)測模型針對滬深300指數(shù)日線收盤價(jià)數(shù)據(jù),預(yù)測t+1日線收益率,該模型可從(24)式具體化為 PANK_HS300_D1:RR(t+1) =NKNN{AP*[PCA(HS300_D1_DR(t,m))],k} (27) 模型訓(xùn)練和測試的歷史數(shù)據(jù)集由2002年1月4日至2017年7月28日期間的3775個交易日數(shù)據(jù)組成,前面時段的3020個數(shù)據(jù)點(diǎn)用于樣本內(nèi)訓(xùn)練,后面時段的755個數(shù)據(jù)點(diǎn)用于樣本外檢驗(yàn)。表2顯示了PANK_HS300_D1預(yù)測模型的樣本外檢驗(yàn)預(yù)測命中率結(jié)果,其中在m=25和k=3時,取得了最高的命中率0.80(80%)。該實(shí)證結(jié)果表明PANK_HS300_D1模型仍然具有良好的預(yù)測效能。 表2 PANK_HS300_D1預(yù)測滬深300指數(shù)t+1日線收益率的命中率 為了進(jìn)一步對PANK模型的預(yù)測效能進(jìn)行評價(jià),本文另外構(gòu)建了兩個具體的KNN預(yù)測模型和兩個具體的AP+Nested KNN預(yù)測模型與之進(jìn)行比較。 KNN_EURUSD_D1:RR(t+1) =KNN{[EURUSD_D1_DR(t,m)],k} (28) KNN_HS300_D1:RR(t+1) =KNN{[HS300_D1_DR(t,m)],k} (29) AP+NKNN_EURUSD_D1:RR(t+1) =NKNN{AP[EURUSD_D1_DR(t,m)],k} (30) AP+NKNN_HS300_D1:RR(t+1) =NKNN{AP[HS300_D1_DR(t,m)],k} (31) 為了更直觀地對六個具體模型的預(yù)測效能進(jìn)行比較,我們選取了每個模型預(yù)測的最高命中率。表3顯示了對比結(jié)果,PANK預(yù)測模型不管是在外匯市場還是在股指上都有著最優(yōu)的預(yù)測效果,由此可以說明PCA、AP和Nested KNN在PANK模型中都是有效果的,能夠有效改進(jìn)KNN模型的預(yù)測效果。表3中不同模型的預(yù)測效能對比結(jié)果表明PANK預(yù)測效能優(yōu)于AP+Nested KNN,而AP+Nested KNN又是優(yōu)于KNN預(yù)測模型的。這正如Krogh和Vedelsby[24]證明的一樣,“當(dāng)構(gòu)成組合預(yù)測模型的單一模型足夠精確且足夠多樣化時,組合預(yù)測模型一定能獲得比單一模型更好的預(yù)測效果。” 表3 PANK模型與其他相關(guān)模型的預(yù)測效能比較 本文提出的PANK模型,是一種集成PCA、AP和Nested KNN算法的金融時間序列預(yù)測的計(jì)算智能模型。從整體結(jié)構(gòu)上看,該模型具有PCA+AP的特征提取過程和Nested KNN回歸預(yù)測兩大部分,是具有創(chuàng)新性的。而模型中的Nested KNN算法是本文針對KNN算法本身的缺陷,提出的一種嵌套式的KNN改進(jìn)算法。該算法由三個函數(shù)組成了兩層計(jì)算:(1)在PCA+AP輸出的聚類中心集中進(jìn)行計(jì)算,并找到最相似的聚類中心及所在類。(2)在第一層輸出的聚類中進(jìn)行計(jì)算,并找到最相似的k個最鄰近元進(jìn)行回歸預(yù)測。這樣的分層計(jì)算比原始的KNN算法具有更有效的分類效果和更快的運(yùn)算速度,從而能夠更有效地對金融時間序列進(jìn)行回歸預(yù)測。為了驗(yàn)證PANK模型的有效性,本文在預(yù)測歐元兌美元匯率和中國基準(zhǔn)指數(shù)滬深300上進(jìn)行了實(shí)證,對日線收益率進(jìn)行了預(yù)測。實(shí)證結(jié)果表明PANK模型的預(yù)測性能明顯優(yōu)于KNN和AP+Nested KNN預(yù)測模型,在每日時間框架內(nèi),最佳命中率均達(dá)到0.80(80%)。 在后續(xù)的研究中,我們的金融時間序列預(yù)測模型可以從以下方面進(jìn)行改進(jìn)研究:(1)將線性變換PCA換成一種更適合金融時間序列的非線性方法,比如“自編碼器”。(2)將歐氏距離換成一個更適合金融時間序列相似性度量的方法,以提高模型預(yù)測性能。(3)將KNN換成更有效的非線性預(yù)測模型,比如“隨機(jī)森林”。3 PANK預(yù)測模型的三個組成部分及其算法
3.1 主成分分析(PCA)
3.2 仿射傳播聚類(AP)
3.3 嵌套式k-最鄰近元(Nested KNN)
4 PANK預(yù)測模型的結(jié)構(gòu)參數(shù)和效能測度
4.1 PANK預(yù)測模型的結(jié)構(gòu)參數(shù)
4.2 PANK預(yù)測模型的效能測度
5 PANK預(yù)測模型的實(shí)證分析
5.1 PANK_EURUSD_D1預(yù)測歐元兌美元匯率日線收益率
5.2 PANK_HS300_D1預(yù)測滬深300指數(shù)日線收益率
5.3 與KNN和AP+Nested KNN預(yù)測模型的實(shí)證比較
6 結(jié)論與展望