錢(qián)琦淼,張 朵,王映艨,劉 睿,蔡飛君
(無(wú)錫太湖學(xué)院 會(huì)計(jì)學(xué)院,江蘇 無(wú)錫 214064)
近年來(lái),機(jī)器學(xué)習(xí)在股票價(jià)格預(yù)測(cè)的應(yīng)用中越來(lái)越廣泛,量化投資的形式也迅速占據(jù)著金融市場(chǎng)。徐浩然等人(2020)針對(duì)股票預(yù)測(cè)研究的CNN和LSTM兩種深度學(xué)習(xí)算法做了優(yōu)缺點(diǎn)的闡述分析。CNN的特征選擇具有更好的表現(xiàn),而LSTM則更加關(guān)注時(shí)間序列的相關(guān)性,并且提出將兩種模型融合,各自發(fā)揮優(yōu)勢(shì),得到最優(yōu)的預(yù)測(cè)效果。由于股票的復(fù)雜以及不確定性,所以到現(xiàn)在為止國(guó)內(nèi)針對(duì)單只股票的走勢(shì)預(yù)測(cè)研究較少,大多基于海外市場(chǎng),而另一部分集中于對(duì)算法進(jìn)行優(yōu)化。文章學(xué)習(xí)前人對(duì)個(gè)股的研究思路,嘗試并選用隨機(jī)森林和GBDT兩種機(jī)器學(xué)習(xí)的算法對(duì)寧德時(shí)代的收益率進(jìn)行預(yù)測(cè),通過(guò)不斷的對(duì)參數(shù)調(diào)整,使得模型預(yù)測(cè)效果達(dá)到最優(yōu)。探索兩種機(jī)器學(xué)習(xí)的算法在預(yù)測(cè)未來(lái)股票的收益情況上的優(yōu)劣比較和優(yōu)化,這是文章研究的目的。
機(jī)器學(xué)習(xí)現(xiàn)有的主要研究是在對(duì)數(shù)據(jù)的初步了解和學(xué)習(xí)目的分析的基礎(chǔ)上,選擇合適的學(xué)習(xí)算法進(jìn)行訓(xùn)練,最后利用訓(xùn)練后的模型對(duì)數(shù)據(jù)進(jìn)行分析和預(yù)測(cè)。文章中運(yùn)用到的機(jī)器學(xué)習(xí)算法有隨機(jī)森林和GBDT。
何裕(2014)通過(guò)決策樹(shù)、Logistic回歸模型、神經(jīng)網(wǎng)絡(luò)模型挖掘研究公司財(cái)務(wù)比率指標(biāo)的變化和股價(jià)變化趨勢(shì)的內(nèi)在聯(lián)系,最后組合模型構(gòu)建,證實(shí)了技術(shù)對(duì)于股價(jià)預(yù)測(cè)的可行性與合理性。隨機(jī)森林是對(duì)決策樹(shù)算法的一種改進(jìn),將多個(gè)決策樹(shù)組合,每棵樹(shù)都通過(guò)獨(dú)立提取的樣本建立,采用自上而下的遞歸方法,對(duì)未知數(shù)據(jù)進(jìn)行分類,按照決策樹(shù)上生成時(shí)所采用的分割性逐層往下,直到一個(gè)葉子節(jié)點(diǎn),到葉子節(jié)點(diǎn)處的熵值為零。在股市的應(yīng)用中,首先需要找到合適的分類器來(lái)闡述各因子與下期收益的關(guān)系,要利用歷史數(shù)據(jù),訓(xùn)練分類器。獲得參數(shù)后,再代入各股因子數(shù)據(jù)并分類,從而選取優(yōu)秀股。
胡謙(2016)結(jié)合機(jī)器學(xué)習(xí)、技術(shù)分析研究量化選股策略,首次將GBDT和GB Rank用于量化選股領(lǐng)域,自動(dòng)學(xué)習(xí)出能對(duì)股票未來(lái)表現(xiàn)進(jìn)行排序的模型,證明使用GBDT算法的兩個(gè)策略有較強(qiáng)盈利性。GBDT(Gradient Boosting + Dicision Tree)算法是Boosting迭代融合算法,在傳統(tǒng)機(jī)器學(xué)習(xí)算法中GBDT是最適合真實(shí)分布擬合的幾種算法之一。使用當(dāng)前模型中損失函數(shù)負(fù)梯度方向的值作為殘差的近似值,擬合CART回歸樹(shù)。GBDT將累積所有回歸樹(shù)的結(jié)果,并不斷減小訓(xùn)練過(guò)程中產(chǎn)生的殘差,以實(shí)現(xiàn)將數(shù)據(jù)分類或回歸的算法。
文章在建模分析部分采用 Python語(yǔ)言,本次實(shí)驗(yàn)選取的數(shù)據(jù)分析環(huán)境是Anaconda,采用Web應(yīng)用程序Jupyter Notebook進(jìn)行建模。
由于Tushare返回的絕大部分?jǐn)?shù)據(jù)格式都是pandas DataFrame類型,非常便于數(shù)據(jù)分析和可視化,減輕工作量,所以本次實(shí)驗(yàn)選取的數(shù)據(jù)來(lái)源于Tushare。
寧德時(shí)代(300750.SZ)作為新能源板塊中表現(xiàn)比較突出的股票,文章截取了其2016年1月1日到2021年2月4日的交易數(shù)據(jù),分別是交易日期、開(kāi)盤(pán)價(jià)、最高價(jià)、最低價(jià)、收盤(pán)價(jià)、昨收價(jià)、漲跌額、漲跌幅、成交量和成交額,一共649期。
圖1 部分?jǐn)?shù)據(jù)集描述
文章還對(duì)數(shù)據(jù)寧德時(shí)代的收盤(pán)價(jià)計(jì)算了100天的移動(dòng)平均值,并取每個(gè)滑窗的移動(dòng)平均值。從圖2中,可以看出2019年11月開(kāi)始,寧德時(shí)代股票價(jià)格呈現(xiàn)明顯上升趨勢(shì)。
圖2 移動(dòng)平滑價(jià)格線
由于非平穩(wěn)型的趨勢(shì)線,實(shí)驗(yàn)決定預(yù)測(cè)寧德時(shí)代的收益情況。由于時(shí)間序列存在滯后性,于是在實(shí)驗(yàn)中設(shè)計(jì)了一些股票的滯后項(xiàng)——return-1,return-2,return-3。
文章收集數(shù)據(jù)的周期為2016年1月1日到2021年2月4日,選擇了開(kāi)盤(pán)價(jià)、最高價(jià)、最低價(jià)等11個(gè)影響收益率的因子。文章將2016年1月1日到2020年10月1日之前的數(shù)據(jù)作為訓(xùn)練集,一共561期數(shù)據(jù)。2020年10月1日到2021年2月4日之間的數(shù)據(jù)作為測(cè)試集,一共83期數(shù)據(jù)。
實(shí)驗(yàn)過(guò)程中,文章首先引入決策樹(shù),在隨機(jī)狀態(tài)為10,最大迭代次數(shù)為100,葉子節(jié)點(diǎn)最少樣本數(shù)為70的條件下建立模型,在擬合數(shù)據(jù)后進(jìn)行預(yù)測(cè),訓(xùn)練集的平均絕對(duì)誤差是0.00748,測(cè)試集則是0.00752。從隨機(jī)森林這一模型中,它的隨機(jī)性難以對(duì)模型進(jìn)行解釋,因此猜測(cè)模型容易在噪聲過(guò)多的分類和回歸問(wèn)題中過(guò)擬合。為了驗(yàn)證猜想,實(shí)驗(yàn)嘗試通過(guò)調(diào)參來(lái)提高模型的泛化能力。
在整個(gè)隨機(jī)森林調(diào)參過(guò)程中,要選擇一個(gè)適中的最大迭代次數(shù),故得到了實(shí)驗(yàn)中最佳的弱學(xué)習(xí)器迭代次數(shù)為5。在此基礎(chǔ)上,得到?jīng)Q策樹(shù)最大深度范圍為5,內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)為100。由于內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)還和決策樹(shù)其他的參數(shù)存在關(guān)聯(lián),實(shí)驗(yàn)還需要對(duì)內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)和葉子節(jié)點(diǎn)最少樣本數(shù)一起調(diào)參,得到葉子節(jié)點(diǎn)最少樣本數(shù)30,內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)50。
圖3 部分?jǐn)?shù)據(jù)集描述
基于上述結(jié)果,再對(duì)最大特征數(shù)做調(diào)參,搜索得到最大特征數(shù)為5。經(jīng)過(guò)一系列調(diào)參,用搜索到的最佳參數(shù),得到最終的模型擬合訓(xùn)練集的平均絕對(duì)誤差值為0.005543,測(cè)試集是0.00920,結(jié)果發(fā)現(xiàn)無(wú)顯著變化。
GBDT和傳統(tǒng)的Adaboost有很大的不同,傳統(tǒng)的Adaboost會(huì)使用上一次迭代弱學(xué)習(xí)器的錯(cuò)誤率來(lái)更新訓(xùn)練集的權(quán)重,使迭代繼續(xù)進(jìn)行,而GBDT算法的弱學(xué)習(xí)器(基模型)是CART,故擬合出一棵CART回歸樹(shù),對(duì)實(shí)驗(yàn)過(guò)程中構(gòu)成一個(gè)強(qiáng)學(xué)習(xí)器來(lái)說(shuō)至關(guān)重要。在整體的迭代思維上,GBDT的迭代通常使用前向分布算法,損失函數(shù)的負(fù)梯度在當(dāng)前模型的值作為回歸提升樹(shù)殘差的近似值,在持續(xù)擬合的過(guò)程中,擬合值和目標(biāo)值之間的殘差會(huì)越來(lái)越小,每一棵樹(shù)的預(yù)測(cè)值加起來(lái)就是模型最終的預(yù)測(cè)結(jié)果。所以在本次實(shí)驗(yàn)中一共建立了學(xué)習(xí)器644個(gè),步長(zhǎng)為0.1。最大的弱學(xué)習(xí)器的個(gè)數(shù)為默認(rèn)值100。
最終得到訓(xùn)練集的絕對(duì)誤差為0.000153,測(cè)試集為0.0137。預(yù)測(cè)收益率的標(biāo)準(zhǔn)差為0.03217,絕對(duì)誤差值過(guò)小,模型過(guò)擬合。筆者認(rèn)為應(yīng)當(dāng)通過(guò)調(diào)參來(lái)優(yōu)化模型的泛化能力。為了驗(yàn)證猜想,筆者開(kāi)始進(jìn)行調(diào)參。首先調(diào)參需要選擇一個(gè)較小的步長(zhǎng)來(lái)網(wǎng)格搜索最好的迭代次數(shù),得到最佳弱學(xué)習(xí)器的個(gè)數(shù)為80,樹(shù)的最大深度為9,最小樣本劃分樹(shù)為5,葉子節(jié)點(diǎn)最少樣本數(shù)為10,最大特征數(shù)目為5,而隨機(jī)狀態(tài)為10。修改成最優(yōu)參數(shù)后,得到測(cè)試集的絕對(duì)誤差為0.004412,訓(xùn)練集為0.001657。
從本次實(shí)驗(yàn)來(lái)看,能觀察到隨機(jī)森林這一模型訓(xùn)練速度更快,因?yàn)樘卣髯蛹请S機(jī)選取的,就不用做特征選擇。由于待選特征也是隨機(jī)選取,所以對(duì)特征缺失不敏感,調(diào)參后發(fā)現(xiàn)結(jié)果無(wú)顯著變化甚至比原來(lái)誤差更大,猜測(cè)存在過(guò)擬合現(xiàn)象,從而發(fā)現(xiàn)了隨機(jī)森林的缺點(diǎn),容易在噪聲過(guò)多的分類和回歸問(wèn)題中過(guò)擬合;與單個(gè)決策樹(shù)相比,它的隨機(jī)性讓模型難以進(jìn)行解釋。
相較于隨機(jī)森林模型,GBDT具有以下兩個(gè)優(yōu)點(diǎn):其一,適用面廣,離散的或是連續(xù)的數(shù)據(jù)都可以處理;其二,GBDT模型的調(diào)參過(guò)程比較簡(jiǎn)單,在相對(duì)小的調(diào)參過(guò)程下,GBDT的預(yù)測(cè)結(jié)果更為準(zhǔn)確。GBDT就最終的輸出結(jié)果而言,提升樹(shù)即是整個(gè)迭代過(guò)程生成的回歸樹(shù)的累加或加權(quán)累加,是基于權(quán)值的弱分類器集成,通過(guò)減少模型偏差提高性能。此外該模型對(duì)異常值也比隨機(jī)森林更敏感。
因此,從本次實(shí)驗(yàn)中發(fā)現(xiàn)GBDT精度略高于隨機(jī)森林模型,且在一些調(diào)整后,GBDT模型獲得了較好的預(yù)測(cè)效果。
圖4 訓(xùn)練集比較
圖5 測(cè)試集比較