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