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