王冰玉 劉勇軍
(華南理工大學(xué)工商管理學(xué)院 廣州 510640)
股價預(yù)測是投資策略形成和風(fēng)險管理模型發(fā)展的基礎(chǔ)[1]。一個準(zhǔn)確的股價預(yù)測可以為投資者提供更多在證券交易所獲利的機(jī)會,但由于股價趨勢的波動性、不規(guī)則性和高度不確定性,股價預(yù)測一直是極具挑戰(zhàn)的問題[2~3]。
目前,在股價預(yù)測方面,相關(guān)學(xué)者已提出許多用于指標(biāo)構(gòu)建和股價預(yù)測的計算模型和智能算法。在實踐中,Panigrahi等[4]借助16個數(shù)據(jù)集的時序股價數(shù)據(jù),提出ETS-ANN模型預(yù)測股價。Huang等[5]將情感分?jǐn)?shù)整合到邏輯回歸模型,使用網(wǎng)絡(luò)意見來提高股票價格預(yù)測的性能。Oztekin等[6]將開盤價、收盤價、收盤匯率和FBIST債券指數(shù)等歷史數(shù)據(jù)作為輸入變量基于SVM進(jìn)行股價預(yù)測。Nayak等[7]考慮簡單移動平均、指數(shù)移動平均和AR等技術(shù)指標(biāo)作為指標(biāo)變量構(gòu)建SVM-KNN模型預(yù)測股價。王淑燕等[8]以市銷率、市凈率、市盈率、股票收益率等16個指標(biāo)作為輸入變量,借助隨機(jī)森林進(jìn)行量化選股。在理論上,Chen等[9]對Nayak的思想進(jìn)行創(chuàng)新,把特征加權(quán)向量納入并試驗,最終提出加權(quán)SVM和加權(quán)KNN的股價預(yù)測方法。楊善林等[10]將誤差校正方法引入,構(gòu)建改進(jìn)的GARCH模型預(yù)測股價趨勢。張貴生等[11]將滯后點的變化趨勢信息納入,提出基于微分信息的ARIMAGARCH股價預(yù)測模型。
針對當(dāng)前研究,不難發(fā)現(xiàn),現(xiàn)有的股價預(yù)測模型只考慮股價中所含的歷史和趨勢信息:股票價格、財務(wù)指標(biāo)和技術(shù)指標(biāo),未曾考慮噪聲信息對預(yù)測結(jié)果的影響,這在一定程度上影響模型分析時序數(shù)據(jù)的泛化能力,導(dǎo)致對股價趨勢變化方向的錯誤判斷,進(jìn)而影響股價預(yù)測準(zhǔn)確性[12]?,F(xiàn)有文獻(xiàn)已表明使用噪聲處理的數(shù)據(jù)進(jìn)行預(yù)測,會獲得一個更好的預(yù)測結(jié)果[13~15]。為降低股價趨勢所含的噪聲信息和輸入變量之間的相關(guān)性對股價預(yù)測結(jié)果的影響,本研究構(gòu)建信噪比特征向量,并采用KPCA算法對輸入變量降維處理,之后借助Nayak[7]的SVM-KNN算法進(jìn)行股價預(yù)測。
KPCA是對PCA的擴(kuò)展,考慮將原有數(shù)據(jù)投射到高維特征空間,在此空間中實現(xiàn)PCA操作的新型非線性降維方式[16]。對于輸入矩陣X=[x1,x2,…,xN]∈Rn×d,其中,xi為在時間i內(nèi)的股票相關(guān)數(shù)據(jù)樣本,N表示樣本總量,d表示數(shù)據(jù)總維度。本文采用如下方式的非線性映射函數(shù)φ(·)實作為從數(shù)據(jù)空間到特征空間的映射:
φ(xi)為向量xi在特征空間中的表示,且φ(xi)滿足以下條件:
之后,通過以下方式定義協(xié)方差矩陣:
其中,φ(xi)的均值為零。此外,因為φ(xi)不可直接獲取,故經(jīng)過對空間中特征值分解的方式獲得:
其中,λ和v為SF的特征值和特征向量,為內(nèi)積。在λ≠0的情況下,所有的特征向量v都在此空間的訓(xùn)練數(shù)據(jù)范圍內(nèi),并且,存在系數(shù)αi∈{1,2,…,N}使下式成立:
連接式(4)和(5),兩邊同乘φ(xk),可得到:
從式(6)發(fā)現(xiàn):如果得到非線性空間中的內(nèi)積就可有效處理協(xié)方差矩陣中所面臨的分解問題。本文將由N×N代表的核矩陣K定義為
由上可知,我們可引入式(7)得到內(nèi)積。目前,核函數(shù)主要有多項式、線性和徑向基核函數(shù)三種[9]。因為股價趨勢變化具有高度不確定性和非線性,本文選擇徑向基核函數(shù)作為KPCA算法的核函數(shù)。其形式為
其中,σ為常數(shù)。當(dāng)式(2)不成立時,需將式(8)調(diào)整為
其中,I1為N×N的單位矩陣,根據(jù)式(9),我們可將式(6)變?yōu)?/p>
λ值決定核主成分(PC)的選擇,與較大λ值所對應(yīng)的PC應(yīng)保存在PC空間中。本文以將特征空間中的訓(xùn)練數(shù)據(jù)φ(x)映射到特征向量j的方式計算第j個提取的PC:
其中,k是PC空間中提取的主成分?jǐn)?shù)量。
本文選取的累計貢獻(xiàn)率p=90%。如果通過計算得到的某個特征值的累計貢獻(xiàn)率≥90%,則提取該主成分。
SVM由Vapnik[17]最初提出的一種分類算法,其關(guān)鍵步驟:最初將向量映射到一個更高維的空間,在此空間建立一個最大間隔超平面;其次在超平面兩邊構(gòu)建兩個相互平行的超平面;最終構(gòu)造兩個距離最大化的分隔超平面,該平面與超平面平行。設(shè)包含N個訓(xùn)練樣本的訓(xùn)練集樣本對{(x1,y1),(x2,y2),…,(xN,yN)},其中xi∈Rd表示第i個訓(xùn)練樣本的輸入向量,d表示樣本總維度,輸出值由yi∈{+1,-1}表示。SVM主要解決以下優(yōu)化問題:
其中,C>0為修正項的懲罰參數(shù),ξi為松弛變量,Φ(x)為非線性映射函數(shù)。wT為特征空間維數(shù),b為待定的標(biāo)量參數(shù)。
該算法中w的值可由拉格朗日對偶算法求出,其中為拉格朗日因子。本文采用核函數(shù)K(xi,xj)代替Φ(xi)TΦ(xj),通過求解得到最終的決策函數(shù)為
由于股票數(shù)據(jù)之間存在非線性關(guān)系,故文章選用徑向基核函數(shù)作為SVM算法的核函數(shù)[6],即:
其中,γ是根據(jù)數(shù)據(jù)集初始化的內(nèi)核參數(shù),最佳核參數(shù)的選擇受訓(xùn)練集大小的影響[7]。
KNN是一種非參數(shù)學(xué)習(xí)算法。與現(xiàn)有基于模型的智能算法不同,KNN需要將所有訓(xùn)練示例保留在內(nèi)存中,以便搜索所有K個最近的鄰居用于測試樣品[7]。由于對不相關(guān)特征變量的間接敏感性,所以該算法對距離函數(shù)比較敏感。對于樣本{(x1,v1),(x2,v2),…,(xn,vn)},其中,xi∈Rd是第i個訓(xùn)練樣本的輸入向量,d為樣本維度,vi為輸出值,用下式表示:
其中,xl為xi的最近鄰。KNN以識別k個與測試數(shù)據(jù)具有最高相似性的加權(quán)最近鄰作為決策準(zhǔn)則。因此,KNN需要一個矩陣來測量測試數(shù)據(jù)與訓(xùn)練樣本之間的距離。本研究采用當(dāng)前使用較為廣泛的歐式距離函數(shù):
從而,股價預(yù)測用下式表示:
其中,P′為預(yù)測股價,Plast為前一天樣本收盤價,vˉ為k個最近鄰樣本輸出值v1,v2,…,vk的均值。
本文考慮到輸入變量之間的相關(guān)性對預(yù)測結(jié)果的影響,在現(xiàn)有的SVM-KNN算法的基礎(chǔ)上,構(gòu)建新的KPCA-SVM-KNN算法進(jìn)行股價預(yù)測。下面給出該算法的算法框架:
圖1 KPCA-SVM-KNN算法的算法框架
股票市場中,輸入指標(biāo)經(jīng)常以價格相關(guān)的歷史數(shù)據(jù)的形式展現(xiàn),如開盤價、收盤價、最低價、最高價和總交易量。目前學(xué)者通過研究發(fā)現(xiàn)加入一些相關(guān)的技術(shù)指標(biāo)可以獲得更有效的股價預(yù)測[9]。故為了更好的反映股價的波動,本文選取相關(guān)技術(shù)指標(biāo),且令xi為股票i的第i個輸入樣本,則有xi=(xi1,xi2,…,xi17)。本文所使用的指標(biāo)及計算公式如表1所示。
表1 股價預(yù)測所需要的輸入指標(biāo)
其中,xi16表示判斷SVM分類準(zhǔn)確率的標(biāo)準(zhǔn),用下式表示:
考慮到買賣的不穩(wěn)定性,價格變化的非連續(xù)性、交易規(guī)模的巨大差異化和訂單流的戰(zhàn)略組成部分所包含的復(fù)雜性等因素的存在,導(dǎo)致我們所觀測到的價格變化過程是一個包含噪聲的過程[12]。實際上,我們一般所觀測的對數(shù)形式的股價過程由對數(shù)有效價格和對數(shù)噪聲兩部分組成,其股價的對數(shù)形式為
其中,pi為股票第i個輸入樣本價格,x′i為第i個輸入樣本有效價格,ni為第i個輸入樣本噪聲。從式(19)可看出,加性噪聲部分包含在對數(shù)形式的股價中,故對數(shù)形式下的股票噪聲與有效價格可定義為
眾所周知,噪聲會對股價預(yù)測產(chǎn)生影響,若本文可在構(gòu)建SVM方程時消除噪聲,可進(jìn)一步提升股價預(yù)測精度[12]。SNR是對信號中有效成分與噪聲成分比例關(guān)系的重要描述,可有效地處理噪聲。為了降低噪聲干擾,本文將SNR引入。結(jié)合已有文獻(xiàn),我們可得到信噪比(SNR)的計算公式[13]:
其中,N為所使用樣本數(shù)據(jù)的數(shù)量,xˉ為有效價格均值,σxˉ為噪聲方差。本文將SNR作為反映股票收益波動的指標(biāo),若SNR值越大,收益越穩(wěn)定,風(fēng)險就越小。
本文將國內(nèi)A股市場總市值排名靠前的十四只股票日數(shù)據(jù)作為研究對象,相應(yīng)的時間序列日期為2009年1月1日至2018年12月31日。中國股市在這個時期經(jīng)濟(jì)發(fā)展呈穩(wěn)健增長是選擇該時期的主要原因。此外,本研究將前80%的股票數(shù)據(jù)作為訓(xùn)練樣本,后20%作為測試樣本。
考慮到參數(shù)間的巨大差異性對股價預(yù)測的影響,本研究對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理:
其中,xminj為樣本數(shù)據(jù)第j列的最小值,xmaxj為樣本數(shù)據(jù)第j列的最大值。
平均絕對百分比誤差(MAPE)和均方根誤差(RMSE)可用于評估模型的好壞,用下式表示:
其中,N為樣本數(shù)量,xi,close為第i日的股票收盤價,x^i,close為所模型預(yù)測的股票收盤價。
為了驗證本文模型的有效性,我們建立基準(zhǔn)模型進(jìn)行對比分析,即模型1:為加入SNR特征向量的SVM算法的股價預(yù)測、模型2:加入SNR特征向量的SVM算法的股價預(yù)測、模型3:基于信噪比的SVM-KNN算法的股價預(yù)測和本文模型4:基于信噪比的KPCA-SVM-KNN算法的股價預(yù)測。本文采用libsvm-3.18處理SVM,同時使用10折交叉驗證的網(wǎng)格搜索算法獲得該模型的最優(yōu)參數(shù)。文章分別對國內(nèi)A股市場總市值排名靠前的10只股票數(shù)據(jù)進(jìn)行未來1天的收盤價預(yù)測,為了簡便起見,我們統(tǒng)一采用股票i(i=1,2,…,10)來表示14只股票。
表2為加入SNR的SVM算法采用10折交叉驗證所獲得的最優(yōu)參數(shù)。表3為加入SNR的SVM算法和未加入SNR的SVM算法之間的股價分類準(zhǔn)確率。
從表2可看出,所有SVM算法的系數(shù)C和K都是一致的,且系數(shù)γ的值也保持在一定范圍內(nèi),從而保證對比分析和股價預(yù)測結(jié)果的準(zhǔn)確性。
表2 加入SNR的SVM模型所使用的最優(yōu)參數(shù)
從表3可看出,模型2:加入SNR的SVM算法的股價預(yù)測分類準(zhǔn)確率要明顯高于模型1:未加入SNR的SVM算法的的股價預(yù)測分類準(zhǔn)確率。對比分析發(fā)現(xiàn),本研究加入SNR后,SVM算法的股價預(yù)測分類準(zhǔn)確率平均提高7%左右,并且對于股票2、5、6來說,加入信噪比后SVM的分類準(zhǔn)確率可達(dá)到74%以上。本文在股價分類的基礎(chǔ)上,借用KNN算法進(jìn)行股價預(yù)測,并采用KPCA算法進(jìn)行降維處理。表4顯示了兩個模型的股價預(yù)測誤差。從表4可看出,模型3:SVM-KNN算法的股價模型預(yù)測和模型4:KPCA-SVM-KNN算法的股價預(yù)測模型均較好地反映了時間序列,而且可以清楚地觀察到KPCA-SVM-KNN算法的股價預(yù)測誤差更低,說明KPCA-SVM-KNN算法的股價預(yù)測結(jié)果相較于SVM-KNN算法更好。此外,本研究還發(fā)現(xiàn):1)KPCA-SVM-KNN算法對于股票2的預(yù)測結(jié)果最好,因為不管相對于MAPE還是RMSE,它的預(yù)測誤差都是最小的;2)除了股票6和7之外,其他股票的股價預(yù)測誤差都小于1。
表3 模型1與模型2[18]的分類準(zhǔn)確率 百分比/%
表4 模型3[7]算法與模型4的預(yù)測誤差
本文提出了基于信噪比的KPCA-SVM-KNN的股價預(yù)測模型,并借助國內(nèi)A股市場股票數(shù)據(jù)進(jìn)行股價預(yù)測。結(jié)果表明:1)信噪比的創(chuàng)建可更好地克服股價變化趨勢中所含的噪聲信息帶來的股票分類結(jié)果的偏移,有效地降低噪聲信息對預(yù)測結(jié)果的干擾,進(jìn)而提高股價預(yù)測的分類準(zhǔn)確率;2)KPCA算法不僅可以實現(xiàn)降維,而且在一定程度上消除輸入變量之間的多重共線性對分類超平面的影響。通過KPCA算法的引入,本研究既可提高原有的SVM-KNN算法的運(yùn)行速度,又進(jìn)一步降低股票預(yù)測誤差。