倪麗萍 馬馳宇 劉小軍
(合肥工業(yè)大學(xué)管理學(xué)院 安徽 合肥 230009)(合肥工業(yè)大學(xué)過程優(yōu)化與智能決策教育部重點(diǎn)實(shí)驗(yàn)室 安徽 合肥 230009)
社會化信息對股市波動影響分析—基于SparkR平臺的實(shí)現(xiàn)
倪麗萍 馬馳宇 劉小軍
(合肥工業(yè)大學(xué)管理學(xué)院 安徽 合肥 230009)(合肥工業(yè)大學(xué)過程優(yōu)化與智能決策教育部重點(diǎn)實(shí)驗(yàn)室 安徽 合肥 230009)
社會信息化的飛速發(fā)展使得社會化信息日益豐富。這些信息會對股市波動產(chǎn)生一定影響,然而這些信息數(shù)量巨大且多屬于非結(jié)構(gòu)化數(shù)據(jù),使得分析社會化信息對市場的影響具有一定的難度。嘗試通過分布式計(jì)算技術(shù)來解決這個(gè)問題,并從信息量和信息情感兩個(gè)方面考察社會化信息對股市的影響。通過搭建SparkR平臺,首先討論如何利用該平臺解決大數(shù)據(jù)環(huán)境下股市社會化信息的特征選擇以及情感分類問題,其次對比了信息量和信息情感對市場的影響情況,說明信息情感變化更能準(zhǔn)確說明市場的波動變化情況。為進(jìn)一步驗(yàn)證方案的可行性,定義了不同的情感計(jì)量方式并對比了不同方案的優(yōu)缺點(diǎn),進(jìn)而給出分析社會化信息對股市波動影響的綜合解決方案,并且通過實(shí)驗(yàn)驗(yàn)證了該方案的有效性。
SparkR 特征選擇 分布式計(jì)算 文本挖掘 情感分類
近年來隨著社會信息化的飛速發(fā)展,金融門戶網(wǎng)站日益繁榮,微博、論壇日趨活躍,金融行業(yè)產(chǎn)生了海量數(shù)據(jù),尤其是海量的非結(jié)構(gòu)化數(shù)據(jù)。研究表明這些非結(jié)構(gòu)化文本數(shù)據(jù)中包含的評論、情感因子等信息對金融行業(yè)產(chǎn)生著巨大的影響,所以金融文本數(shù)據(jù)分析日益興起和被重視,國內(nèi)外學(xué)者在金融文本數(shù)據(jù)分析方面也取得了一系列成果。
國外,研究者Wuthrich等人開發(fā)了一個(gè)基于門戶網(wǎng)站上隔夜新聞的股票指數(shù)預(yù)測系統(tǒng),根據(jù)該系統(tǒng)的建議進(jìn)行交易,平均收益率達(dá)到5.2%。Lavrenko等人在2000年左右開發(fā)了基于雅虎財(cái)經(jīng)網(wǎng)站公布的新聞文章的Enalyst系統(tǒng)來預(yù)測美國股市的價(jià)格趨勢,利用該系統(tǒng)平均每次交易的收益為23個(gè)基點(diǎn)[3]。Zhang等人研究了Twitter上金融信息對美國三大股指的影響[4]。Gilbert等利用博客數(shù)據(jù)構(gòu)建了焦慮情緒指數(shù)并證明該指數(shù)能夠反向預(yù)測標(biāo)普500指數(shù)走勢[5]。Bollen等基于Twitter數(shù)據(jù)發(fā)現(xiàn)情緒可以預(yù)測未來2~6天的道瓊斯指數(shù)走勢[6]。Peramunetilleke等人將文本分類技術(shù)應(yīng)用到外匯市場短期走勢中,得到了較好的結(jié)果[7]。相較于國外,國內(nèi)關(guān)于金融文本數(shù)據(jù)分析的研究尚處于起步階段,一些學(xué)者將文本分析技術(shù)用于金融市場。黃潤鵬等將微博中的信息用于上證指數(shù)的預(yù)測[8]。賴凱聲等討論了微博情緒因子和上證指數(shù)的相關(guān)性走勢圖[9]。朱浩然等討論了金融微博中的情感分析問題,并進(jìn)而將其應(yīng)用于市場預(yù)測中[10]。此外,還有一些學(xué)者討論了特定文本信息源下金融文本分析技術(shù),例如,王巖等研究了面向金融領(lǐng)域論壇的話題檢測和熱度評價(jià)方法[11]。
上述研究雖然促進(jìn)了文本金融數(shù)據(jù)分析方法和應(yīng)用的發(fā)展,但是網(wǎng)絡(luò)金融文本數(shù)據(jù)具有數(shù)據(jù)來源廣泛、結(jié)構(gòu)復(fù)雜多樣和數(shù)據(jù)量大的特點(diǎn),上述研究沒有考慮到處理的時(shí)效性。因此要求尋找新的解決方案以適應(yīng)大數(shù)據(jù)的挑戰(zhàn)。
本文將分布式計(jì)算技術(shù)引入到文本金融數(shù)據(jù)分析中。構(gòu)建了SparkR平臺既可以利用R語言的便利性和易于操作性,也可以利用Spark平臺進(jìn)行分布式計(jì)算,解決文本金融數(shù)據(jù)分析中的大數(shù)據(jù)挑戰(zhàn)。
基于上述,本文以SparkR為基礎(chǔ)討論基于SparkR平臺下社會信息量和社會信息情感態(tài)度對市場的影響情況。
本文分別考察新聞信息量和新聞信息情感對股價(jià)波動的影響,為了完成這一任務(wù)需要解決如下兩個(gè)問題:(1) 進(jìn)行特征選擇來挑選出關(guān)鍵信息以便通過情感分類算法區(qū)分社會化信息的情感態(tài)度;(2) 對社會化信息進(jìn)行情感分類區(qū)分其情感態(tài)度后,量化情感態(tài)度并考察其對股市波動的影響。為了解決這兩個(gè)問題,本文設(shè)計(jì)了三個(gè)模型從不同的角度予以探討。所有模型以上證50股指為研究對象,因此選取上證50所包含的50只股票在2013年-2014年內(nèi)的所有要聞。選取方法為以50只股票所屬企業(yè)的主題名稱作為關(guān)鍵詞,在每個(gè)網(wǎng)站進(jìn)行搜索,抓取所有相關(guān)新聞網(wǎng)頁。通過爬蟲函數(shù)抓取和訊財(cái)經(jīng)、新浪財(cái)經(jīng)、騰訊財(cái)經(jīng)三個(gè)網(wǎng)站的股票要聞板塊新聞,建立模型分析互聯(lián)網(wǎng)股票新聞與上證50股指波動的相關(guān)性。
模型一 探討新聞信息量對股價(jià)波動的影響。
定義1 新聞信息量。新聞信息量是指在一段時(shí)間內(nèi)一家企業(yè)發(fā)生的相關(guān)新聞總量。
計(jì)算新聞信息量時(shí),將以該企業(yè)主題名搜索的相關(guān)網(wǎng)頁歸屬于該企業(yè)新聞,賦予權(quán)重α,對以其他企業(yè)主題名搜索卻包含該企業(yè)主題名稱的新聞賦予權(quán)重β,對每一家企業(yè)求取加權(quán)的新聞和,得到每一家企業(yè)的新聞信息量。具體公式如下:
Ii=αPi+βNi
(1)
其中0<β<α<1,Pi為歸屬于該企業(yè)的新聞數(shù)量,Ni為包含該企業(yè)主體名但不屬于該企業(yè)的新聞數(shù)量。最后通過上證50指數(shù)的派許加權(quán)方式得到上證50的新聞信息量。模型一沒有進(jìn)行特征篩選和情感態(tài)度分類,僅僅考察了社會化信息數(shù)量上如何影響股市波動。
模型二 探討新聞情感信息量對股價(jià)波動的影響。
定義2 新聞情感信息量。新聞情感信息量是指在一段時(shí)間內(nèi)一家企業(yè)發(fā)生的正向新聞與負(fù)向新聞數(shù)量之差。
即使是要聞板塊的新聞也不會全部對股價(jià)波動有較大影響,并且新聞對股價(jià)的影響有正負(fù)之分,所以需要對新聞進(jìn)行分類以區(qū)分新聞對股價(jià)的不同影響。因此模型二引入新聞情感來區(qū)分新聞,并分別統(tǒng)計(jì)同一段時(shí)間段中正向新聞和負(fù)向新聞的數(shù)量,進(jìn)而考察新聞情感信息量對股價(jià)的影響。
在模型二中,本文依然采用模型一的新聞歸屬與賦權(quán)方式。為了篩選出對股價(jià)有影響的新聞并對這些新聞進(jìn)行情感分類,本文通過K-means聚類獲取所需的特征詞和訓(xùn)練集。為了提高聚類準(zhǔn)確率并充分提取分類極性詞,本文選取周股價(jià)漲跌幅在5%以上的企業(yè)新聞文本作為聚類訓(xùn)練集,去除訓(xùn)練集包含的一些金融常用詞、停用詞后,將新聞聚為正反兩類。分別選取包含文本數(shù)較多的正類和負(fù)類作為分類訓(xùn)練集,計(jì)算極性詞頻后將正反新聞都高頻出現(xiàn)的極性詞刪除作為特征詞候選集。為了進(jìn)一步提取最終的特征詞,本文利用如下方法實(shí)現(xiàn),實(shí)現(xiàn)過程分為如下三步:
Step1 設(shè)訓(xùn)練樣本初始特征集為φ,按詞頻從大到小依次從候選詞集中選擇一個(gè)特征詞添加到特征集中,并對訓(xùn)練樣本進(jìn)行訓(xùn)練得到初步模型。
Step2 將分類后的新聞與之前的聚類結(jié)果做比較,人工標(biāo)注分類與聚類不同的新聞樣本,再針對性地對特征詞進(jìn)行調(diào)整。調(diào)整的過程為如果人工標(biāo)注結(jié)果與聚類結(jié)果一致,則按照特征集提取關(guān)鍵詞,從特征集中去除在相應(yīng)反類中詞頻最高的關(guān)鍵詞。如果人工標(biāo)注結(jié)果與分類器結(jié)果一致,則將該篇文章從訓(xùn)練集中刪除,調(diào)整相應(yīng)的詞頻,完成整個(gè)調(diào)整過程。
Step3 重復(fù)Step1、Step2,直到準(zhǔn)確率保持穩(wěn)定后停止訓(xùn)練,得到最終模型。最后利用訓(xùn)練好的分類器對新聞分類,確定新聞的情感,并將一些由于信息混雜或情感信息不充分導(dǎo)致無法分類的新聞作為對股價(jià)影響不明顯的新聞去除。
通過上述步驟可求得每一家企業(yè)的新聞情感信息量,具體公式為:
Ii=α(Li-Ji)+β(Mi-Ki)
(2)
其中Li為歸屬于該企業(yè)新聞中正向情感新聞數(shù)量,Ji為歸屬于該企業(yè)的新聞中負(fù)向情感新聞數(shù)量,Mi為包含該企業(yè)主體名但不屬于該企業(yè)的新聞中正向情感新聞數(shù)量,Ki為包含該企業(yè)主體名但不屬于該企業(yè)的新聞中負(fù)向情感新聞數(shù)量。最后通過上證50指數(shù)的派許加權(quán)方式得到上證50的新聞情感信息量。流程如圖1所示。
圖1 新聞情感信息量模型流程圖
模型二通過聚類算法來進(jìn)行特征選擇。通過分類算法進(jìn)行情感分類。本文中通過有偏的選擇訓(xùn)練樣本來提高聚類的準(zhǔn)確性。本文認(rèn)為聚類的結(jié)果包含兩種,一種是需要的包含特殊信息的新聞,這一類新聞對股市的影響較大,通過分詞可以獲取所需的主要特征,即解決特征選擇問題。另一種是包含信息不充分、對股市影響較小或不明確的新聞,這一類新聞予以刪除。通過樣本有偏選擇和聚類算法,可以充分利用大量新聞準(zhǔn)確快速提取關(guān)鍵信息,以適應(yīng)數(shù)據(jù)量爆炸和快速響應(yīng)的現(xiàn)實(shí)需求。
模型三 探討新聞情感詞強(qiáng)度對股價(jià)波動的影響
定義3 新聞情感詞強(qiáng)度。新聞情感詞強(qiáng)度是指在一段時(shí)間內(nèi)一家企業(yè)發(fā)生新聞中正向情感詞與負(fù)向情感詞數(shù)量之差。
模型二通過分類算法求得新聞的情感,還可以利用情感詞的數(shù)量來表示新聞的情感。為了研究的充分性,模型三引入新聞情感詞強(qiáng)度。本文依然采用模型一的新聞歸屬與賦權(quán)方式,引入路透社金融詞典并對其進(jìn)行人工修正選出其中的情感詞作為情感詞詞典。分別求取每篇新聞中包含的正負(fù)情感詞數(shù)量,求得每家企業(yè)的新聞情感詞強(qiáng)度,公式為:
Ii=α(Wi-Xi)+β(Yi-Zi)
(3)
其中Wi為歸屬于該企業(yè)的新聞中正向情感詞數(shù)量,Xi為歸屬于該企業(yè)的新聞中負(fù)向情感詞數(shù)量,Yi為包含該企業(yè)主體名但不屬于該企業(yè)的新聞中正向情感詞數(shù)量,Zi為包含該企業(yè)主體名但不屬于該企業(yè)的新聞中負(fù)向情感詞數(shù)量。最后通過上證50指數(shù)的派許加權(quán)方式得到上證50的新聞情感詞強(qiáng)度。模型三通過情感詞典的方式進(jìn)行特征選擇,并通過計(jì)算詞頻來進(jìn)行情感態(tài)度區(qū)分。這樣區(qū)分相對較為簡單,也可以得到情感結(jié)果。
由于新聞文本數(shù)眾多以及文本分詞后形成的詞頻矩陣屬于高維稀疏矩陣,所以相應(yīng)的聚類、分類算法需要在分布式平臺下實(shí)現(xiàn),以適應(yīng)大數(shù)據(jù)金融分析的及時(shí)性與準(zhǔn)確性要求。下面探討這些算法在SparkR平臺下的實(shí)現(xiàn)。
SparkR是AMPLab發(fā)布的一個(gè)R的開發(fā)包,其將Spark和R結(jié)合,其既具有Spark的數(shù)據(jù)結(jié)構(gòu)和應(yīng)用架構(gòu),又利用了R語言完成數(shù)據(jù)分析的便利性,所以十分適合完成金融大數(shù)據(jù)分析任務(wù)。該R包為ApacheSpark的R輕量前端,提供了RRDD的API,用戶可以在集群上通過Rshell交互性的運(yùn)行job。SparkR提供了PipelinedRDD優(yōu)化,可以將Execute交由RVM計(jì)算的內(nèi)容統(tǒng)一處理,然后統(tǒng)一將計(jì)算結(jié)果返回給Execute,而不用兩者之間頻繁漸次通信,從而大大地節(jié)省了傳輸和序列化反序列化的時(shí)間。最后,SparkR還支持常見的閉包功能,用戶定義的函數(shù)中所引用的變量會自動被發(fā)送到集群中其他機(jī)器上。[1]SparkR將R語言結(jié)合SparkContext通過JNI接口來啟動一個(gè)JavaSparkContext,然后由JavaSparkContext連接到Worker上的Executor。SparkR運(yùn)行原理如圖2所示。
圖2 SparkR運(yùn)行原理
由于可以很方便地利用該包實(shí)現(xiàn)相應(yīng)的金融大數(shù)據(jù)分析所需的爬蟲、聚類、分類算法,根據(jù)上節(jié)描述,在聚類算法上本文選取的是k-means算法,在分類算法上選擇的是隨進(jìn)森林方法。具體的實(shí)現(xiàn)算法描述如下。
其中Step2完成選取特征詞的任務(wù),并在Step3利用reduceByKey算子得出特征詞矩陣。
2.1 文本數(shù)據(jù)預(yù)處理
在獲取新聞?wù)Z料庫后,需要對新聞進(jìn)行文本預(yù)處理。而文本預(yù)處理的工作核心為將中文文檔進(jìn)行分詞處理,并形成特征詞詞頻矩陣。分詞工具采取的是R提供的Rwordseg包。文本預(yù)處理任務(wù)分三個(gè)階段完成。第一階段,將爬蟲抓取后的文本分布式存儲到每個(gè)節(jié)點(diǎn)上,利用分詞工具分布式對所有文本進(jìn)行分詞,形成文本的詞頻矩陣。第二階段將自定義的有序金融詞典特征詞初始化為RDD并將之廣播,通過進(jìn)行字符匹配并記錄下匹配到的特征詞序號作為key值,value值為1。第三階段利用reduceBeKey算子對每篇文檔進(jìn)行處理,將key值相同的value值相加,并加上新聞標(biāo)號,則得到相應(yīng)文檔詞頻矩陣的三元組記為(i,key,value),其中i表示這是第i篇文檔,key為關(guān)鍵詞在金融詞典的序號,value為該特征詞在該文檔出現(xiàn)的次數(shù)。相關(guān)步驟如算法1所示。
算法1 文本預(yù)處理算法
輸入:待分詞的新聞文本
輸出:文本詞頻矩陣
Step1 將新聞文本初始化為RDD,并將之利用分詞函數(shù)分詞。
Step2 定義函數(shù)filter=function(x){if(x ==dictRDD[i]) return c(i,1)},lapply(fileRDD,fun=filter)結(jié)果記為featureRDD,為c(key,value)類型,key為i,value為1。
Step3 調(diào)用reduceByKey(featureRDD, “+”,2L),結(jié)果為每篇文檔每個(gè)非0詞頻關(guān)鍵詞的詞頻。
其中Step2完成選取特征詞的任務(wù),并在Step3利用reduceByKey算子得出特征詞矩陣。
2.2 CART算法和隨機(jī)森林算法在SparkR上的分布式實(shí)現(xiàn)
CART算法和隨機(jī)森林算法主要用于分類。其中CART算法由Breiman等人在1984年提出,是應(yīng)用廣泛的決策樹學(xué)習(xí)方法。CART假設(shè)決策樹是二叉樹,內(nèi)部節(jié)點(diǎn)特征的取值為“是”和“否”,是一種給定輸入樣本條件下輸出預(yù)測值條件概率分布的學(xué)習(xí)方法。該方法由生成樹和剪枝兩部分構(gòu)成,其中生成樹是遞歸構(gòu)建二叉決策樹的過程。CART方法采用基尼指數(shù)來進(jìn)行分裂特征的選擇[13]。
定義4(基尼指數(shù))。分類問題中,假設(shè)有K個(gè)類,樣本點(diǎn)屬于第K類的概率為Pk,則概率分布的基尼指數(shù)定義為:
(4)
對于二類分類問題,若樣本點(diǎn)屬于第1個(gè)類的概率是p,則概率分布的基尼指數(shù)為:
Gini(p)=2p(1-p)
(5)
對于給定的樣本集合D,其基尼指數(shù)為:
(6)
式中,Ck是D中屬于第k類的樣本子集,K是類的個(gè)數(shù)。如果樣本集合D根據(jù)特征A是否取某一可能值a被分割成D1和D2兩部分,即:
(7)
則在特征A的條件下,集合D的基尼指數(shù)定義為:
(8)
隨機(jī)森林算法是一種集成分類算法,最早由LeoBreiman和AdeleCutler提出。隨機(jī)森林是一個(gè)集成多個(gè)無剪枝CART樹的分類器。其輸出結(jié)果的類別取決于個(gè)別樹輸出的類別的眾數(shù)而定。其中每棵樹使用的訓(xùn)練集是從總的訓(xùn)練集中采用又放回抽樣抽取出來的。這意味著總的訓(xùn)練集中的有些樣本可能多次出現(xiàn)在一棵樹的訓(xùn)練集中,也可能從未出現(xiàn)在一棵樹的訓(xùn)練集中。在訓(xùn)練每棵樹的節(jié)點(diǎn)時(shí),使用的特征是從所有特征中按照一定比例隨機(jī)地?zé)o放回抽取的。根據(jù)LeoBreiman的建議,假設(shè)總的特征數(shù)量為M,這個(gè)比例可以是sqrt(M)、1/2sqrt(M)和2sqrt(M)。下面本文將分別討論如何在SparkR上實(shí)現(xiàn)CART樹和隨機(jī)森林算法。
2.2.1CART樹的SparkR分布式生成算法
假定所有的特征變量的取值都是離散的,則將樣本數(shù)據(jù)按行讀入為DataFrame格式。分別抽取特征變量和類標(biāo)簽并使用toRDD算子轉(zhuǎn)化為featureRDD和labelRDD。其中featureRDD和labelRDD中每個(gè)元素均為c(key,value)類型,其中key為該元素在原DataFrame中的行號,value為相應(yīng)的值。則可以用三個(gè)步驟生成CART樹,第一階段首先生成一個(gè)由該行在每列特征變量取值與該特征變量名組合作為key,將1作為value的鍵值對,然后使用reduceByKey算子統(tǒng)計(jì)出每個(gè)變量值有多少樣本。第二個(gè)階段將第一階段中的key與labelRDD組合作為key,1作為value的鍵值對,以便使用reduceByKey統(tǒng)計(jì)出每個(gè)變量屬于特定類的樣本數(shù)量。第三階段,計(jì)算相應(yīng)的Gini值,并通過split函數(shù)分割樣本。記錄原樣本的行號,以保證樣本一致性。具體算法步驟如算法2所示。
算法2CART樹的SparkR分布式實(shí)現(xiàn)
輸入:訓(xùn)練樣本數(shù)據(jù)
輸出:CART樹
Step1 調(diào)用count(labelRDD)函數(shù)得到樣本總數(shù),記為m。
Step2 partitionBy (map(featureRDD,fun= function(k,v){c(特征變名, paste(k,v,sep=“-”))}))記為partitionRDD,將其緩存。
中國在全球奢侈品市場扮演的重要角色已無需解釋,值得注意的是,過去一年,擁抱互聯(lián)網(wǎng)和電商正逐漸成為鐘表行業(yè)的主流趨勢,特別在中國市場,不少代表傳統(tǒng)鐘表業(yè)核心價(jià)值的高端品牌正突破以往束縛,大膽試水線上渠道。
Step3 map(partitionRDD,fun= function(k,v){c(unlist(strsplit(v)) [1],paste(key, unlist(strsplit(v))[2],sep=“-”))}),將結(jié)果記為splitfeatureRDD并緩存。
Step4 調(diào)用map(splitfeatureRDD,fun= function(k,v){c(v,1)})函數(shù),結(jié)果記為denRDD。
Step5 調(diào)用lapplyPartition(denRDD,fun=reduceByKey)函數(shù)。
Step6 調(diào)用unionRDD(splitfeatureRDD,labelRDD)函數(shù),結(jié)果記為combineRDD。
Step7 調(diào)用lapplyPartition(combineRDD,fun=reduceByKey)函數(shù)。
Step8 調(diào)用map(combineRDD,fun= splitfun2)函數(shù),結(jié)果記為numRDD。
Step9 調(diào)用lapplyPartition(numRDD,fun=reduceByKey)函數(shù)。
Step11 調(diào)用split(featureRDD,cp)函數(shù),調(diào)用split(labelRDD,cp)函數(shù)
Step12 重復(fù)步驟1-8,直到滿足停止條件。生成CART樹。
Step10基尼指數(shù)中概率p為numRDD與denRDD中元素的value相除,分離變量的取值在樣本中的占比為denRDD中的value/m。Step11選取Gini值最小的變量,將樣本集按照該變量取值劃分成兩個(gè)子集,用key值保證樣本對應(yīng)完整。
整個(gè)算法終止條件為節(jié)點(diǎn)中的樣本個(gè)數(shù)小于預(yù)定閾值,或樣本集的基尼指數(shù)小于預(yù)定閾值,或者沒有更多的特征。分布式生成CART樹后可以利用生成好的CART模型分布式并行分類,只需將數(shù)據(jù)樣本初始化為RDD,然后按照所選取的特征并行分類即可。
2.2.2 隨機(jī)森林算法的分布式實(shí)現(xiàn)
本文先完成樣本的初始化為RDD的任務(wù)。同時(shí)將所有的特征變量名初始化為一個(gè)新的RDD,記為featurenameRDD。然后確定使用到的CART數(shù)量t,在不同節(jié)點(diǎn)分布式生成t棵CART棵樹,方法如2.2.1節(jié)所述。其中抽樣用sampleRDD算子完成。利用sampleRDD算子中的withReplacement參數(shù)來指定放回抽樣和無放回抽樣,完成樣本的有放回抽樣和特征的無放回抽樣。在抽樣后利用split函數(shù)將featureRDD中對應(yīng)列變?yōu)樾碌腞DD進(jìn)行訓(xùn)練,完成隨機(jī)森林算法。
2.3K-means聚類算法在SparkR上的分布式實(shí)現(xiàn)
K-means是一種無監(jiān)督式學(xué)習(xí)算法,是典型的基于原型的目標(biāo)函數(shù)聚類方法。它以數(shù)據(jù)點(diǎn)到原型的某種距離作為優(yōu)化的目標(biāo)函數(shù),利用函數(shù)求極值的方法得到迭代運(yùn)算的調(diào)整規(guī)則[14]。算法需要首先確定參數(shù)k,即整個(gè)樣本數(shù)據(jù)需要被劃分為多少個(gè)類。然后算法將n個(gè)數(shù)據(jù)集合劃分到這k個(gè)類中,使類間相似度差距比較大,而類內(nèi)相似度比較低,其中在本文中樣本間的相似度以歐氏距離作為度量。下面將討論在SparkR上如何分布式實(shí)現(xiàn)K-means算法。
K-means聚類算法分三個(gè)階段求解。第一步,定義距離函數(shù)為樣本點(diǎn)之間的歐氏距離,并求出樣本與哪個(gè)聚類中心最近。第二階段將樣本按照最近的聚集點(diǎn)劃分為k份,第三階段重新計(jì)算聚類中心。在第二階段計(jì)算時(shí)需要同時(shí)計(jì)算出每個(gè)類中包含樣本的數(shù)量。具體實(shí)現(xiàn)步驟如算法3所示。
算法3K-means算法的分布式實(shí)現(xiàn)
輸入:數(shù)據(jù)集、聚類個(gè)數(shù)k、閾值距離convergeDist
輸出:k個(gè)類的中心
Step1 讀入數(shù)據(jù)集,并初始化為RDD,記為pointRDD。
Step2 調(diào)用takeSample(pointRDD,withReplacement=F)函數(shù),記為kpoint。開始循環(huán)迭代。
Step3 調(diào)用lapply(pointRDD,fun=function(p) { dist.fun(points,kpoints)}),自定義函數(shù)dist.fun = function(P,C) {apply(C,1,function(x) {colSums((t(p)-x)^2)))},記為matRDD。
Step4 調(diào)用lapply(matRDD,fun=function(x){max.col(-x)}),結(jié)果記為cp。
Step5 調(diào)用lapply(pointRDD,fun=function(x){cbind(1, x)}),將1填入每個(gè)樣本,仍記為pointRDD。
Step6 調(diào)用lapplyPartition(lapply(pointRDD,function(x) {c(uninque(cp),split.data.frame(x,cp))})),結(jié)果記為splitRDD,將pointRDD劃分。
Step7 調(diào)用reduceByKey(splitRDD,“+”,2L)。
Step8 計(jì)算新的中心點(diǎn),定義函數(shù)計(jì)算lapply(splitRDD,function(x){sum=x[[2]][,-1],count= x[[2]][,1] sum/count}),記為newpoint。
Step9 調(diào)用lapply(newpointRDD,fun=function(p) { dist.fun(points,kpoints)}),記為d,tempDist=d, kpoint=newpoint。
Step10 當(dāng)tempDist>convergeDist時(shí),迭代Step4-Step10,直到tempDist<=convergeDist停止迭代。
Step11 輸出迭代得到的kpoint。即是最后的k個(gè)類的集聚中心點(diǎn)。
其中Step1中使用takeSample算子無放回抽樣完成抽樣任務(wù),Step3和Step4分別求出樣本點(diǎn)到聚集點(diǎn)的距離以及最近的聚集點(diǎn)。Step8計(jì)算新的中心點(diǎn)。算法直到tempDist小于給定的閾值convergeDist結(jié)束。
3.1 社會化信息對股市波動影響驗(yàn)證
根據(jù)第1節(jié)的模型,本文進(jìn)行了如下三組實(shí)驗(yàn)。選取2013年到2014年上證50所包含的50只股票作為研究樣本,考慮到新聞對股價(jià)的影響有一定持續(xù)性,所以本文選取這50只股票的周收盤價(jià)作為研究節(jié)點(diǎn)。以2012年12月28日的收盤價(jià)作為初始節(jié)點(diǎn),計(jì)算這50只股票的加權(quán)收盤價(jià),加權(quán)方式采用上證50指數(shù)采用的派許加權(quán)。利用抓取2013年到2014年新浪財(cái)經(jīng)、和訊財(cái)經(jīng)、騰訊財(cái)經(jīng)上的股票要聞板塊新聞作為語料庫,并將50家企業(yè)主題名作為特征詞保存為特征詞詞典1,新聞權(quán)重α=0.75,β=0.25。
3.1.1 第一組實(shí)驗(yàn)及結(jié)果分析
在第一組實(shí)驗(yàn)中,本文探討新聞信息量與股價(jià)波動的關(guān)系,實(shí)驗(yàn)步驟如下:
Step1 將新聞文本集分詞,分布式存儲到SparkR平臺上。
Step2 通過算法1求取每篇新聞包含哪些特征詞詞典1的特征詞,得到每篇新聞包含的企業(yè)主體。
Step3 分別計(jì)算50家企業(yè)的新聞信息量,并加權(quán)得到最后的新聞信息量。
圖3 上證50指數(shù)與新聞信息量波動圖
從圖3中可以看出,大部分情況下新聞信息量會隨著指數(shù)的波動而波動,即當(dāng)指數(shù)發(fā)生明顯波動時(shí),相應(yīng)的新聞信息量也會波動到高點(diǎn)。但也存在如下問題:(1) 當(dāng)股價(jià)發(fā)生明顯波動時(shí),新聞信息量波動與股指波動相差不大,而當(dāng)股指波動平緩時(shí),兩者相差較大。這可能是模型一沒有對新聞進(jìn)行篩選,導(dǎo)致當(dāng)股價(jià)波動較小時(shí),仍有一些對股價(jià)影響不大的新聞發(fā)生,從而導(dǎo)致新聞波動率的波動幅度小于股指的波動幅度并且波動值高于股指的波動值。(2) 在有些時(shí)間段中新聞信息量的波動遠(yuǎn)遠(yuǎn)高于股指的波動,本文認(rèn)為這主要由于一周的新聞信息量雖然發(fā)生了很大波動,但所包含的新聞既有正向又有負(fù)向,因此對股指波動大小的指示性不夠準(zhǔn)確。
3.1.2 第二組實(shí)驗(yàn)及結(jié)果分析
第二組實(shí)驗(yàn)通過聚類尋找由關(guān)鍵信息表示的新聞,而這些新聞可以實(shí)質(zhì)性地影響股價(jià)上漲或者下跌。再通過分類完成對所有新聞?wù)?fù)情感劃分,實(shí)驗(yàn)過程如第1節(jié)模型二所述,實(shí)驗(yàn)步驟如下:
Step1 將新聞文本集分詞,分布式存儲到SparkR平臺上,篩選聚類訓(xùn)練集。
Step2 通過聚類提取分類訓(xùn)練集和特征詞候選集。
Step3 按詞頻大小依次將特征詞候選集中極性詞添加到特征詞中,訓(xùn)練分類模型,直到分類準(zhǔn)確率不再發(fā)生明顯變化。
Step4 通過人工標(biāo)注調(diào)整分類模型。
Step5 對剩余新聞分類,計(jì)算新聞情感信息量。
依然按照模型一對股票波動率的定義,分別畫出一年來新聞情感信息量和指數(shù)波動的時(shí)間序列圖,結(jié)果如圖4所示。
圖4 上證50指數(shù)與新聞情感信息量波動圖
從圖4中可以看出,與圖3相比,新聞情感信息量的波動與股價(jià)波動規(guī)律更接近,更準(zhǔn)確地說明了兩者相關(guān)性。根據(jù)市場規(guī)律,本文假設(shè)對企業(yè)股價(jià)產(chǎn)生影響的新聞是有規(guī)律性的,例如企業(yè)的財(cái)報(bào),企業(yè)盈利或者虧損,企業(yè)并購重組等,但是也存在一些日常波動往往與消息面關(guān)系并不那么密切,例如超跌反彈,獲利回吐,或者莊家的洗盤行為等,導(dǎo)致新聞情感信息量與股指波動不會完全吻合。所以本文認(rèn)為,除卻這些日常波動外,新聞情感信息量波動與指數(shù)波動基本相關(guān)。
3.1.3 第三組實(shí)驗(yàn)及結(jié)果分析
第三組實(shí)驗(yàn)探討新聞情感詞強(qiáng)度對股價(jià)波動的影響。本文引入路透社金融詞典并對其進(jìn)行人工修正選出其中的情感詞,并保存為特征詞詞典2。具體實(shí)驗(yàn)步驟如下:
Step1 將新聞文本集分詞,分布式存儲到SparkR平臺上。
Step2 通過算法1計(jì)算每篇新聞包含的特征詞詞典2中的特征詞個(gè)數(shù),計(jì)算每篇新聞的正負(fù)情感詞詞數(shù)之差。
Step3 通過算法1求取每篇新聞包含哪些特征詞詞典1的特征詞,得到每篇新聞包含的企業(yè)主體。
Step4 分別計(jì)算50家企業(yè)的新聞情感詞強(qiáng)度,并加權(quán)得到最后的新聞情感詞強(qiáng)度。
如實(shí)驗(yàn)二做法,比較企業(yè)新聞情感詞強(qiáng)度波動與指數(shù)波動的關(guān)系,結(jié)果如圖5所示。
圖5 上證50指數(shù)與新聞情感詞強(qiáng)度波動圖
與實(shí)驗(yàn)二相比,兩者都可以明顯地衡量股指的劇烈波動,不同的是當(dāng)股指波動較小時(shí),新聞情感詞強(qiáng)度的波動要小于實(shí)際股指的波動。這很有可能是模型三受限于情感詞典,并且新聞量較大,情感詞典很難準(zhǔn)確表達(dá)新聞情感。這導(dǎo)致在指數(shù)波動較小時(shí),包含特定情感詞的新聞較少,不能準(zhǔn)確衡量股指的波動幅度。
通過上述三個(gè)實(shí)驗(yàn),本文討論了三種衡量社會化信息情感的方式并分別驗(yàn)證了其與股指波動的關(guān)系。通過波動圖可知,模型二使用的新聞情感信息量來衡量社會化信息情感最為準(zhǔn)確。這不僅表現(xiàn)在當(dāng)股指波動較大時(shí)新聞情感信息量的波動幅度也較大,還表現(xiàn)在當(dāng)股指波動較小,新聞情感信息不明顯或者有效新聞量不充足時(shí),新聞情感信息量的波動也與上證50指數(shù)波動大致一致。這主要由于模型二與模型一、模型三相比有以下兩點(diǎn)優(yōu)勢:(1) 通過有偏樣本的選擇可以有效去除對股市波動影響較小的新聞,以便有效進(jìn)行特征選擇,并盡量準(zhǔn)確地篩選出與股市波動最相關(guān)的新聞。(2) 通過聚類算法的特征選擇方式可以更充分利用大量新聞靈活篩選出最有效的特征,由于這些特征所代表的新聞情感均較為突出明顯,所以使用這些特征對剩余新聞進(jìn)行分類時(shí)結(jié)果較為準(zhǔn)確。在最后的情感值計(jì)算時(shí)忽略掉那些有一定量分類樹給出結(jié)果為無法分類的新聞,也使得最后選取出的新聞情感較為明顯,最大可能去除不相關(guān)新聞的影響。綜上兩點(diǎn)都使得模型二的新聞篩選是最有效的,這在大數(shù)據(jù)環(huán)境下,信息量龐大的情況下尤為重要。并且由于中國股市的變化日新月異,金融情感詞典很難完全準(zhǔn)確獲取,使用聚類算法訓(xùn)練可以極大節(jié)省人力,更適合大數(shù)據(jù)環(huán)境的需求。
由上述三個(gè)實(shí)驗(yàn)可以證實(shí)本文的實(shí)驗(yàn)方案是有效可行的。利用SparkR平臺可以并行化爬取、分類、聚類算法,從而提高數(shù)據(jù)處理效率。同時(shí)還可以分布式存儲數(shù)據(jù),方便完成更復(fù)雜的算法實(shí)現(xiàn)。尤其在特征選擇時(shí),利用SparkR的高效性,可以反復(fù)迭代訓(xùn)練,以提高準(zhǔn)確率。
3.2 SparkR平臺性能驗(yàn)證
為了進(jìn)一步驗(yàn)證SparkR平臺的性能,本文以分類模型訓(xùn)練為例設(shè)計(jì)一組與單機(jī)運(yùn)行的對比實(shí)驗(yàn),實(shí)驗(yàn)內(nèi)容為2.2節(jié)介紹的隨機(jī)森林算法在SparkR平臺上運(yùn)行與在單機(jī)平臺上運(yùn)行效率對比。本文使用第1節(jié)模型二挑選出的特征,從有偏新聞樣本中選取10 000,50 000,100 000,200 000條新聞作為訓(xùn)練集,分別在SparkR平臺和單機(jī)平臺訓(xùn)練隨機(jī)森林模型。連續(xù)運(yùn)行10次分別記錄兩個(gè)平臺所使用的時(shí)間,取其平均值作為最后的時(shí)間。
本文中搭建的實(shí)驗(yàn)平臺有5臺機(jī)器,每臺機(jī)器的配置如下:CPU為Intel Core2 Duo ,內(nèi)存為1 GB。Hadoop版本為2.6.0,Java版本為1.7.0_67。Spark版本為1.3.1,R版本為3.1.3。每臺機(jī)器通過實(shí)驗(yàn)室局域網(wǎng)連接。最后的運(yùn)行時(shí)間如表1所示。
表1 基于SparkR和單機(jī)平臺隨機(jī)森林算法運(yùn)行時(shí)間對比
由表1可見,SparkR平臺的處理時(shí)間遠(yuǎn)遠(yuǎn)小于單機(jī)平臺,尤其是數(shù)據(jù)量越來越大時(shí)性能提升更為明顯,說明SparkR平臺運(yùn)行效率遠(yuǎn)遠(yuǎn)高于單機(jī)平臺。
3.3 SparkR平臺伸縮性驗(yàn)證
為了進(jìn)一步驗(yàn)證SparkR平臺在大數(shù)據(jù)情形下的穩(wěn)定性表現(xiàn),本文通過測試不同數(shù)據(jù)集以及不同節(jié)點(diǎn)數(shù)上SparkR平臺的表現(xiàn)情況來驗(yàn)證其伸縮性。測試數(shù)據(jù)集為從有偏新聞集中選取10 000、50 000、100 000、200 000條新聞,將每組實(shí)驗(yàn)重復(fù)進(jìn)行十次,取其平均執(zhí)行時(shí)間作為實(shí)驗(yàn)最終結(jié)果,結(jié)果如表2所示。
表2 不同節(jié)點(diǎn)數(shù)基于SparkR運(yùn)行隨機(jī)森林算法時(shí)間對比
由表2可見,SparkR平臺具有良好的伸縮性,這使得本文可以通過增加平臺節(jié)點(diǎn)數(shù)的方式來提高SparkR平臺的運(yùn)行效率,確保SparkR平臺可以勝任大數(shù)據(jù)分析的任務(wù)。
3.4 特征選擇方法對比
為了進(jìn)一步說明利用有偏樣本通過聚類算法進(jìn)行特征篩選要比通過詞典進(jìn)行特征篩選有效,本文設(shè)計(jì)如下對比實(shí)驗(yàn)。因社會化新聞數(shù)量多且并不是所有新聞都有明確的情感態(tài)度,所以無法通過人工標(biāo)注的方式來獲取分類所需的訓(xùn)練集和測試集。因此本文從第1節(jié)模型二聚類完成后的樣本中分別從正向樣本和負(fù)向樣本各選取3 000篇新聞作為訓(xùn)練集,再從聚類完成樣本中挑選出600篇與訓(xùn)練集不重復(fù)的新聞作為驗(yàn)證集。由于第1節(jié)模型二的樣本選擇是有偏的,因此可以大概認(rèn)為聚類完成后的單向新聞文本情感態(tài)度一致。然后分別通過第1節(jié)模型二的聚類算法和第1節(jié)模型三的詞典進(jìn)行特征篩選,并利用上述訓(xùn)練集訓(xùn)練分類模型,分類算法采用的是2.2節(jié)介紹的隨機(jī)森林分類算法,再通過測試集驗(yàn)證分類準(zhǔn)確率,以此來比較聚類算法與人工詞典進(jìn)行特征選擇的有效性。為了充分驗(yàn)證兩種方法的準(zhǔn)確率,本文將訓(xùn)練集中新聞數(shù)量依次遞增為1 000、2 000、4 000、6 000篇新聞進(jìn)行準(zhǔn)確率對比。將每組對比進(jìn)行10次,取其平值作為最后的準(zhǔn)確率,實(shí)驗(yàn)結(jié)果如表3所示。
表3 基于聚類和人工字典的特征選擇后隨機(jī)森林算法分類準(zhǔn)確率對比
從表3看出,雖然因?yàn)闃颖居衅珜?dǎo)致兩者的分類準(zhǔn)確率都較高,但是聚類進(jìn)行特征選擇的準(zhǔn)確率還是要高于人工詞典法,并且隨著訓(xùn)練集的不斷增大,可以更加充分的提取關(guān)鍵信息,使得聚類算法的準(zhǔn)確率更加優(yōu)于人工詞典,從側(cè)面說明模型二中情感分類的準(zhǔn)確率要高于模型三,更加有利于刻畫社會化信息的情感。
本文討論了基于SparkR平臺分析社會化信息對股市波動性影響,并給出了綜合解決方案,克服了數(shù)據(jù)量繁雜以及盡量減少了人工介入帶來的不可操作性。本文通過三個(gè)實(shí)驗(yàn)詳細(xì)闡述了如何衡量社會化信息的情感并分別驗(yàn)證了其對股市波動的影響。其次,還分析了SparkR平臺的性能以及伸縮性,證明了該平臺可以有效地用于大數(shù)據(jù)環(huán)境下的金融數(shù)據(jù)分析。最后,通過實(shí)驗(yàn)驗(yàn)證了聚類算法進(jìn)行特征選擇的有效性,討論并分析了三個(gè)模型的各自優(yōu)缺點(diǎn)。不過現(xiàn)在SparkR平臺還處于發(fā)展初期,文中選擇實(shí)現(xiàn)的算法比較基礎(chǔ),后期可以嘗試通過改進(jìn)算法來適應(yīng)更加復(fù)雜的應(yīng)用,同時(shí)進(jìn)一步研究量化方法以便更準(zhǔn)確地說明社會化信息對股市的影響作用。
[1] Amplab-extras.SparkR(R frontend for Spark)[EB/OL].[2014-9-25].http://amplab-extras.github.io/SparkR-pkg/.
[2] The R Foundation.The R Project for StatisticalComputing[EB/OL].[2014-10-6].http://www.r-project.org/.
[3] Lavrenko V,Schmill M,Lawrie D,et al.Mining of concurrent text and time series[C]//KDD-2000 Workshop on Text Mining.2000:37-44.
[4] Bollen J,Mao H,Zeng X.Twitter mood predicts the stock market[J].Journal of Computational Science,2011,2(1):1-8.
[5] Gilbert E,Karahalios K.Predicting tie strength with social media[C]//Proceedings of the SIGCHI Conference on Human Factors in Computing Systems.ACM,2009:211-220.
[6] Zhang X,Fuehres H,Gloor P A.Predicting stock market indicators through twitter “I hope it is not as bad as I fear”[J].Procedia-Social and Behavioral Sciences,2011,26:55-62.
[7] Peramunetilleke D,Wong R K.Currency exchange rate forecasting from news headlines[J].Australian Computer Science Communications,2002,24(2):131-139.
[8] 黃潤鵬,左文明,畢凌燕.基于微博情緒信息的股票市場預(yù)測[J].管理工程學(xué)報(bào),2015,29(1):47-52.
[9] 賴凱聲,陳浩,錢衛(wèi)寧,等.微博情緒與中國股市:基于協(xié)整分析[J].系統(tǒng)科學(xué)與數(shù)學(xué),2014,34(5):565-575.
[10] 朱浩然,梁循,馬躍峰,等.金融領(lǐng)域中文微博情感分析[C]//第八屆中國管理學(xué)年會——中國管理的國際化與本土化,2013.
[11] 王巖.面向金融領(lǐng)域BBS的話題發(fā)現(xiàn)和熱度評價(jià)[D].哈爾濱工業(yè)大學(xué),2010.
[12] Zaharia M,Chowdhury M,Das T,et al.Resilient distributed datasets:a fault-tolerant abstraction for in-memory cluster computing[C]//Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation,2012.
[13] De Ath G,Fabricus K E.Classification and Regression Trees:A Powerful Yet Simple[J].Technique for Ecological Data Analysis,2000,81(11):3178-3192.
[14] 周麗娟,王慧,王文伯,等.面向海量數(shù)據(jù)的并行KMeans算法[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2012(S1):150-152.
THE RESEARCH OF THE IMPACT OF SOCIAL INFORMATION ON STOCKMARKET VOLATILITY BASED ON THE SPARKR
Ni Liping Ma Chiyu Liu Xiaojun
(SchoolofManagement,HefeiUniversityofTechnology,Hefei230009,Anhui,China)(KeyLaboratoryofProcessOptimizationandIntelligentDecision-making,MinistryofEducation,Hefei230009,Anhui,China)
With the rapid development of information society, social information is becoming richer. This information will influence the stock market volatility. However, the data is in huge amount, and most of them are unstructured, thus increasing the difficulty of analyzing the impact of the social information on the market. This problem is trying to be solved by the distributed calculating technology and discuss the impact of social information on the stock market from two aspects of information volume and information sentiment. By building SparkR platform firstly how to use this platform to solve the problem of feature selection and sentiment classification of social information of the stock market is discussed. Secondly, the impact on the market of information volume and sentimental information is compared. Experimental result shows the sentimental information can accurately describe the changes of market. In order to validate the feasibility of this solution further, this paper defines the different sentimental measurement method, compares the advantages and disadvantages of these different solutions, and then gives the integrated solutions for analyzing the impact of social information on stock market volatility. Finally, the effectiveness of the proposed solution is verified by experiment.
SparkR Feature selection Distributed analysis Text mining Sentiment classification
2016-01-13。國家自然科學(xué)
71301041,71271071)。倪麗萍,副教授,主研領(lǐng)域:金融數(shù)據(jù)分析,數(shù)據(jù)挖掘,人工智能。馬馳宇,碩士。劉小軍,碩士。
TP181 TP391
A
10.3969/j.issn.1000-386x.2017.03.033