方 昕,陳玲玲,曹海燕
(杭州電子科技大學(xué)通信工程學(xué)院,浙江 杭州 310018)
在股票市場(chǎng)研究中,股價(jià)的漲跌一直是人們關(guān)注的熱點(diǎn)。國(guó)內(nèi)外學(xué)者對(duì)股票價(jià)格預(yù)測(cè)進(jìn)行了深入研究,提出多種預(yù)測(cè)方法。時(shí)間序列分析法最先應(yīng)用于股票價(jià)格預(yù)測(cè),建立ARIMA-SVM模型對(duì)股票開盤價(jià)進(jìn)行短期預(yù)測(cè)[1],機(jī)器學(xué)習(xí)法是一種有別于傳統(tǒng)股票市場(chǎng)預(yù)測(cè)的新方法[2]。文獻(xiàn)[3]將股票市場(chǎng)的Cnx Nifty和Bombay Stock Exchange(BSE)股票數(shù)據(jù)作為歷史數(shù)據(jù),分別使用樸素貝葉斯(Naive Bayes,NB)、支持向量機(jī)(Support Vector Machine,SVM)、人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,ANN)和隨機(jī)森林(Random Forest,RF)這4種算法來預(yù)測(cè)股票市場(chǎng)的趨勢(shì),結(jié)果表明RF模型預(yù)測(cè)的準(zhǔn)確率最高。文獻(xiàn)[4]采用了網(wǎng)格搜索算法優(yōu)化隨機(jī)森林參數(shù),對(duì)決策樹的個(gè)數(shù)以及分裂屬性進(jìn)行了參數(shù)優(yōu)化,解決了隨機(jī)森林參數(shù)尋優(yōu)問題。當(dāng)股票特征過多時(shí),存在輸入數(shù)據(jù)維度過大、計(jì)算量過高問題,文獻(xiàn)[5]采用粒子群算法進(jìn)行特征選擇,剔除冗余特征來降低輸入數(shù)據(jù)維度。但RF進(jìn)行股票預(yù)測(cè)研究時(shí),即存在隨著特征種類的增加,股票趨勢(shì)預(yù)測(cè)精度下降,耗時(shí)增加問題,又存在參數(shù)較多,其預(yù)測(cè)準(zhǔn)確率對(duì)參數(shù)依賴程度高的問題。為此,本文在文獻(xiàn)[3]的隨機(jī)森林算法預(yù)測(cè)基礎(chǔ)上進(jìn)行改進(jìn),結(jié)合文獻(xiàn)[4]和文獻(xiàn)[5]改進(jìn)隨機(jī)森林算法,將粒子群算法(Particle Swarm Optimization,PSO)和網(wǎng)格搜索算法(Grid Search,GRID)相結(jié)合,提出一種改進(jìn)的隨機(jī)森林算法——粒子群參數(shù)網(wǎng)格搜索的隨機(jī)森林算法 (Particle Swarm Optimization Grid Search Random Forest,PSO-GRID-RF)。先利用PSO篩選最優(yōu)特征輸入RF中,再利用GRID同步搜索最優(yōu)參數(shù),防止算法陷入局部最優(yōu),獲得更優(yōu)的分類性能和趨勢(shì)預(yù)測(cè)精度。
隨機(jī)森林算法的過程如下:選擇股票代碼,輸入股票的日交易數(shù)據(jù),對(duì)交易數(shù)據(jù)進(jìn)行大量特征提取,并對(duì)輸入特征進(jìn)行篩選,將篩選的特征參數(shù)作為輸入變量輸入到隨機(jī)森林中,股票價(jià)格的漲跌情況作為隨機(jī)森林的輸出變量。
對(duì)一組決策樹h1(x),h2(x),…,hk(x),其邊緣函數(shù)公式如下:
(1)
式中,marg(·)表示邊緣函數(shù),avk(·)表示取平均值,I(·)表示示性函數(shù),j表示分類中表示錯(cuò)誤類的向量,X表示輸入向量,Y表示分類中表示正確類的向量,k表示樹的個(gè)數(shù)。
式(1)表示輸入向量X被分類器分為Y比被分為j的最大平均票數(shù)的多的程度。
根據(jù)大數(shù)定理可知,泛化誤差為:
(2)
式中,E*(·)表示泛化誤差,PX,Y(·)表示邊緣函數(shù)小于0的概率,泛化誤差一般小于某個(gè)固定的值。
在隨機(jī)森林中,第k個(gè)決策樹hk(X)表示為h(X,θk),其中X表示輸入向量,θk表示用于訓(xùn)練第k個(gè)樹自舉(Bootstrapped)數(shù)據(jù)集。對(duì)于從原始數(shù)據(jù)集θ生成的一系列自舉樣本集θ1,θ2,θ3,…,θk,發(fā)現(xiàn)E*收斂于:
(3)
為了證明關(guān)于數(shù)據(jù)集的定理,袋外數(shù)據(jù)(Out of Bag,OOB)用來評(píng)估隨機(jī)森林的泛化性能好壞,其得分記為Oscore,誤差記為Oerror。
PSO算法用于股票特征的選擇,是一種基于群體智能的隨機(jī)優(yōu)化算法,速度向量為Vi=[vi1,vi2,…,vin],同時(shí)每個(gè)粒子位置向量為Xi=[xi1,xi2,…,xin],每次迭代粒子更新到新位置,每次的位置速度隨機(jī)分配,通過適應(yīng)值函數(shù)計(jì)算出其在當(dāng)前位置下最優(yōu)適應(yīng)度的一種進(jìn)化技術(shù)[6]。粒子當(dāng)前速度Vi更新如下:
Vi=wVi+c1r1(Pbesti-Xi)+c2r2(Gbesti-Xi)
(4)
式中,Xi表示第i個(gè)粒子位置,Vi表示第i個(gè)粒子的速度,Pbesti表示第i個(gè)粒子迭代過程時(shí)粒子的局部最優(yōu)位置,Gbesti表示第i個(gè)粒子迭代過程時(shí)粒子的全局最優(yōu)位置,w表示慣性因子,c1,c2表示學(xué)習(xí)因子,本文中,w=1,c1=c2=2;r1,r2∈[0,1],隨機(jī)均勻分布。
粒子的位置Xi更新如下:
(5)
(6)
式中,r3∈[0,1]的隨機(jī)數(shù),S(·)表示sigmoid函數(shù),以速度作為sigmoid函數(shù)的變量,調(diào)整空間位置,式(5)與隨機(jī)數(shù)比較,更新粒子的位置狀態(tài),最終粒子的位置由0和1組成。
在隨機(jī)森林分類過程中,樹棵數(shù)、最大特征數(shù)、最大樹的深度和最小樣本數(shù)過大或過小都會(huì)引起過擬合或欠擬合的現(xiàn)象,從而影響分類精度。網(wǎng)格搜索算法是指定參數(shù)值的一種窮舉搜索方法,將隨機(jī)森林的參數(shù)通過交叉驗(yàn)證的方法來進(jìn)行優(yōu)化,以獲得最優(yōu)參數(shù)的學(xué)習(xí)算法[7]。
基于PSO-GRID-RF的股票交易信號(hào)預(yù)測(cè)算法流程如圖1所示,主要步驟為。
(1)獲取數(shù)據(jù):通過網(wǎng)站獲取股票數(shù)據(jù);
(2)輸入數(shù)據(jù):提取股票數(shù)據(jù)的特征參數(shù),作為輸入數(shù)據(jù),并將數(shù)據(jù)歸一化;
(3)優(yōu)化特征子集F:采用PSO算法進(jìn)行特征選擇,選中的特征用于隨機(jī)森林的輸入向量進(jìn)行趨勢(shì)預(yù)測(cè),根據(jù)粒子的位置更新,用1表示選中,用0表示未選中,選中的特征形成特征子集F,F(xiàn)的個(gè)數(shù)即為優(yōu)化選取的特征數(shù);
(4)設(shè)定判定條件:若迭代次數(shù)超過最大迭代次數(shù),則跳出循環(huán),并根據(jù)群體歷史最優(yōu)位置輸出優(yōu)化的特征子集以及優(yōu)化的參數(shù);
(5)輸出最優(yōu)特征:若最大迭代次數(shù)滿足步驟4設(shè)定的條件,則輸出粒子群選擇的最優(yōu)特征,否則返回上一步;
(6)構(gòu)建數(shù)據(jù)矩陣:根據(jù)步驟5選出的最優(yōu)特征構(gòu)建隨機(jī)森林輸入數(shù)據(jù)矩陣;
(7)訓(xùn)練樣本內(nèi)數(shù)據(jù):訓(xùn)練集和測(cè)試集交叉驗(yàn)證優(yōu)化隨機(jī)森林參數(shù),其參數(shù)包括樹棵數(shù)n,最大特征數(shù)m,最大樹的深度d和最小樣本數(shù)l。將訓(xùn)練集采用交叉驗(yàn)證進(jìn)行調(diào)參,70%用于訓(xùn)練模型,30%用于驗(yàn)證模型,利用網(wǎng)格搜索算法對(duì)隨機(jī)森林進(jìn)行參數(shù)尋優(yōu),得到預(yù)測(cè)模型,使得模型對(duì)數(shù)據(jù)有較好的適應(yīng)度以及預(yù)測(cè)的精確度;
(8)測(cè)試樣本外數(shù)據(jù):確定最優(yōu)參數(shù)后,再用測(cè)試數(shù)據(jù)來測(cè)試訓(xùn)練的隨機(jī)森林算法模型,得到分類結(jié)果,以測(cè)試集所有預(yù)處理后的樣本特征作為模型的輸入,得到每個(gè)樣本未來1 d預(yù)測(cè)趨勢(shì),并與實(shí)際股票趨勢(shì)進(jìn)行比較,得出股票預(yù)測(cè)的精確度以及一些評(píng)價(jià)指標(biāo)。
選擇股票日數(shù)據(jù)最高價(jià)(High,Hi)及最低價(jià)(Low,Li)、收盤價(jià)(Close,Ci)構(gòu)建交易信號(hào)Yi={y1,y2,…,yn},其中,i=1,2,…,n為樣本編號(hào)[8]。
交易信號(hào)的具體構(gòu)建步驟如下:
股票數(shù)據(jù)是使用滬深300,中證500股票數(shù)據(jù),選取2012-02-14至2015-05-29的數(shù)據(jù)作為樣本內(nèi)訓(xùn)練數(shù)據(jù),共800個(gè)數(shù)據(jù),2015-06-01至2016-03-24的數(shù)據(jù)作為樣本外第一組測(cè)試數(shù)據(jù),2016-03-25至2017-03-24的數(shù)據(jù)作為樣本外第二組測(cè)試數(shù)據(jù),每個(gè)測(cè)試集200個(gè)數(shù)據(jù)。本文用到的技術(shù)指標(biāo)為RSI,KDJ,A/D,ATR,MOM,MFI,ROC,OBV,CCI,EOM,TRIX,VI,EMA,MACD,除MACD有3個(gè)時(shí)間跨度,其余每1個(gè)技術(shù)指標(biāo)都由4個(gè)不同時(shí)間跨度構(gòu)成1組特征向量Xi={Xi1,Xi2,Xi3,…,Xi13,Xi14}(i=1,2,3,4),為了方便計(jì)算,進(jìn)行歸一化處理[9]:
(7)
表1 混淆矩陣
隨機(jī)森林算法分類過程中,分類預(yù)測(cè)用混淆矩陣表示,如表1所示。
表1中,TP為正類分為+1,F(xiàn)Z1為正類分為0,F(xiàn)N1為正類分為-1;FP1為零類分為+1,TZ為零類分為0,F(xiàn)N2為零類分為-1;FP2為負(fù)類分為+1,F(xiàn)Z2為負(fù)類分為0,TN為負(fù)類分為-1;FP=FP1+FP2,F(xiàn)N=FN1+FN2,F(xiàn)Z=FZ1+FZ2。N表示樣本總量,NTP,NFN,NFP,NTN,NTZ分別表示每種情況的樣本個(gè)數(shù),N=NTP+NFN+NFP+NTN+NTZ。
準(zhǔn)確率(PAccuracy)表示被預(yù)測(cè)正確的概率,召回率(PRecall)表示正類的樣本預(yù)測(cè)為正的概率,查準(zhǔn)率(PPresion)表示被預(yù)測(cè)為正類的樣本中正確的概率[7],其計(jì)算公式如下:
PAccuracy=(NTP+NTN)/N
(8)
PRecall=NTP/(NTP+NFN1+NFZ1)
(9)
PPresion=NTP/(NTP+NFP)
(10)
綜合評(píng)價(jià)指標(biāo)由Recall和Precision的加權(quán)平均值組成的綜合性能指標(biāo),記為F,計(jì)算公式如下:
(11)
適應(yīng)度值(Fitness)由F與特征數(shù)Nf組成,值越大越好,計(jì)算公式如下:
(12)
式中,ωa和ωf分別是上述綜合性能指標(biāo)F與特征數(shù)Nf這兩個(gè)因素的權(quán)重,滿足ωa+ωf=1。
設(shè)定隨機(jī)森林分類參數(shù)樹棵數(shù)n,最大特征數(shù)m,最大樹的深度d,最小樣本數(shù)l,隨機(jī)狀態(tài)r,采用網(wǎng)格搜索算法對(duì)隨機(jī)森林參數(shù)尋優(yōu)過程如下。
(1)設(shè)定隨機(jī)森林的參數(shù)變量(n,m,d,l,r)的范圍以及搜索的步長(zhǎng),根據(jù)實(shí)際情況由大到小,層層遞進(jìn)搜索,其中n的初始范圍為[0,1000],步距選為100,m根據(jù)輸入特征的維度來確定,d的初始范圍為[10,100],步距選為10,l的初始范圍為[0,10],步距選為1,r的初始范圍為[0,100],步距選為10。
(2)采用k-CV(k維交叉驗(yàn)證)的方法對(duì)訓(xùn)練數(shù)據(jù)集進(jìn)行訓(xùn)練[6],其中k=2,訓(xùn)練得到分類準(zhǔn)確率最高的局部最優(yōu)參數(shù),其結(jié)果n為600,m為55,d為30,l為2,r為50。
(3)根據(jù)局部最優(yōu)參數(shù),在其附近選擇不同的區(qū)間進(jìn)行二次尋優(yōu),n的范圍為[600,700],步距選為10,d的初始范圍為[30,40],步距選為1,r的初始范圍為[40,60],步距選為1,直到選擇出最佳的分類參數(shù)作為隨機(jī)森林的參數(shù)。
網(wǎng)格搜索算法搜索得出最佳參數(shù)如表2所示。
表2 不同算法對(duì)應(yīng)隨機(jī)森林參數(shù)對(duì)比
通過表2可以看出:當(dāng)只使用RF時(shí),參數(shù)隨機(jī)確定,滬深300、中證500預(yù)測(cè)精確度分別為0.679,0.736,Oscore分別為0.641,0.704,適應(yīng)度分別為0.479,0.522;使用GRID-RF算法時(shí),對(duì)于滬深300、中證500尋得參數(shù)樹棵數(shù)分別為620,650,最大特征數(shù)均為55,最大樹的深度均為30和葉子節(jié)點(diǎn)最小樣本數(shù)分別為2,3,其精確度分別為0.757,0.857,Oscore分別為0.803,0.860,適應(yīng)度分別為0.538,0.604,通過對(duì)比發(fā)現(xiàn):其值相對(duì)于RF算法都得到大幅度提升,改進(jìn)算法有利于預(yù)測(cè)精確度的提升;當(dāng)使用PSO-GRID-RF時(shí),對(duì)于滬深300、中證500尋得樹棵數(shù)均為630,最大特征數(shù)分別為30,29,最大樹的深度均為30,葉子節(jié)點(diǎn)最小樣本數(shù)分別為3,2,其精確度分別為0.863,0.876,Oscore分別為0.865,0.860,適應(yīng)度分別為0.616,0.626,其值相對(duì)于GRID-RF算法得到一定提升。
對(duì)股票采用粒子群優(yōu)化適應(yīng)度曲線,由適應(yīng)度計(jì)算公式(12)可以看出:當(dāng)特征數(shù)量減小時(shí),算法性能得到提高,適應(yīng)度值增大。滬深300、中證500使用粒子群算法進(jìn)行特征選擇時(shí)迭代的最優(yōu)適應(yīng)度值和適應(yīng)度均值變化過程曲線如圖2所示。
圖2 使用粒子群特征優(yōu)化適應(yīng)度變化曲線
由圖2可以看出:隨著迭代次數(shù)的增加,特征數(shù)量減小,算法性能提高,適應(yīng)度值增大。適應(yīng)度值變大說明此算法的泛化能力隨著迭代次數(shù)逐漸變好。
不同算法對(duì)比結(jié)果如表3所示。
表3 不同算法結(jié)果對(duì)比
通過表3的數(shù)據(jù)對(duì)比可知:本文提出PSO-GRID-RF的股票交易信號(hào)識(shí)模型性能要優(yōu)于GRID-RF模型,GRID-RF模型要優(yōu)于RF模型,因此采用PSO-GRID-RF模型綜合算法的優(yōu)點(diǎn),即進(jìn)行了特征提取,又進(jìn)行了參數(shù)尋優(yōu),使得組合模型預(yù)測(cè)更加精確穩(wěn)定。
本文使用隨機(jī)森林算法對(duì)股票收益率進(jìn)行研究,提出PSO-GRID-RF算法。利用PSO算法計(jì)算收斂速度快、設(shè)置參數(shù)少等特點(diǎn)進(jìn)行輸入特征的篩選,并使用GRID算法進(jìn)行全局參數(shù)的尋優(yōu),兩者組合成一種新的股票趨勢(shì)預(yù)測(cè)算法模型,預(yù)測(cè)未來股票價(jià)格漲跌趨勢(shì)時(shí),其預(yù)測(cè)準(zhǔn)確度有較大提高。但是,在實(shí)驗(yàn)過程中發(fā)現(xiàn):股票數(shù)據(jù)是一種具有時(shí)序性的時(shí)間序列,其前后數(shù)據(jù)之間有一定的聯(lián)系,普通交叉驗(yàn)證并不完全適合對(duì)時(shí)間序列進(jìn)行研究,在一定程度上對(duì)股票預(yù)測(cè)準(zhǔn)確度有一定的影響,因此對(duì)股票時(shí)序性分析將是今后研究的重點(diǎn)。