林天華,祁旭陽(yáng),張倩倩,趙 霞
(1河北經(jīng)貿(mào)大學(xué) 信息技術(shù)學(xué)院,石家莊 050061;2河北經(jīng)貿(mào)大學(xué) 經(jīng)管實(shí)驗(yàn)中心,石家莊 050061)
股票是市場(chǎng)經(jīng)濟(jì)的重要體現(xiàn),在一定程度上反映著我國(guó)的經(jīng)濟(jì)發(fā)展?fàn)顩r,在經(jīng)濟(jì)發(fā)展走勢(shì)分析中發(fā)揮著重要作用。滬深300指數(shù)是股票市場(chǎng)的重要指數(shù)之一,它能夠反映滬深兩市市場(chǎng)整體表現(xiàn)和價(jià)格變動(dòng)。預(yù)測(cè)滬深300指數(shù)在指導(dǎo)滬深兩市個(gè)股投資和分析滬深市場(chǎng)變化等方面具有重要意義。預(yù)測(cè)滬深300指數(shù)的研究方法主要分為三種,分別是基本面分析法、技術(shù)分析法和量化分析法。其中量化分析法是利用計(jì)算機(jī)技術(shù)進(jìn)行統(tǒng)計(jì)、數(shù)值模擬,進(jìn)而研究證券數(shù)據(jù)的一種方法[1]。該方法分析的數(shù)據(jù)量大、形成的模型嚴(yán)格,因此能夠取得較好的分析效果。
將機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)等現(xiàn)代預(yù)測(cè)方法應(yīng)用于股指的分析和預(yù)測(cè)是當(dāng)前的一個(gè)研究熱點(diǎn)。熊濤[2]等提出基于自組織神經(jīng)網(wǎng)絡(luò)(Self Organizing Neural Network,SOM)和支持向量機(jī)(Support Vector Machine,SVM)的多步預(yù)測(cè)方法,即先用SOM對(duì)滬深300指數(shù)序列進(jìn)行聚類(lèi),隨后基于劃分后的數(shù)據(jù)集分別構(gòu)建SVM,得到多步預(yù)測(cè)模型,結(jié)果表明該模型的預(yù)測(cè)效果要好于單一的SVM。唐艷琴[3]等為解決基于SVM的預(yù)測(cè)模型復(fù)雜、耗時(shí)長(zhǎng)的問(wèn)題,提出了一種基于多輸出的學(xué)習(xí)方法,該模型在預(yù)測(cè)滬深300指數(shù)時(shí)比SVM預(yù)測(cè)的均值方差提高了約10倍,運(yùn)行時(shí)長(zhǎng)也減少了近3/4。文獻(xiàn)[4]提出了使用多支持向量機(jī)對(duì)股指進(jìn)行混合頻率抽樣預(yù)測(cè)方法。文獻(xiàn)[5]提出將夏普比率引入到SVM股指預(yù)測(cè)中,提升投資回報(bào)。周榮謙[6]提出的基于Morlet小波核函數(shù)SVM的滬深300指數(shù)預(yù)測(cè)方法,得到了較低的RMSE,預(yù)測(cè)效果較好。文獻(xiàn)[7]結(jié)合小波變異的混合函數(shù)連接人工神經(jīng)網(wǎng)絡(luò)和粒子群優(yōu)化算法,對(duì)滬深300指數(shù)進(jìn)行了預(yù)測(cè)。文獻(xiàn)[8]和文獻(xiàn)[9]分別使用ModAugNet框架和多隱層人工神經(jīng)網(wǎng)絡(luò)混合模型對(duì)標(biāo)準(zhǔn)普爾500指數(shù)進(jìn)行預(yù)測(cè),預(yù)測(cè)誤差均較低。戴德寶等[10]使用文本挖掘和情感分析方法,生成投資者情緒時(shí)間序列,并使用SVM和神經(jīng)網(wǎng)絡(luò)對(duì)上證投資者情緒綜合指數(shù)進(jìn)行預(yù)測(cè)。馮宇旭[11]等提出的基于長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)的滬深300指數(shù)預(yù)測(cè)方法,比同一測(cè)試集上的Adaboost算法得到的RMSE要低。文獻(xiàn)[12]提出特征值歸一化加權(quán)多線性主成分分析對(duì)恒生指數(shù)進(jìn)行特征提取,并使用SVM預(yù)測(cè)。文獻(xiàn)[13]將logistic回歸(LR)模型級(jí)聯(lián)到梯度增強(qiáng)決策樹(shù)(Gradient Boosting Decision Tree,GBDT)模型上,由此構(gòu)成股指預(yù)測(cè)模型,并對(duì)上證指數(shù)、納斯達(dá)克指數(shù)和標(biāo)準(zhǔn)普爾500指數(shù)進(jìn)行預(yù)測(cè),預(yù)測(cè)準(zhǔn)確率較高。
綜上所述,現(xiàn)有文獻(xiàn)中使用機(jī)器學(xué)習(xí)算法對(duì)滬深300指數(shù)預(yù)測(cè)較少,且僅有的研究得到的預(yù)測(cè)效果也欠佳。模型樹(shù)是機(jī)器學(xué)習(xí)中的一種算法,從理論上看,相較于其它機(jī)器學(xué)習(xí)算法,它具有葉子節(jié)點(diǎn)是分段線性函數(shù)的特性,能夠更好得擬合連續(xù)型數(shù)據(jù),得到較好的預(yù)測(cè)效果,從而更適用于預(yù)測(cè)領(lǐng)域。在應(yīng)用方面,模型樹(shù)算法在眾多數(shù)值型變量的預(yù)測(cè)問(wèn)題中,證實(shí)了其有理想的預(yù)測(cè)性能。張建明[14]等將模型樹(shù)算法用于汽輪機(jī)汽耗性預(yù)測(cè)、GOYAL M K[15]等將模型樹(shù)算法應(yīng)用于閘下沖刷預(yù)測(cè)、李建更[16]提出用模型樹(shù)預(yù)測(cè)PM2.5濃度,均取得了較好的預(yù)測(cè)效果,證實(shí)了它在連續(xù)值預(yù)測(cè)方面的可行性。因此,本文將基于模型樹(shù)算法構(gòu)建預(yù)測(cè)模型,改進(jìn)模型樹(shù)的分裂算法,使其適用于滬深300指數(shù)預(yù)測(cè),提高預(yù)測(cè)的準(zhǔn)確度,這在理論分析和實(shí)際應(yīng)用中都具有重要意義。
本文使用目前常見(jiàn)的基于最小損失函數(shù)的模型樹(shù)算法進(jìn)行證券數(shù)據(jù)分裂,并針對(duì)證券數(shù)據(jù)的特征進(jìn)行改進(jìn),提出了基于最大離差分裂算法的模型樹(shù)。
基于最小損失函數(shù)的模型樹(shù)是分類(lèi)回歸樹(shù)(Classification And Regression Trees,CART)的變體,既可以用于分類(lèi)也可以用于回歸。其對(duì)樣本數(shù)據(jù)集進(jìn)行二分遞歸分裂,最終形成一棵以葉節(jié)點(diǎn)為分段線性函數(shù)的二叉樹(shù),并對(duì)生成的模型樹(shù)進(jìn)行后剪枝,得到最優(yōu)模型樹(shù)。模型樹(shù)作為回歸模型時(shí),給定數(shù)據(jù)集D={(x1,y1),...,(xi,yi),...,(xn,yn)},則生成初始模型樹(shù)M T0的步驟如下:
Step 1求解式(1),得到最優(yōu)的特征A和特征分裂點(diǎn)s,
其中,c1為數(shù)據(jù)集D1的均值,c2為數(shù)據(jù)集D2的均值。
Step 2用選定的(A,s)將當(dāng)前數(shù)據(jù)集劃分成D1和D2兩個(gè)數(shù)據(jù)集。
Step 3分別對(duì)D1和D2兩個(gè)數(shù)據(jù)集進(jìn)行線性回歸,得到分段線性函數(shù)f1和f2,作為當(dāng)前父節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)。
Step 4對(duì)每個(gè)子節(jié)點(diǎn)執(zhí)行上述步驟,直至滿足停止條件。
Step 5輸出生成的模型樹(shù)M T0。
直接采用生成的M T0做預(yù)測(cè),往往會(huì)產(chǎn)生過(guò)擬合現(xiàn)象,需要對(duì)其進(jìn)行剪枝操作,但又要防止剪掉一些節(jié)點(diǎn)后導(dǎo)致預(yù)測(cè)的誤差增加。因此,采用代價(jià)復(fù)雜度剪枝算法進(jìn)行后剪枝。具體算法如下:
輸入生成的模型樹(shù)M T0
輸出最優(yōu)模型樹(shù)M T
Step 1設(shè)k=0,M T=M T0,γ=+∞。
Step 2自下而上遍歷每個(gè)內(nèi)部節(jié)點(diǎn)t,并計(jì)算和整體損失函數(shù)的減少程度g(t)。計(jì)算公式見(jiàn)式(2)和(3)。
Step 3自上而下訪問(wèn)內(nèi)部節(jié)點(diǎn)。若g(t)=γ,則剪去該分支,得到樹(shù)M Tt。
Step 4設(shè)k=k+1,γk=γ,M Tk=M Tt。
Step 5如果M Tt不是由根節(jié)點(diǎn)單獨(dú)構(gòu)成的樹(shù),則回到Step 3。
Step 6使用交叉驗(yàn)證法在子樹(shù)序列M T1,M T2,…,M Tn中選取最優(yōu)子樹(shù)M T。
由于基于最小損失函數(shù)的模型樹(shù)計(jì)算得出的分裂點(diǎn)不理想(如圖2),導(dǎo)致預(yù)測(cè)效果不好,故對(duì)其分裂算法進(jìn)行改進(jìn),提出最大離差分裂算法,使得其能夠適用于證券數(shù)據(jù)的分裂,提高預(yù)測(cè)的準(zhǔn)確度。
基于最大離差分裂算法的模型樹(shù)的主要算法流程如下:
輸入滬深300指數(shù)數(shù)據(jù)集Y
Step 1對(duì)全體滬深300指數(shù)數(shù)據(jù)Y進(jìn)行線性回歸,得到初始的線性回歸直線Lparent及對(duì)應(yīng)的線性回歸函數(shù)yline。Lparent與實(shí)際值的首次和最后一次交點(diǎn),分別為s t ar t和end。
Step 2搜索分裂屬性。對(duì)已構(gòu)建的線性回歸函數(shù)搜索分裂屬性,并將分裂屬性取并集,即回歸屬性集合。
Step 3生成分裂點(diǎn)和線性回歸函數(shù)。若第i個(gè)交易日在start和end之間,即i∈[st ar t,end],則從滬深300指數(shù)數(shù)據(jù)中選擇與Lparent上的點(diǎn)距離最遠(yuǎn)的點(diǎn),作為分裂點(diǎn)spli tPos,其計(jì)算方法如式(4)、(5)。
以此將數(shù)據(jù)分為左右兩段,并對(duì)兩段數(shù)據(jù)分別進(jìn)行線性回歸,得到Lleft和Lright。線性回歸函數(shù)為yleft和yright,二者分別作為父節(jié)點(diǎn)的左右子樹(shù)。將得到的Lright作為L(zhǎng)parent,yright作為yline。
Step 4遍歷遞歸,生成模型樹(shù)。遞歸執(zhí)行Step2和Step3,至達(dá)到閾值條件,即end-s t ar t<10,R>0.9。其中R為最大相關(guān)系數(shù),最后生成的右子樹(shù)為L(zhǎng)latest。
Step 5構(gòu)建好模型樹(shù)M T,使用滬深300測(cè)試集數(shù)據(jù)進(jìn)行預(yù)測(cè)。以Llatest作線性回歸預(yù)測(cè),計(jì)算并輸出預(yù)測(cè)衡量指標(biāo),則算法結(jié)束。
最大離差分裂算法流程如圖1所示。
圖1中,yline為原始滬深300數(shù)據(jù)進(jìn)行線性回歸得到的回歸方程;i表示第i個(gè)交易日;yi表示第i個(gè)交易日的真實(shí)值;ylinei表示第i個(gè)交易日的線性回歸值;s pl i t Pos表示分裂點(diǎn);R為最大相關(guān)系數(shù)。
圖1 最大離差分裂算法流程圖Fig.1 Maximum deviation splitting algorithm flow chart
本文使用均方誤差MSE,均方根誤差RMSE和平均絕對(duì)百分比誤差MAPE作為預(yù)測(cè)評(píng)價(jià)指標(biāo),用于描述預(yù)測(cè)值偏離真實(shí)值的程度。三者的計(jì)算方法如公式(6)~公式(8)。
其中,y(i)為第i個(gè)交易日滬深300指數(shù)收盤(pán)價(jià)的真實(shí)值;y^(i)為第i個(gè)交易日滬深300指數(shù)收盤(pán)價(jià)的預(yù)測(cè)值;n為樣本總數(shù)。
由上述公式可知,三者的值越小則說(shuō)明模型預(yù)測(cè)的結(jié)果誤差越小,即與真實(shí)值越接近,預(yù)測(cè)效果也越好。
2.2.1 MTDM算法分組對(duì)比樣本數(shù)據(jù)的選取
本文選取兩組時(shí)間段的滬深300指數(shù)日收盤(pán)價(jià),作為訓(xùn)練樣本數(shù)據(jù)和測(cè)試樣本數(shù)據(jù)。2007年8月15日至2008年11月6日的300個(gè)交易日的收盤(pán)價(jià)作為第一組的訓(xùn)練樣本數(shù)據(jù),2008年11月7日至2014年7月16日的1 381個(gè)交易日的收盤(pán)價(jià)作為第一組的測(cè)試樣本數(shù)據(jù)。2013年4月20日至2014年7月16日的300個(gè)交易日的收盤(pán)價(jià)作為第二組的訓(xùn)練樣本數(shù)據(jù),2014年7月17日至2019年1月4日的1 092個(gè)交易日的收盤(pán)價(jià)作為第二組的測(cè)試樣本數(shù)據(jù)。
在兩組數(shù)據(jù)的測(cè)試樣本數(shù)據(jù)中,均包含了完整的上漲牛市數(shù)據(jù)、下跌的熊市數(shù)據(jù)以及震蕩數(shù)據(jù),使得實(shí)驗(yàn)?zāi)艹浞职笆鰩追N情況,更好地驗(yàn)證模型預(yù)測(cè)的有效性。
2.2.2 MTDM算法與其他算法對(duì)比樣本數(shù)據(jù)的選取
在與其他預(yù)測(cè)算法進(jìn)行對(duì)比時(shí),保持與原實(shí)驗(yàn)一致的時(shí)間段數(shù)據(jù)作為數(shù)據(jù)樣本,即將文獻(xiàn)[11]提出的LSTM/Adaboost、SVR/LSTM/Adaboost回歸集成算法應(yīng)用于2012年5月3日~2017年9月4日的滬深300指數(shù)的預(yù)測(cè);文獻(xiàn)[6]提出的PSO算法優(yōu)化,應(yīng)用于2015年12月11日~2016年11月12日的滬深300指數(shù)的預(yù)測(cè)。將基于最大離差分裂算法的模型樹(shù)的滬深300指數(shù)模型分別用于上述兩個(gè)時(shí)間段,其中訓(xùn)練樣本數(shù)據(jù)在此基礎(chǔ)上分別增加300個(gè)交易日收盤(pán)價(jià)數(shù)據(jù),即2011年2月1日~2012年5月2日、2014年9月17日~2016年11月11日分別作為二者的訓(xùn)練樣本數(shù)據(jù),從而保持對(duì)比實(shí)驗(yàn)的一致性。
2.2.3 數(shù)據(jù)預(yù)處理
在預(yù)測(cè)時(shí),由于原始數(shù)據(jù)差距較大,直接輸入模型樹(shù)預(yù)測(cè)模型,預(yù)測(cè)誤差較大。為保證模型測(cè)預(yù)效果,采用歸一化方法處理這些數(shù)據(jù),經(jīng)過(guò)線性變換,可以映射到[0,1]范圍內(nèi),歸一化表達(dá)式如公式(9):
其中,x'為歸一化后的數(shù)據(jù),xmin、xmax分別為樣本數(shù)據(jù)的最小值和最大值。
為保證展示效果,在此與LSTM算法預(yù)測(cè)方法對(duì)比的數(shù)據(jù),以2011年2月1日至2017年9月4日,共1603個(gè)交易日的滬深300收盤(pán)價(jià)數(shù)據(jù)為例,說(shuō)明分裂過(guò)程;以該對(duì)比實(shí)驗(yàn)第一年的測(cè)試數(shù)據(jù),即2012年5月3日至2013年11月5日共365個(gè)樣本數(shù)據(jù)說(shuō)明預(yù)測(cè)效果。
(1)基于最小損失函數(shù)的模型樹(shù)分裂效果
基于最小損失函數(shù)的模型樹(shù)分裂效果如圖2所示。
圖2 基于MTLLF算法的分裂效果圖Fig.2 Splitting effect based on MTLLF algorithm
其中,折線表示真實(shí)值;圓點(diǎn)表示回歸分裂點(diǎn);虛線表示相鄰分裂點(diǎn)的連接線。由圖2可見(jiàn),分裂點(diǎn)連接線的走勢(shì)沒(méi)有反映滬深300指數(shù)的走勢(shì)特征,導(dǎo)致分裂效果不好,不能夠很好地應(yīng)用于證券數(shù)據(jù)分析當(dāng)中。
(2)基于最大離差分裂算法的模型樹(shù)分裂效果
基于最大離差分裂算法的模型樹(shù)分裂效果如圖3所示。
圖3 基于MTDM算法的分裂效果圖Fig.3 Split effect diagram based on MTDM algorithm
由圖3可以看出,每個(gè)圓點(diǎn)都落在代表真實(shí)值折線的拐點(diǎn)處,分裂點(diǎn)連接線的走勢(shì)與滬深300指數(shù)的走勢(shì)基本契合,分裂效果理想,適應(yīng)證券數(shù)據(jù)的特征,為后續(xù)的預(yù)測(cè)奠定了基礎(chǔ)。
(3)基于最大離差分裂算法模型樹(shù)的預(yù)測(cè)效果
使用基于最大離差分裂算法的模型樹(shù),對(duì)滬深300數(shù)據(jù)進(jìn)行預(yù)測(cè),得到的預(yù)測(cè)結(jié)果如圖4所示。
圖4 基于MTDM算法的預(yù)測(cè)效果圖Fig.4 Forecast effect diagram based on MTDM algorithm
由圖4可見(jiàn),基于MTDM算法的預(yù)測(cè)結(jié)果接近真實(shí)值,與真實(shí)值的擬合程度較高,預(yù)測(cè)效果較好。
(1)MTDM算法分組實(shí)驗(yàn)預(yù)測(cè)性能對(duì)比
使用MTDM算法模型對(duì)前述兩組實(shí)驗(yàn)數(shù)據(jù)進(jìn)行預(yù)測(cè),得到的MSE、RMSE和MAPE見(jiàn)表1。
表1 分組實(shí)驗(yàn)性能對(duì)比表Tab.1 Performance comparison table of grouping experiment
由表1可知,MTDM預(yù)測(cè)方法在不同長(zhǎng)度的時(shí)間段內(nèi)的預(yù)測(cè)誤差變化較小。對(duì)于牛市、熊市以及震蕩市場(chǎng)數(shù)據(jù)的預(yù)測(cè)均具有較好的適用性,預(yù)測(cè)穩(wěn)定性和預(yù)測(cè)精度都有較好的表現(xiàn)。
(2)MTDM與其他算法預(yù)測(cè)性能對(duì)比
MTDM算法與基于LSTM的預(yù)測(cè)方法以及PSO優(yōu)化預(yù)測(cè)方法進(jìn)行對(duì)比,得到的MSE、RMSE和MAPE分別見(jiàn)表2、表3。由表2、3可知,MTDM預(yù)測(cè)方法的預(yù)測(cè)誤差顯著低于其他算法,具有更好的預(yù)測(cè)效果。
表2 與基于LSTM預(yù)測(cè)方法的性能對(duì)比表Tab.2 Performance comparison table with the prediction method based on LSTM
表3 與PSO算法優(yōu)化預(yù)測(cè)方法的性能對(duì)比表Tab.3 Performance comparison table with PSO algorithm optimization prediction method
本文使用最大離差分裂算法改進(jìn)了模型樹(shù),使得模型能夠適應(yīng)證券數(shù)據(jù)的特征,經(jīng)不同時(shí)間段的滬深300指數(shù)預(yù)測(cè)實(shí)驗(yàn)驗(yàn)證,以及與其他預(yù)測(cè)方法的對(duì)比,表明本模型具有良好的預(yù)測(cè)準(zhǔn)確度和穩(wěn)定性。
基于最大離差分裂算法的模型樹(shù)預(yù)測(cè)模型在找到分裂點(diǎn)并分裂數(shù)據(jù)后,僅用模型樹(shù)的最右子樹(shù)進(jìn)行預(yù)測(cè),丟失了兄弟節(jié)點(diǎn)、父節(jié)點(diǎn)之間的關(guān)系。下一步擬使用多叉模型樹(shù),利用節(jié)點(diǎn)間的關(guān)系、最右子樹(shù)等所有分裂信息構(gòu)建預(yù)測(cè)模型,進(jìn)一步減小預(yù)測(cè)誤差,提高預(yù)測(cè)準(zhǔn)確率。