陳可心,黃 剛
(南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210023)
股票預(yù)測研究是金融大數(shù)據(jù)的一個(gè)應(yīng)用研究方向,隨著中國經(jīng)濟(jì)的快速增長和金融市場的不斷擴(kuò)大,越來越多的投資者開始關(guān)注提高投資回報(bào)率并能有效地避免一定風(fēng)險(xiǎn)的方法,其中對股票走勢預(yù)測在商業(yè)和金融領(lǐng)域具有重要的意義。面對股票價(jià)格的漲跌,投資者會(huì)獲得難以預(yù)測的收益甚至虧損,因此預(yù)測股票的走勢,選取值得投資的股票成為投資者關(guān)心的問題。鑒于股票市場的復(fù)雜性、不穩(wěn)定性,預(yù)測股票走勢所需要考慮的變量和信息來源的數(shù)量巨大,預(yù)測股票走勢是一個(gè)非常艱難的任務(wù),如今依舊是各領(lǐng)域重點(diǎn)關(guān)注與討論的對象。傳統(tǒng)的分析方法主要是利用既有的股票數(shù)據(jù)和相關(guān)技術(shù)圖表,結(jié)合投資者自身經(jīng)驗(yàn)對股票走勢進(jìn)行預(yù)測。但是這種方法在當(dāng)今日益龐大且復(fù)雜的股票市場中并不適用。除了效率低、過于依靠人工經(jīng)驗(yàn)以外,還存在股票內(nèi)容信息完整性差、特征數(shù)據(jù)冗余等一系列問題,對股票數(shù)據(jù)的利用率低,效果不佳,難以滿足市場發(fā)展的需要。
隨著機(jī)器學(xué)習(xí)技術(shù)的不斷發(fā)展,越來越多的投資者開始使用機(jī)器學(xué)習(xí)技術(shù)對股票數(shù)據(jù)進(jìn)行分析,從價(jià)格歷史數(shù)據(jù)中學(xué)習(xí)以預(yù)測未來價(jià)格,搭建股票市場預(yù)測模型。常見的機(jī)器學(xué)習(xí)算法有Logistic回歸、遺傳算法、支持向量機(jī)等,并取得了不錯(cuò)的結(jié)果。而隨著神經(jīng)網(wǎng)絡(luò)技術(shù)的興起,通過搭建深度的神經(jīng)網(wǎng)絡(luò)來刻畫股票價(jià)格并預(yù)測股票的走勢,受到了人們的廣泛關(guān)注,一些學(xué)者對這方面也展開了深入的研究[1-2]。NairBB等人[3]基于決策樹構(gòu)建去噪混合股價(jià)預(yù)測模型。該模型首先對股票數(shù)據(jù)的相關(guān)特征進(jìn)行特征提取,然后使用決策樹算法對提取過的特征進(jìn)行特征選擇并使用PCA算法進(jìn)行降維處理,降維后的數(shù)據(jù)輸入到模糊模型中預(yù)測股價(jià)。Ticknor等人[4]構(gòu)建了一個(gè)貝葉斯神經(jīng)網(wǎng)絡(luò)模型,不需要對數(shù)據(jù)進(jìn)行預(yù)處理操作和周期分析,僅把市場價(jià)格和技術(shù)指標(biāo)作為預(yù)測模型的輸入,來預(yù)測未來股票的收盤價(jià)格。蘇治等人[5]構(gòu)建了一種通過遺傳算法對數(shù)據(jù)進(jìn)行降維優(yōu)化的SVM模型,采用量化選股方法分別從短期和中長期對其選股性能和預(yù)測精度進(jìn)行了實(shí)證分析。程昌品等人[6]采用了先對股票價(jià)格序列使用小波分解,分離出非平穩(wěn)時(shí)間序列中的低頻信息和高頻信息,然后對高頻信息構(gòu)建ARIMA模型,對低頻信息使用SVM模型進(jìn)行擬合的方法,得到了較好的結(jié)果。郝知遠(yuǎn)等人[7]基于輿論情報(bào)數(shù)據(jù)并進(jìn)行自然語言處理及挖掘的建模預(yù)測分析的研究工作.其主要方法是依據(jù)最大化收益思想,提出了根據(jù)ROC曲線下的面積AUC值進(jìn)行遺傳參數(shù)尋優(yōu)的支持向量機(jī),解決傳統(tǒng)方法在預(yù)測中可用性不高的問題。韓山杰等人[8]基于谷歌人工智能學(xué)習(xí)系統(tǒng)TensorFlow,構(gòu)建多感知器MLP(multi-layer perceptron)神經(jīng)網(wǎng)絡(luò)模型,用于預(yù)測每日收盤股價(jià)。并就股價(jià)預(yù)測問題將TensorFlow與傳統(tǒng)BP(back propagation)神經(jīng)網(wǎng)絡(luò)進(jìn)行性能對比。Chen K等人[1]分析在加入不同數(shù)量的特征及不同的數(shù)據(jù)預(yù)處理狀況下,使用長短期記憶網(wǎng)絡(luò)LSTM對預(yù)測結(jié)果的影響;與隨機(jī)預(yù)測方法相比LSTM模型提高了股票收益預(yù)測的準(zhǔn)確率。王子玥等人[9]使用LSTM進(jìn)行股票價(jià)格的預(yù)測,提出變步長集成方法及改進(jìn)的MSE損失函數(shù),預(yù)測上能取得較為可觀的提升,但未得出通用的最優(yōu)步長范圍。Minh DL等人[10]提出了一種利用財(cái)經(jīng)新聞和情感詞典預(yù)測股票價(jià)格走向的框架,將股票價(jià)格趨勢預(yù)測的雙流門控循環(huán)單元(TGRU)和在股票新聞和情緒詞典上訓(xùn)練出Stock2Vec嵌入模型相結(jié)合。
不同于現(xiàn)有方法的是,文中提出了一種CStock量化選股模型,利用contextual long short-term memory (CLSTM)以及bi-directional long short-term memory(BiLSTM)結(jié)合股票相關(guān)的新聞信息和已知股價(jià)走勢信息,從而有效地對股票走勢進(jìn)行預(yù)測。
CLSTM和BiLSTM模型起源于循環(huán)神經(jīng)網(wǎng)絡(luò)[11](recurrent neural network,RNN)。RNN是一種節(jié)點(diǎn)定向連接成環(huán)的人工神經(jīng)網(wǎng)絡(luò),可以利用它內(nèi)部的記憶來處理任意時(shí)序的輸入序列。傳統(tǒng)的RNN存在梯度消失和梯度爆炸問題,因此,Hochreiter等人提出了一種基于RNN的優(yōu)化,即長短期記憶網(wǎng)絡(luò)(long short-term memory,LSTM),一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),常被用于處理和預(yù)測時(shí)間序列中間隔和延遲相對較長的重要事件。
LSTM在傳統(tǒng)RNN的基礎(chǔ)上,通過添加門控,使其變成門控RNN,可以有效減少梯度消失(爆炸)等問題。LSTM循環(huán)網(wǎng)絡(luò)除了外部的RNN循環(huán)外,還具有內(nèi)部的“LSTM細(xì)胞”循環(huán)。其門控包括輸入門、遺忘門和輸出門。LSTM網(wǎng)絡(luò)比傳統(tǒng)RNN更適合學(xué)習(xí)長期依賴,即可以減少梯度消失(爆炸)等問題。對于股票這類帶有很強(qiáng)時(shí)間序列特性的數(shù)據(jù),選擇循環(huán)神經(jīng)網(wǎng)絡(luò)可以更好地結(jié)合歷史信息。
BiLSTM則是將兩個(gè)不同方向的LSTM結(jié)合,形成雙向循環(huán)神經(jīng)網(wǎng)絡(luò),以同時(shí)提取數(shù)據(jù)的正、反向信息。而相較于LSTM,BiLSTM能同時(shí)利用兩個(gè)方向上的時(shí)序信息,更容易挖掘出潛在模式。CLSTM是Shalini Ghosh等人在2016年提出的一種基于話題的LSTM。在LSTM的基礎(chǔ)上,CLSTM考慮了不同的話題下,輸入門、輸出門、遺忘門的權(quán)重狀態(tài)。使得LSTM關(guān)注到話題之上,給LSTM一種指導(dǎo)。
現(xiàn)有預(yù)測股票市場的模型主要是利用了股票市場中的交易數(shù)據(jù)。而影響股票市場波動(dòng)的因素有很多,比如與股票相關(guān)的財(cái)經(jīng)新聞或政治事件等,這些股票市場數(shù)據(jù)以外的信息都會(huì)影響到市場的波動(dòng)。隨著文本挖掘技術(shù)[12]的出現(xiàn),使得獲取相關(guān)文本數(shù)據(jù)來預(yù)測股票市場走勢成為現(xiàn)實(shí)。
文中運(yùn)用了文本挖掘和深度學(xué)習(xí)的相關(guān)知識(shí),結(jié)合嵌入式詞向量技術(shù)[13],采用Bi-LSTM雙向循環(huán)神經(jīng)網(wǎng)絡(luò)、CLSTM和CNN卷積神經(jīng)網(wǎng)絡(luò)對和股票有關(guān)的時(shí)序數(shù)據(jù)、文本數(shù)據(jù)進(jìn)行分析,挖掘數(shù)據(jù)的深層次特征,構(gòu)建選股模型。
文中對股票的數(shù)據(jù)分為數(shù)值型數(shù)據(jù)和文本型數(shù)據(jù)兩部分,各部分使用不同的網(wǎng)絡(luò)結(jié)構(gòu)。其中數(shù)值型數(shù)據(jù)包括開盤價(jià),最高價(jià),最低價(jià),收盤價(jià),變化率。文本型數(shù)據(jù)包括股票名稱,股票相關(guān)新聞。
文中使用了一種BiLSTM和CLSTM相結(jié)合的模型,對股票走勢進(jìn)行預(yù)測。將文本型數(shù)據(jù)作為CLSTM的Contextual信息輸入。同時(shí),將數(shù)值型數(shù)據(jù)作為BiLSTM的輸入數(shù)據(jù)。
1.1.1 字符型數(shù)據(jù)
(1)新聞信息提取。
股票相關(guān)新聞信息描述了該上市公司的運(yùn)營狀態(tài)。因?yàn)樾侣勑畔⑴c股票走勢存在較大相關(guān)性,人們常常根據(jù)新聞信息對股票走勢進(jìn)行預(yù)測。為了對股票相關(guān)新聞信息進(jìn)行編碼,對股票相關(guān)的新聞信息通過tf-idf[14]的方法,提取出相關(guān)關(guān)鍵詞集合K。使用Embedding的方法,將一個(gè)大小為n的集合K中的每一個(gè)詞wi映射為對應(yīng)的詞向量wi。對于向量集合w,使用全連接神經(jīng)網(wǎng)絡(luò),對其信息進(jìn)行提取。
(1)
其中,a為每個(gè)詞向量的權(quán)重大小,a屬于Rn,b為偏置向量的權(quán)重大小,b屬于Rn,new為新聞信息提取結(jié)果向量。
(2)股票信息。
對每個(gè)股票進(jìn)行Embedding,將其轉(zhuǎn)化成對應(yīng)的股票向量S。對字符型數(shù)據(jù)通過Embedding的方法,使得其變?yōu)橄鄳?yīng)的詞向量vc。將生成的詞向量送入CLSTM,將股票名稱(Name)作為Topic,對股票新聞關(guān)鍵詞Keys進(jìn)行處理,特別的,這里使用CLSTM的輸出矩陣作為輸出,得到相應(yīng)的隱含層矩陣信息hc。
hc=CLSTM(Embedding(Name),Embedding(Keys))
(2)
將CLSTM的輸出矩陣作為卷積層Conv1D的輸入,然后使用最大池化層Maxpool1D對卷積結(jié)果進(jìn)行池化操作。采用最大池化的方法提取特征值的最大特征來代替整個(gè)局部特征并大幅降低特征向量的維度。處理后得到特征向量ha。
1.1.2 數(shù)值型數(shù)據(jù)
文中對數(shù)值型數(shù)據(jù)x使用BiLSTM進(jìn)行處理,使用BiLSTM輸出矩陣的最后一維作為其輸出,得到相應(yīng)的隱含層信息hi。
1.1.3 全連接層
通過對數(shù)值型數(shù)據(jù)得到的輸出hi和字符型數(shù)據(jù)得到的輸出ha進(jìn)行連接,通過全連接層進(jìn)行計(jì)算,得到輸出fc。
fc=Concat(hi,fc)*Wfc+bfc
(3)
其中,Wfc為全連接層的權(quán)重矩陣,bfc為偏置向量。
1.1.4 Softmax分類器
通過對全連接層的數(shù)據(jù)進(jìn)行分析,得到分類為股票上升的概率和股票下降的概率P:
P=Softmax(fc)
(4)
即,完成分類。
網(wǎng)絡(luò)模型如圖1所示。該模型的輸入層包括數(shù)據(jù)信息和新聞信息兩大部分,模型的主體部分首先使用BiLSTM對數(shù)據(jù)信息方面的特征分別進(jìn)行處理,將文本型數(shù)據(jù)作為CLSTM的Contextual信息輸入,而后將輸出矩陣結(jié)合CNN再次處理。最后使用多層全連接神經(jīng)網(wǎng)絡(luò)對所有數(shù)據(jù)進(jìn)行處理。
圖1 網(wǎng)絡(luò)模型
通過神經(jīng)網(wǎng)絡(luò)預(yù)測模型的輸出,可以得到每個(gè)股票上升的概率P。通過對P進(jìn)行排序,選出最高概率的10只股票S1,S2,…,S10,通過對其概率進(jìn)行求和。
(5)
然后按照如下公式進(jìn)行選股,對每股的投入Inv(Si)如下:
Inv(Si)=P(Si)/Sum
(6)
則每次投資的收益率為:
(7)
其中,G(Si)表示Si股當(dāng)天的實(shí)際價(jià)格變化率。
文中設(shè)計(jì)的原型系統(tǒng)主要包括四層,首先是實(shí)時(shí)數(shù)據(jù)獲取層,接著是數(shù)據(jù)存儲(chǔ)層,接著是數(shù)據(jù)分析層,最后是輸出層。原型系統(tǒng)結(jié)構(gòu)如圖2所示。
圖2 原型系統(tǒng)結(jié)構(gòu)
1.4.1 數(shù)據(jù)獲取層
網(wǎng)絡(luò)爬蟲(web crawler),又稱為網(wǎng)絡(luò)蜘蛛(web spider)或web信息采集器,是一種按照一定規(guī)則,自動(dòng)抓取或下載網(wǎng)絡(luò)信息的計(jì)算機(jī)程序或自動(dòng)化腳本,是目前搜索引擎的重要組成部分。狹義上理解:利用標(biāo)準(zhǔn)的HTTP協(xié)議,根據(jù)網(wǎng)絡(luò)超鏈接(如https://www.baidu.com/)和web文檔檢索的方法(如深度優(yōu)先)遍歷萬維網(wǎng)信息空間的軟件程序。功能上理解:確定待爬的URL隊(duì)列,獲取每個(gè)URL對應(yīng)的網(wǎng)頁內(nèi)容(如HTML/JSON),解析網(wǎng)頁內(nèi)容,并存儲(chǔ)對應(yīng)的數(shù)據(jù)。
網(wǎng)絡(luò)爬蟲按照系統(tǒng)架構(gòu)和實(shí)現(xiàn)技術(shù),大致可以分為以下幾種類型:通用網(wǎng)絡(luò)爬蟲(general purpose web crawler)、聚焦網(wǎng)絡(luò)爬蟲(focused web crawler)、增量式網(wǎng)絡(luò)爬蟲(incremental web crawler)、深層網(wǎng)絡(luò)爬蟲(deep web crawler)。實(shí)際的網(wǎng)絡(luò)爬蟲系統(tǒng)通常是幾種爬蟲技術(shù)相結(jié)合實(shí)現(xiàn)的。
通用網(wǎng)絡(luò)爬蟲:爬行對象從一些種子URL擴(kuò)充到整個(gè)web,主要為門戶站點(diǎn)搜索引擎和大型web服務(wù)提供商采集數(shù)據(jù)。通用網(wǎng)絡(luò)爬蟲的爬取范圍和數(shù)量巨大,對于爬行速度和存儲(chǔ)空間要求較高,對于爬行頁面的順序要求較低,通常采用并行工作方式,有較強(qiáng)的應(yīng)用價(jià)值。
聚焦網(wǎng)絡(luò)爬蟲,又稱為主題網(wǎng)絡(luò)爬蟲:是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)的頁面。和通用爬蟲相比,聚焦爬蟲只需要爬行與主題相關(guān)的頁面,極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁面也由于數(shù)量少而更新快,可以很好地滿足一些特定人群對特定領(lǐng)域信息的需求。
文中設(shè)計(jì)的原型系統(tǒng)為聚焦網(wǎng)絡(luò)爬蟲,對華爾街見聞快訊欄介紹的數(shù)據(jù)進(jìn)行爬取。
1.4.2 數(shù)據(jù)存儲(chǔ)層
系統(tǒng)實(shí)時(shí)地通過網(wǎng)絡(luò)爬蟲將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中,以便于模型對于數(shù)據(jù)的分析。同時(shí)經(jīng)過一段時(shí)間對數(shù)據(jù)進(jìn)行清理,防止數(shù)據(jù)庫出現(xiàn)內(nèi)存不夠的情況。
1.4.3 數(shù)據(jù)分析層
實(shí)時(shí)地將數(shù)據(jù)輸入到已經(jīng)訓(xùn)練好的模型當(dāng)中,本原型系統(tǒng)采用的是離線模型,將已經(jīng)訓(xùn)練好的模型直接用來分析數(shù)據(jù)。
1.4.4 輸出層
輸出模型最終分析的結(jié)果,對用戶進(jìn)行展示,引導(dǎo)用戶選擇模型分析得出的最優(yōu)股票。
文中利用網(wǎng)絡(luò)爬蟲來獲取數(shù)據(jù)。爬取了華爾街見聞快訊欄目中2017年1月1日至2018年12月31日的新聞標(biāo)題及相應(yīng)的發(fā)布時(shí)間作為財(cái)經(jīng)新聞的初始樣本數(shù)據(jù),同時(shí)從Wind數(shù)據(jù)庫中獲取了2017年1月4日至2018年12月29日中交易日的交易數(shù)據(jù),包括開盤價(jià)、最高價(jià)、最低價(jià)、交易量、漲跌幅。
實(shí)驗(yàn)使用美股數(shù)據(jù)作為數(shù)據(jù)集合,取100,100,*分別作為測試集,驗(yàn)證集,訓(xùn)練集的大小,使用train-development-test模型進(jìn)行訓(xùn)練。
實(shí)驗(yàn)運(yùn)行在Ubuntu 16.04操作系統(tǒng)上,使用Tensorflow,Python3等工具,設(shè)定網(wǎng)絡(luò)BiLSTM和CLSTM的層數(shù)為2,隱含層大小為64(雙向128),使用交叉熵作為損失函數(shù)。
文中使用了數(shù)值型數(shù)據(jù)和文本型數(shù)據(jù),下面將分開討論:
2.3.1 數(shù)值型數(shù)據(jù)
文中使用的數(shù)值型數(shù)據(jù)包括每股每日的開盤價(jià)、最高價(jià)、最低價(jià)、收盤價(jià)和價(jià)格變動(dòng)率,為了簡化模型,使用了近50天內(nèi)的股票數(shù)據(jù)作為基礎(chǔ)數(shù)據(jù),用于預(yù)測股票走勢。
2.3.2 文本型數(shù)據(jù)
文中希望對股票及其相應(yīng)的新聞進(jìn)行提取,從新聞中獲取股票可能的走勢信息,如國家政策支持可能導(dǎo)致股票上升等。由于每條新聞過長,因而采用了Tf-idf(term frequency-inverse document frequency),一種用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù),對每條新聞進(jìn)行處理,提取出新聞相關(guān)的關(guān)鍵詞作為輸入。為了和數(shù)值型數(shù)據(jù)對齊,同樣采用了近50天內(nèi)的新聞數(shù)據(jù)同時(shí)結(jié)合相應(yīng)的股票注冊名信息作為輸入,用于預(yù)測股票走勢。
通過對上述數(shù)據(jù)進(jìn)行訓(xùn)練,預(yù)測該日股票的走勢。在嘗試了擬合股票走勢和分類股票走勢等方法之后,采用分類方法進(jìn)行實(shí)驗(yàn),即對股票走勢進(jìn)行二分類(上升/下降)來進(jìn)行預(yù)測。實(shí)驗(yàn)表明,將問題簡化為分類問題比擬合股票走勢準(zhǔn)確率更高。
準(zhǔn)確率:實(shí)驗(yàn)在測試集上預(yù)測的準(zhǔn)確率Acc(每股上升與否)為:
Acc=0.523 2
(8)
實(shí)驗(yàn)采用上述選股策略對測試集進(jìn)行回測,選擇連續(xù)的一百天,并除去回測當(dāng)天數(shù)據(jù)小于100股的情況,進(jìn)行測試,使用收益率作為衡量指標(biāo),其結(jié)果如圖3和圖4所示。
每日收益率:圖3表示每次投資可獲得的收益率和天數(shù)的關(guān)系,其中橫坐標(biāo)表示天數(shù),縱坐標(biāo)表示收益率,點(diǎn)為每次投資的收益率,虛線為0坐標(biāo),其中收益大于0.00的天數(shù)為 Gdays,統(tǒng)計(jì)可得:
圖3 每日收益率
Gdays=0.704 1
(9)
結(jié)果表明每天收益大于0的實(shí)際概率接近0.704 1。
總收益率:圖4表示假設(shè)每天都采取模型給出的投資策略(這里忽略了手續(xù)費(fèi)等支出),其收益和時(shí)間的關(guān)系,其中橫坐標(biāo)表示天數(shù),縱坐標(biāo)表示相比于第0天的收益率,其中最高點(diǎn)的坐標(biāo)為(98,0.284 9),即如果用此模型進(jìn)行選股,那么在98天時(shí),可以累計(jì)獲得相當(dāng)于本金28.49%的收益。
圖4 總收益率
文中提出了一種基于LSTM的神經(jīng)網(wǎng)絡(luò)模型,用于預(yù)測股票走勢,同時(shí)給出了一種相應(yīng)的選股策略。實(shí)驗(yàn)表明,考慮了數(shù)值型數(shù)據(jù)(開盤價(jià),最高價(jià),最低價(jià),收盤價(jià),價(jià)格變動(dòng))和字符型數(shù)據(jù)(股票名,新聞關(guān)鍵詞)之后,可以獲得較為不錯(cuò)的收益。雖然CStock對于股票走勢預(yù)測是可行的,但是現(xiàn)實(shí)生活中還有很多影響股市的因素沒有加入到實(shí)驗(yàn)的特征值中,如:股民情緒。下一步可以通過抓取投資者在Twitter上的討論信息等的股評(píng),利用NLP進(jìn)行分析,這樣可能會(huì)得到更加精準(zhǔn)的預(yù)測結(jié)果。在投資頻率方面,將本模型運(yùn)用于實(shí)際中時(shí),交易手續(xù)費(fèi)問題不容忽視,需要對預(yù)測的模型進(jìn)行輸出大小的修改,從而減少手續(xù)費(fèi)的消耗。