孫麗麗,方宏彬,朱星星,胡蕾明,齊龍武
(安徽大學(xué) 經(jīng)濟(jì)學(xué)院,安徽 合肥 230601)
近幾年機(jī)器學(xué)習(xí)作為人工智能領(lǐng)域一個(gè)重要的分支,以其強(qiáng)大的算法功能和學(xué)習(xí)能力被廣泛應(yīng)用于各領(lǐng)域的預(yù)測(cè)和決策工作任務(wù)中。目前已有大量學(xué)者利用機(jī)器學(xué)習(xí)來(lái)對(duì)金融時(shí)間序列進(jìn)行分析和預(yù)測(cè),如黃卿等為預(yù)測(cè)股指期貨高頻數(shù)據(jù)1分鐘下的價(jià)格變動(dòng)方向,使用了XGBoost(extreme gradient boosting)模型,實(shí)驗(yàn)證明了XGBoost 的預(yù)測(cè)能力要比SVM(support vertor machine)和傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)強(qiáng)[1]。另外有大量學(xué)者基于BP(back propagation)網(wǎng)絡(luò)以及貝葉斯神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)和網(wǎng)絡(luò)調(diào)參,將神經(jīng)網(wǎng)絡(luò)模型應(yīng)用于股票預(yù)測(cè),論證了神經(jīng)網(wǎng)絡(luò)很好地實(shí)現(xiàn)了股票價(jià)格短期預(yù)測(cè)[2-5]。Liu 等提出一種新的SVM 模型,使用灰色關(guān)聯(lián)度計(jì)算權(quán)值應(yīng)用到SVM 中,對(duì)特征加權(quán),利用移動(dòng)時(shí)間序列窗口對(duì)所有數(shù)據(jù)進(jìn)行測(cè)試,實(shí)現(xiàn)了數(shù)據(jù)集的擴(kuò)展[6]。大多學(xué)者著力于使用SVM 來(lái)構(gòu)建股票預(yù)測(cè)模型,研究出一系列因子選股以及股票擇時(shí)策略,應(yīng)用到股票價(jià)格預(yù)測(cè),實(shí)驗(yàn)證明其對(duì)股票市場(chǎng)有很好的預(yù)測(cè)性能[7-11]。王燕等使用網(wǎng)格搜索算法對(duì)XGBoost 模型進(jìn)行參數(shù)優(yōu)化構(gòu)建GS-XGBoost 的金融預(yù)測(cè)模型,發(fā)現(xiàn)GSXGBoost 金融預(yù)測(cè)模型在股票的短期預(yù)測(cè)中具有更好的擬合性能。他們又提出了提出離散小波變換與優(yōu)化的XGBoost 算法結(jié)合的股價(jià)預(yù)測(cè)模型(DWT-ARIMA-GSXGB)模型,用以預(yù)測(cè)金融時(shí)間序列數(shù)據(jù),實(shí)驗(yàn)結(jié)果表明此模型的預(yù)測(cè)股票開(kāi)盤價(jià)的預(yù)測(cè)值和實(shí)際值誤差要小于其他四種對(duì)比模型(XGBoost,ARIMA,GSXGB,DWT-ARIMAXGBoost[12-14]。另有學(xué)者發(fā)現(xiàn),傳統(tǒng)的計(jì)量經(jīng)濟(jì)模型會(huì)假設(shè)隨機(jī)擾動(dòng)為常量,但很多實(shí)際研究發(fā)現(xiàn)這種假設(shè)并不嚴(yán)謹(jǐn)尤其是對(duì)金融領(lǐng)域而言,因此有學(xué)者研究了自回歸條件異方差(ARCH)以及廣義自回歸條件異方差(GARCH)模型來(lái)刻畫(huà)金融時(shí)序數(shù)據(jù)的波動(dòng)集聚效應(yīng)[15-17]。彭燕等利用LSTM(long short-term memory)遞歸神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票走勢(shì),通過(guò)改變LSTM 層數(shù)以及LSTM 隱藏層神經(jīng)單元個(gè)數(shù)進(jìn)行訓(xùn)練測(cè)試,提高了預(yù)測(cè)準(zhǔn)確率30%[18]。有的學(xué)者基于粒子群、特征選擇以及遺傳算法對(duì)LSTM 模型進(jìn)行訓(xùn)練與調(diào)試,結(jié)果表明LSTM 模型能夠?qū)善笔袌?chǎng)做出良好的預(yù)測(cè)[19-22]。近年來(lái)有不少學(xué)者將機(jī)器學(xué)習(xí)作為文本挖掘和自然語(yǔ)言處理的強(qiáng)大工具,并將其應(yīng)用到股票的價(jià)格走勢(shì)預(yù)測(cè)中,得到了較為準(zhǔn)確的預(yù)測(cè)精度[2324]。
從已有研究成果來(lái)看,雖然有很多學(xué)者利用XGBoost 模型來(lái)對(duì)股票價(jià)格進(jìn)行預(yù)測(cè),但國(guó)內(nèi)對(duì)此方面的研究甚少。鑒于此,本文創(chuàng)新性的利用網(wǎng)格搜索算法對(duì)XGBoost 模型進(jìn)行參數(shù)優(yōu)化,應(yīng)用到股票價(jià)格預(yù)測(cè)中。
XGBoost 是梯度提升算法GBDT(gradient boosting decision tree)的加強(qiáng)版本,它在優(yōu)化目標(biāo)函數(shù)時(shí)利用泰勒二階展開(kāi)式,并且在損失函數(shù)中增加了正則項(xiàng)用于控制模型的復(fù)雜度。XGBoost優(yōu)化的目標(biāo)函數(shù)如下:
式中:Obj(t)表示第t次訓(xùn)練的目標(biāo)函數(shù);yi表示第i個(gè)樣本的真實(shí)值;為第t-1 輪模型的預(yù)測(cè)值;l即為損失函數(shù);ft(xi)表示輸入為xi時(shí)第t輪的函數(shù)值;Ω(ft)為正則化項(xiàng);C為常數(shù)。
利用泰勒二階展開(kāi)將(1)寫(xiě)為下面的形式:
訓(xùn)練模型時(shí),(2)可以用下式表示
在(4)和(5)式中,Ij被定義為每個(gè)葉子結(jié)點(diǎn)j上面樣本下標(biāo)的集合Ij={q(xi)=j},q(xi) 表示為每個(gè)葉子上面樣本的集合。這一步是由于XGBoost目標(biāo)函數(shù)第二部分增加了兩個(gè)正則項(xiàng):葉子節(jié)點(diǎn)個(gè)數(shù)T和葉子節(jié)點(diǎn)的分?jǐn)?shù)w。
1.2.1 GirdSearch-CV
網(wǎng)格搜索與交叉驗(yàn)證是一種窮舉算法,將所有算法需要的參數(shù)可能取值列舉成網(wǎng)格。參數(shù)值的各種排列組合自動(dòng)選擇出模型需要的最優(yōu)參數(shù)組合,這種自動(dòng)調(diào)參的機(jī)制需要評(píng)分機(jī)制來(lái)支持,就是交叉驗(yàn)證法。以3 折、5 折和10 折交叉驗(yàn)證最為常用。交叉驗(yàn)證會(huì)給每個(gè)參數(shù)組合進(jìn)行打分,算法最終選擇評(píng)分機(jī)制最高的那個(gè)參數(shù)組合進(jìn)行建模。
1.2.2 GC-XGBoost 的構(gòu)建過(guò)程
Step 1:獲取股票數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行清洗、插值等數(shù)據(jù)預(yù)處理工作;
Step 2:將數(shù)據(jù)分為兩部分:訓(xùn)練集和測(cè)試集。首先進(jìn)行XGBoost 模型建模,并將模型用于對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練,模型訓(xùn)練好將此模型對(duì)測(cè)試集數(shù)據(jù)進(jìn)行測(cè)試,記錄預(yù)測(cè)的評(píng)估指標(biāo)值。此步即為XGBoost 原模型建模。
Step 3:同樣用XGBoost 模型建模,但此時(shí)需要列舉出XGBoost 所有參數(shù)的排列組合形成網(wǎng)格,然后進(jìn)行的XGBoost 建模便是基于所有的參數(shù)組合,并且需要一種評(píng)分機(jī)制來(lái)給每種模型實(shí)施打分操作,此機(jī)制就是交叉驗(yàn)證的方法,最終選擇出評(píng)分最高的那個(gè)參數(shù)組合的XGBoost 模型,也就是GC-XGBoost 模型(GridSearch-CV-XGBoost)。
1.2.3 GC-XGBoost 算法
GridSearch-CV-XGBoost 算法簡(jiǎn)稱為GCXGBoost 算法。其步驟如下:
Step 1:數(shù)據(jù)清洗預(yù)處理;
Step 2:學(xué)習(xí)訓(xùn)練XGBoost模型;
Step 3:構(gòu)建評(píng)分機(jī)制指標(biāo);
Step 4:網(wǎng)格搜索優(yōu)化XGBoost模型參數(shù),重新得到新XGBoost模型,即為GC-XGBoost模型
建立一個(gè)新的模型,需要評(píng)價(jià)其性能好壞。有很多可以評(píng)估股票預(yù)測(cè)模型性能的指標(biāo),常見(jiàn)的有三種:分別是用來(lái)衡量觀測(cè)值和真實(shí)值之間偏差的均方誤差MSE(mean squared error),反映預(yù)測(cè)值產(chǎn)生的誤差大小的平均絕對(duì)誤差MAE(mean absolute error)以及可用于比較不同量綱下模型性能好壞的R方值R2。本文選取這三個(gè)指標(biāo)來(lái)綜合評(píng)價(jià)以及對(duì)比模型。
MSE 是誤差平方和除以樣本量得到的,而誤差平方和是線性回歸模型的擬合過(guò)程中預(yù)測(cè)值和真實(shí)值之間的誤差的平方和。這個(gè)值越小表示預(yù)測(cè)值與真實(shí)值越接近,擬合效果越好。MSE 的計(jì)算公式:
MAE 是絕對(duì)誤差的平均值。為了避免誤差正負(fù)抵消的情況發(fā)生,另外一種方法就是采用絕對(duì)值進(jìn)行計(jì)算,能夠?qū)⒄鎸?shí)值與預(yù)測(cè)值之間的誤差大小的情況較好的反映出來(lái),其值越小,預(yù)測(cè)效果越好。計(jì)算公式:
(3)R2是用來(lái)表示模型擬合效果的,值越大,表示擬合效果越好;值越小,表示擬合效果越差甚至判斷出模型不合適。計(jì)算公式:
本文實(shí)驗(yàn)所用的軟件是python3.7,所用到的庫(kù)和包有numpy,pandas,matplotlib,sklearn,xgboost 以及tushare 包。為了使模型預(yù)測(cè)股票價(jià)格更有說(shuō)服力,本文選取了貴州茅臺(tái)這只股票2001年8 月27 日至2020 年4 月17 日的每日開(kāi)盤價(jià)、最高價(jià)、最低價(jià)、交易量以及收盤價(jià)等數(shù)據(jù),以收盤價(jià)作為預(yù)測(cè)目標(biāo)變量,共計(jì)4 448 個(gè)樣本。所有數(shù)據(jù)通過(guò)python 自帶的tushare 包下載。
貴州茅臺(tái)是白酒行業(yè)中的一只看漲的股票,在前幾年的價(jià)格一直是穩(wěn)中上升的趨勢(shì),今年疫情期間,所有大盤指數(shù)看跌,股票行業(yè)持續(xù)虧損,幾乎所有股票都暴跌很多個(gè)點(diǎn)。然而在這個(gè)突發(fā)的事件給所有股民帶來(lái)不利影響的同時(shí),貴州茅臺(tái)的價(jià)格在此時(shí)卻迅速攀升,較前幾年的漲勢(shì)更加迅猛,甚至疫情初期突破千元,股價(jià)走勢(shì)長(zhǎng)期看有一個(gè)明顯的轉(zhuǎn)折。此時(shí)用模型對(duì)此階段的價(jià)格進(jìn)行預(yù)測(cè)能夠很好的反映了模型的預(yù)測(cè)能力。圖1 貴州茅臺(tái)的開(kāi)盤價(jià)、收盤價(jià)、最高價(jià)和最低價(jià)整體走勢(shì)。
圖1 貴州茅臺(tái)價(jià)格走勢(shì)圖
從圖1 可以看出,茅臺(tái)價(jià)格在2017 年之前一直都呈穩(wěn)重上升趨勢(shì),最近幾年價(jià)格漲勢(shì)較猛,尤其今年疫情期間,突破至“千元茅臺(tái)”,對(duì)這段時(shí)間價(jià)格經(jīng)歷的波折進(jìn)行建模預(yù)測(cè)很有意義,可以驗(yàn)證模型是否能很好的擬合這段時(shí)間的價(jià)格走勢(shì)。
圖2 可以明顯看到,在疫情期間茅臺(tái)價(jià)格呈現(xiàn)了明顯波動(dòng)起伏趨勢(shì),但總體趨勢(shì)是上升的。可以很好構(gòu)建機(jī)器學(xué)習(xí)模型來(lái)對(duì)價(jià)格進(jìn)行預(yù)測(cè),驗(yàn)證其模型的預(yù)測(cè)性能。
圖2 疫情期間茅臺(tái)價(jià)格走勢(shì)
在構(gòu)建GC-XGBoost 模型預(yù)測(cè)前,需要對(duì)數(shù)據(jù)進(jìn)行插值,標(biāo)準(zhǔn)化等預(yù)處理,再把總共的樣本數(shù)據(jù)集4 448 條記錄劃分成訓(xùn)練集和測(cè)試集兩個(gè)數(shù)據(jù)集合。測(cè)試集選取后面連續(xù)30 天的數(shù)據(jù),前面剩余的數(shù)據(jù)全部取出用來(lái)訓(xùn)練模型,將訓(xùn)練好的模型來(lái)預(yù)測(cè)最后30 天的價(jià)格,最后與真實(shí)價(jià)格作對(duì)比,給出模型各個(gè)評(píng)估指標(biāo)的值來(lái)評(píng)價(jià)模型的預(yù)測(cè)性能。本次首輪實(shí)驗(yàn)采用的是默認(rèn)參數(shù)的模型也就是XGBoost 原模型進(jìn)行訓(xùn)練,用最后30天數(shù)據(jù)作為測(cè)試集進(jìn)行預(yù)測(cè),最后得到的實(shí)驗(yàn)結(jié)果如圖3。
圖3 XGBoost 原模型預(yù)測(cè)值與真實(shí)值對(duì)比圖
從圖3 可以看到,XGBoost 原模型整體上已經(jīng)很好地?cái)M合了股票價(jià)格的波動(dòng)趨勢(shì),有少數(shù)的點(diǎn)預(yù)測(cè)結(jié)果較差。并且考慮到XGBoost 原模型采用的是預(yù)排序,在迭代前會(huì)對(duì)節(jié)點(diǎn)做預(yù)排序,遍歷所有分割點(diǎn),數(shù)據(jù)量稍大時(shí)耗時(shí)嚴(yán)重,并且很多葉子節(jié)點(diǎn)的分裂增益較低,沒(méi)有必要繼續(xù)進(jìn)一步的分裂,這就帶來(lái)了一些不必要的開(kāi)銷。因此,我們提出基于網(wǎng)格搜索的算法來(lái)自動(dòng)學(xué)習(xí)到最優(yōu)參數(shù),降低占用內(nèi)存以及數(shù)據(jù)分割的復(fù)雜度。為了進(jìn)一步說(shuō)明基于網(wǎng)格搜索的XGBoost 模型預(yù)測(cè)性能相較于原模型有所提升,現(xiàn)在將上述第一輪實(shí)驗(yàn)結(jié)果與GC-XGBoost 模型在股票預(yù)測(cè)中的性能進(jìn)行比較,進(jìn)行第二輪實(shí)驗(yàn),通過(guò)兩種模型的重要評(píng)價(jià)指標(biāo)來(lái)評(píng)價(jià)模型的性能好壞。實(shí)驗(yàn)為保持?jǐn)?shù)據(jù)的一致性,同樣采用貴州茅臺(tái)股票相同時(shí)間內(nèi)的股票價(jià)格數(shù)據(jù)進(jìn)行訓(xùn)練和測(cè)試,這里使用相同的股票訓(xùn)練數(shù)據(jù)集來(lái)訓(xùn)練基于網(wǎng)格搜索算法優(yōu)化參數(shù)的XGBoost 模型,再用同樣最后30 天數(shù)據(jù)作為測(cè)試集進(jìn)行預(yù)測(cè),最后得到的基于測(cè)試集實(shí)驗(yàn)結(jié)果如圖4 所示。
在使用網(wǎng)格搜索算法和交叉驗(yàn)證法中,我們需要設(shè)置的XGBoost 模型重要參數(shù)有學(xué)習(xí)率,樹(shù)的棵樹(shù)數(shù),樹(shù)的深度,最小的葉子權(quán)重等等,這里得到最優(yōu)參數(shù)學(xué)習(xí)率learning rate 為0.3,n_estimators 為100,max_depth 為8,min_child_weight為1,根據(jù)經(jīng)驗(yàn)將CV 設(shè)置為3。從圖4 可以看出,在經(jīng)過(guò)網(wǎng)格搜索算法優(yōu)化后的XGBoost 模型很好的追蹤了股票價(jià)格的波動(dòng)趨勢(shì),能夠更好的擬合價(jià)格的趨勢(shì)圖,表明改進(jìn)的模型XGBoost 預(yù)測(cè)性能有所提升。
圖4 網(wǎng)格搜索優(yōu)化的XGBoost 模型預(yù)測(cè)值與真實(shí)值
兩輪實(shí)驗(yàn)中針對(duì)測(cè)試集得到兩種模型實(shí)驗(yàn)結(jié)果評(píng)價(jià)指標(biāo)的對(duì)比如表1 所示。
表1 貴州茅臺(tái)收盤價(jià)的兩種模型預(yù)測(cè)對(duì)比
對(duì)于MSE 和MAE,其值越小,表示預(yù)測(cè)的誤差越小,結(jié)果越精確,模型就越好。對(duì)R2,其值越大,表明預(yù)測(cè)值與真實(shí)值擬合度越高,模型預(yù)測(cè)性能越好。從表1 可以看到,無(wú)論是XGBoost 原模型還是基于網(wǎng)格搜索算法改進(jìn)的XGBoost 模型,對(duì)于前兩個(gè)評(píng)價(jià)指標(biāo)MSE 和MAE 都較小,后一個(gè)指標(biāo)R2較大,接近于1,說(shuō)明了這兩種模型對(duì)于股票價(jià)格都有很好的預(yù)測(cè)能力,對(duì)于股票價(jià)格的走勢(shì)擬合效果較好。同時(shí),改良后的XGBoost 模型也就是GC-XGBoost 模型的MSE,MAE 相比較XGBoost 原模型更小,R2比XGBoost 原模型更大,說(shuō)明基于網(wǎng)格搜索優(yōu)化參數(shù)后的XGBoost模型的預(yù)測(cè)性能有了很好的提升,提出的GC-XGBoost 模型可以更好地實(shí)現(xiàn)對(duì)股票價(jià)格準(zhǔn)確預(yù)測(cè)的目的。
本文提出了基于網(wǎng)格搜索算法優(yōu)化參數(shù)的XGBoost 模型,將其應(yīng)用到股票價(jià)格的預(yù)測(cè)中,利用貴州茅臺(tái)收盤價(jià)對(duì)模型性能進(jìn)行實(shí)驗(yàn)驗(yàn)證,采用MSE,MAE 和作為評(píng)估指標(biāo),實(shí)驗(yàn)對(duì)比改進(jìn)后的XGBoost 模型對(duì)于股票預(yù)測(cè)有很好的擬合能力,并且預(yù)測(cè)效果要優(yōu)于XGBoost 原模型的預(yù)測(cè)性能,說(shuō)明基于網(wǎng)格搜索優(yōu)化參數(shù)的算法能夠提升XGBoost 模型的預(yù)測(cè)性能。但是模型的預(yù)測(cè)性能總體提升度不高,后期需要結(jié)合其他方法在對(duì)數(shù)據(jù)的質(zhì)量上進(jìn)行改善,并且將改善后的模型應(yīng)用于其他多種金融產(chǎn)品如股指期貨上,進(jìn)一步完善模型的穩(wěn)定性,給更多股民帶來(lái)有意義的投資參考意見(jiàn)。
阜陽(yáng)師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2021年2期