作為「獵金系列十六」,本報告研究雪球網的第三個數據源:非格式化的用戶發帖文本。通過機器學習的方式對帖子進行情緒判斷,構建情緒選股因子。
研究時窗為2014年1月-2017年7月,共計得到30,658,560篇帖子。對初始的帖子經過一系列處理得到降噪之後的信息。選擇27,654篇帖子作為樣本內數據,通過人工的方式對帖子打標籤,確定情緒(正向、負向、中性三種情緒),研究多種機器學習模型的效果,選擇SVM作為最終的訓練模型。模型樣本內精準度達到70.16%,在正向情緒集合、負向情緒集合的召回率分別達到76.9%、68.2%。進一步判斷樣本外情緒,得到原始的情緒因子數據源。
構建正向情緒比、負向情緒比、綜合情緒比因子(負向情緒比即周期範圍內負面帖子數/總帖子數)。測試結果顯示,負向情緒比因子具有較好的選股能力。整體來講,負向情緒比越低,未來收益會越好,尤其是在500股票池內部選股能力突出。
將負向情緒比因子與反轉因子結合,在中證500股票池內部構建雙因子增強策略。雙因子策略年化超額收益率、夏普率、最大回撤分別達到11.6%、1.87、6.5%,顯著優於反轉因子的相應表現。這意味著當期下跌較多但市場負面情緒沒那麼嚴重的股票將會有更高的超額收益。
另外從情緒角度出發也做了一些其他方面的選股因子的嘗試,如根據綜合情緒比因子構建的波動率因子在全市場具有不錯的選股能力,月度因子值越大,未來收益越高。
將各種奇奇怪怪的單位羅列一下,我們會發現有個很有意思的對象:不可思議單位。這個單位是描述人類覺得無法想像的事情如果真的發生大概需要的時間間隔。假設以下幾個場景:
場景1:我穿越時空,來到春秋,對話老子:「老人家,我將您的道德經抄錄在紙上以便萬世傳頌好不好?」。老人家沉默不語……他覺得不可思議,何謂紙?想法根本不可能實現,何談萬世傳頌。
場景2:我不死心,趕到盛唐,請教玄奘:「聖僧,我將佛法抄錄在紙上以便萬世傳頌好不好?」。玄奘微微一笑:「出家人不打誑語。」但他心裡的小九九在說:沒個幾百年這不可能實現。
這裡的「萬世」、「幾百年」就是不同時代的人在衡量同一件事情的不可思議單位。「不可思議」指標的縮短見證了人類的進步和科技的力量。目前最具有爭議性的就是人工智慧。人工智慧已經深刻的改變了我們的生活方式、思維習慣。而量化投資領域是計算機最「錢」沿的地方,該如何應對這種衝擊?
隨著三張報表的研究效用曲線在逐步降低,大數據以及機器學習在量化投資領域的應用愈演愈烈。我們在《雪球知股乎系列之一:和關注度因子有個約定》、《雪球知股乎系列二:百萬投資組合裡的寶貝》詳細的介紹了大數據、機器學習、人工智慧的關係和發展。下面我們簡單回顧一下前面兩篇報告的一些關鍵性內容,方便後續的研究。
雪球網有很多功能界面,我們通過爬蟲的方式獲取雪球網上用戶UGC(用戶自主生成)的行為內容。雪球網用戶行為共計有三種:關注行為、發帖行為、投資組合調倉行為。另外,發帖行為是一種非格式化文本,關注行為是一種格式化文本,包括買入、賣出、關注三種行為,其中關注行為佔比95.5%。
數據的時間窗口為2010年12月16日至2017年7月21日,在此期間共獲得4,254,659個用戶、51,320,982條基本行為。
我們根據關注行為構建了關注度因子,該因子統計了時間周期範圍內某個股票被關注的次數,結論有四:
1、關注度因子具有反轉效應,當期關注度低的股票未來(月度/周度)會有溢價;
2、雪球網關注度因子與其他網際網路文本關注度因子(主流財經媒體網站、股吧)或者類關注度因子(同花順點擊率等)的秩相關性在0.7-0.8左右,具有高同質性;
3、雪球網關注度因子換手率較高、具有一定的小市值效應;
4、關注度因子對於價值因子有一定的增強作用,估值低關注度低的股票未來具有更大的想像空間。
根據投資組合的調倉行為構建價值變動因子,該因子將百萬投資組合合併成一個組合,構建月度市值變動率因子,進一步剝離反轉因子,該因子具有反轉效應:當期調入越多的標的未來下跌的越多,調出越多的標的未來上漲的越多。(具體參見往期報告)。
而本篇是我們基於雪球網用戶發帖行為推出的第三篇報告。研究基本框架如下:
1、對用戶的發帖進行初始篩選,刪除無效的帖子以及文本過長的帖子;
2、選擇27,654篇帖子用於人工打標籤,然後通過機器學習的方式對歷史全樣本進行判斷,確定每篇帖子的情緒;
3、構建情緒因子用於選股;
4、基於有效的情緒因子構建選股策略。
情緒分析通過運用NLP、文本挖掘、計算語言學等技術實現對各種非規範化的文本語言處理,達到相應的情緒判斷的目的。目前主流的研究方法分成無監督的文本情感判斷和有監督的情感判斷。
無監督的情感判斷主要運用情感詞的相關信息進行文本情緒的判斷。該方法面臨的問題是:1、需要動態維護情緒庫;2、忽略了文本的結構問題,導致部分關鍵信息的丟失。有監督學習的文本情感分析主要運用貝葉斯模型、支持向量機(SVM,Support Vector Machine)、神經網絡等模型進行情感分類。不同的學者對機器學習在情緒分析方面的研究進行了不同的嘗試和改進。
這裡需要強調一點,無論是通過詞庫方式判斷文本情緒,亦或通過機器學習的方式判斷文本的情緒,都需要通過切詞的方式對文本進行碎片化、向量化處理。
我們將每一篇文本的情緒分為3類:樂觀、悲觀、中性,採用機器學習的方式對文本情緒進行判斷。可選擇的機器學習模型很多,通過對比分析,我們選擇SVM作為最終的機器學習模型(後面會有具體的討論)。
整個文本處理的流程如下:
雪球網數據抓取在此就不做贅述,具體參見往期報告。我們接下來重點關注其他關鍵步驟。
1、刪除無效文本:此次研究對象為雪球網用戶發的非格式化文本。但有些行為可能僅僅是雪球網的一種推廣行為或者無意義的格式文本,鑑於這些文本對最終的情緒分析沒有作用,所以刪除該類文本。
2、刪除過長文本:部分文本內容過長,一方面增加了情緒判斷的難度:當文本過長時會對切詞、情緒分析、包括最終的詞向量維度產生較大的影響;另一方面極大的降低學習的效率。我們統計所有樣本的字符長度,發現文本長度在700以內的樣本數佔比為97.5%。鑑於此,我們最終只保留文本長度<=700的樣本作為情緒分析對象。
3、文本清洗:原始的文本包含大量的噪音或者對情緒判斷無效的信息,因此需要對初始的文本內容進行清洗,一方面提升文本質量、降低詞向量空間,另一方面提升運算效率。針對於初始文本的清洗維度大致如下:
4、文本切分:文本清洗後,接下來需要將其分成樣本內、樣本外數據,同時針對於樣本內的數據需要進一步切分成訓練集和測試集。保證隨機選擇的情況下切分的原則是:確保時間維度覆蓋度、A股覆蓋度。我們抽取了27,654篇帖子作為樣本內數據。進一步將樣本內數據分成訓練集和測試集,比例為70%:30%(訓練集:測試集)。這樣就得到了19,332篇幅的訓練集合、8,322篇幅的測試集。樣本內正向情緒的文本佔比48.07%、負向情緒的佔比29.49%、中性情緒的文本佔比22.45%。這個比例與目前市場的現象比較一致:國內市場普遍存在著報喜不報憂的現象,而散戶投資者的情緒也存在著類似的比例分配情況。
5、Prep:接下來重點講述Prep板塊的流程。該部分主要講述了如何切詞、以及如何將切詞以後的結果轉化成模型(貝葉斯、SVM等)的輸入。主要步驟包括切詞、否定詞、詞性的應用、詞向量空間生成等幾個關鍵步驟。
5.1、切詞:這一步的主要目的是對文本進行切詞,碎片化文本後,作為進一步研究的對象。而切詞的依據是詞庫。我們這裡利用的是結巴分詞系統。同時為了完善詞庫,我們通過自定義的方式導入搜狗金融詞庫,構成原始的詞庫表。
5.2、否定詞:否定詞的使用會導致語義反轉。比如「不/太平」、「不/開心」、「並非/如此」、「從未/快樂」等。根據切詞的結果會切出正向詞彙,但實際上上面的表述本身傳達的是一種否定的意義。需要對否定句進行特殊處理,如句子」I didn’t like thismovie」。部分學者提出「一旦出現否定詞,那麼在否定詞之後、符號之前的所有切詞結果都加上否定詞,進而形成新的詞彙」,根據此規則可以將句子「didn’t like this movie , but I」轉換為「didn’t NOT_like NOT_thisNOT_movie, but I」。
5.3、停用詞:停用詞(stopwords) 是指評論文本數量較多,但對文本的情緒傾向分析沒有幫助的詞語,例如代詞「這」、「那」、「他」,副詞「也」、「剛剛」,其他詞彙如「而」、「及」、「與」、「或」等。根據停用詞集合構建的停用詞表刪除停用詞,能夠減少數據噪音,提升文本情感分類的準確率。
部分停用詞樣本如下:[和,是,就,都,而,及,與,著,或,一個, 我們,你們,她們,他們]。這裡需要注意的是需要將剛剛「文本清洗」步驟產生的一些詞彙,如「STOCK_URL_」、「USER_URL_」等添加到停用詞裡面。
5.4、詞性標註:通常而言,表達情感的詞彙往往是形容詞,此外動詞、名詞等也有類似的作用。但是數詞、量詞、介詞等詞彙可能並無太大的作用;另外如果不做詞性的限制,最終詞向量空間可能會比較大,也會影響運算效率。因此我們將僅僅考慮形容詞、動詞、名詞等功能實詞作為特徵。
5.5、詞向量:這一步主要說明的是模型的輸入,即詞向量生成問題。根據前面的文本切分、我們得到了每個文本的分詞結果(每一個文本是一個詞向量空間,1*N維度,這裡的N是每個文本切分後的詞數目);然後通過否定詞處理將每句否定詞位置以後的詞語進行否定化處理;進一步丟棄沒有意義的詞彙,其中沒有意義的詞彙處理流程包括:停用詞的處理以及詞性的處理。這樣我們就能得到每個文本處理完畢的詞向量(1*N』維,這裡N』 <=N)。 然後取所有文本切詞後的詞量併集,生成詞向量全集(1*M),進一步生成K*M(K個樣本)維度的向量空間。
下面以兩個文本為例,將上面的過程進行簡單的梳理。
對上面切詞後的結果進行「Prep」階段處理。1、切詞,切詞後結果參見上述表格;2、將例句1中的否定詞「沒」添加到後面的「離開」(否定詞以後,符號之前的所有分詞結果)上形成新詞彙「沒離開」;3、將例句2中的「和」這個停用詞去掉;4、然後取所有例句的詞全集[大部分、員工、沒、沒離開、女孩、非常、愛、吃、Ginger、甜品]。依照詞向量全集對每個例句切詞後的詞是否出現在全集中做0/1判斷處理(0表示沒有出現、1表示出現),處理完畢後結果如下:
然後根據每個文本詞向量化後的結果,結合情緒的帖子得到模型的輸入,進行訓練。
6、SVM模型:前面在情緒判斷的研究中提及,可以運用SVM、貝葉斯、神經網絡等多種方法對文本情緒進行判斷,在效率和效果方面性價比較高的是SVM模型。我們這裡以SVM和貝葉斯模型的對比分析為例進行說明。
選擇N個情緒文本作為測試對象(訓練集:測試集=70%:30%),分別測試N=6,000、8,000、10,000時,相應的模型表現。從測試結果來看:1、同樣本下SVM要優於貝葉斯的表現;2、SVM模型對N的敏感性要優於貝葉斯模型,隨著N的增大,SVM效果提升的更快;3、時間效率方面,SVM也顯著的、穩定的優於貝葉斯表現。因此後面的分析中將運用SVM作為情緒判斷的訓練模型。
7、訓練效果:通過以上的整體操作,我們得到了模型輸入,運用SVM模型進行訓練,得到模型的訓練結果,我們從精準度和召回率兩個維度考察效果(根據前面的測試集合和訓練集合的比例,我們在27,654個樣本中共計得到8,322個測試文本)。在測試集上,模型的精準度為70.16%。而從召回率的角度來看,正向、負向、中性文本的召回率分別為76.9%、68.2%、58.3%。
另外需要注意的是,正如前面在對比SVM 和貝葉斯模型對測試樣本數目的敏感性分析一樣,我們分別測試了N=6,000、8,000、10,000、15,000、20,000、27,654個樣本時,SVM模型的表現。隨著N的增大,模型效果在不斷提升,但考慮到打標籤的人工成本,我們最終打了27,654個樣本。
基於前面的整體研究,我們得到了情緒因子的初始數據源,進一步構建情緒因子。每篇帖子的情緒有三種可能:正向情緒、負向情緒、中性情緒。那麼,我們分別定義了以下幾種類別的情緒因子。
從佔比的角度來講,我們分別構建了正向情緒佔比、負面情緒佔比、綜合情緒比三個因子。因子之間可能具有一定的相關性,但各因子反應的信息量不一樣。
這裡,我們研究了三個情緒因子的截面均值歷史趨勢圖。以負面情緒比為例進行說明(正面情緒比與其正好相反),14年至15年7月呈現單調遞增的趨勢,尤其是15年前半年,當時行情暴漲,但是從負面情緒比指標來看市場表現一定的恐慌情緒;15年8月至今呈現單調遞減的趨勢,今年以來有一定波動。
下面所有的測試都是在以下條件基礎之上進行:
個股數據:全市場選股,剔除不滿足交易條件的個股;
行業分類:中信一級行業;
數據區間:2014年1月1日至2017年7月21日;
首先研究不同類別的月度情緒因子對A股的覆蓋度。從結果來看,正向情緒比因子的覆蓋度較高,覆蓋度均值達到93.9%,尤其是2014年以後的覆蓋度已經趨於全市場覆蓋;而負面情緒覆蓋度相對較低,但是月度因子的覆蓋度均值已經達到83.8%。
構建周度以及月度頻度的上述因子,從IC 以及分位數組合角度測試因子在全市場的有效性。
從檢測結果來看:1、從頻度角度分析,周度頻度的因子幾乎全部失效,沒有選股的預測作用;2、從月度因子具體分析,負面情緒比因子有著較強的選股能力,負面情緒比越低意味著未來標的表現越好。
正面情緒因子失效而負面情緒有一定的預測作用這種現象也比較符合實際。國內股市一般是報喜不報憂,正面情緒存在著大量的噪音,很難從中找到有效的選股信息。而一旦股票形成負面情緒,那市場對股票的認可方面可能進入一個低谷,在悲觀裡面進行切分,悲觀情緒較重的股票可能面臨著更大的下行空間。
對悲觀情緒比因子進行行業市值中性化,並進一步觀察中性化之後的因子與價值、成長、反轉、分析師情緒、換手率等因子的相關性。結果發現:中性化以後因子選股能力有所降低;另外,因子與傳統的選股因子相關性較低。
雖然中性化以後的負面情緒比因子有效性有所降低,但在不同指數股票池上可能會有另一番驚喜,所以接下來測試中性化負面情緒比因子在中證500股票池內部的選股效果。
驗證中性化悲觀情緒比因子在中證500股票池內部的表現。測試結果顯示,在中證500股票池內部有較為突出的選股能力,IC達到0.022,IC_IR達到0.4。而觀察分位數組合測試的結果發現悲觀情緒比與未來收益率呈現負相關關係,悲觀情緒比值越小,未來表現會越好。top組別(悲觀情緒比值最低的)年化收益率為21.7%,夏普率為0.65。
後面如無特別強調,悲觀情緒比因子均是行業市值中性化以後的結果。
我們根據正向情緒、負向情緒、以及兩者截面的差異構建了三個選股因子。實際上我們還進行了多維度的研究。這裡將其中比較有意義的一些結果分享出來,希望能起到拋磚引玉的作用。
進一步利用綜合情緒比因子,構建該因子的月度波動率因子,測試該因子的有效性。
因子計算步驟:
1、計算每個月的(正面帖子數-負面帖子數)/帖子總數,即綜合情緒比指標;
2、計算該指標的月度波動率,得到綜合情緒比波動率因子;
全市場選股測試該因子的表現,並對該因子進行行業市值中性化,一併研究中性化之後的表現。
測試結果顯示,該因子具有較強的選股能力,行業市值中性化以後的表現依然穩健,IC為0.035,IC_IR達到0.69。而中性化以後的分位數測試顯示,該因子與收益率之間是嚴格的單調規律,波動率越高未來表現越好。
中性化負面情緒比因子在中證500股票池內部表現出比較好的選股能力。那麼該因子對傳統的選股因子有沒有一定的增強作用呢?從反轉因子的角度出發,當前股票下跌幅度較大的股票未來會有更大的成長空間。那麼在下跌的裡面找到負面情緒相對較低的股票,即當期下跌的非常嚴重但是市場情緒又不是那麼悲觀的股票未來是否能取得更高的超額收益呢?
基於月度反轉因子和月度中性化負面情緒比因子構建雙因子增強策略。
選股基本條件:
個股數據:中證500股票池內部選股,剔除不符合條件個股;
行業分類:中信一級行業;
數據區間:2014年1月1日至2017年7月21日;
利用反轉因子和中性化負面情緒比因子在中證500股票池內部選股。研究的目的是雙因子增強策略對比單獨的反轉因子的選股策略表現。雙因子增強策略選股流程如下:每個月最後一個交易日結束後進行組合的篩選和調整,按照中信行業對負面情緒比因子排序、選擇每個行業因子值最低的50%比例股票作為初始股票池,然後按照反轉因子進行排序,選擇反轉因子最大的20%配倉,按中證500權重配權。單獨的反轉因子選股策略相對簡單:月度調倉、月底選擇反轉因子最大的10%配倉、行業中性化、中證500權重配權。
從對衝策略的結果來看,雙因子增強策略表現穩定的優於單反轉因子的表現。在年化收益率、夏普率、最大回撤等關鍵指標方面都得到了大幅度的提升。而分年度來看,雙因子策略也穩定的優於單因子的對衝策略表現。.
正如前面所言,當期出現大幅下跌的股票並不一定在未來都能獲得優異的表現,我們需要從中找到那種市場情緒不是那麼悲觀的股票,堅定的持有,獲取更加穩健的收益。
不知不覺間,基於雪球網的三篇報告全部落地。回首整個研究歷程,從去年年底開始布局整個雪球網的研究計劃、到網絡文本抓取、再到相應的因子研究,雖然不一定做到步步精細,但我們確有處處打磨;雖然未必做到字字珠璣,但我們定量團隊確心有所系。在此和大家分享一些淺見,如能起綿薄作用,將倍感榮幸。
1、網際網路文本下的大數據研究難點有二:1)、原始數據的獲取,國內大數據的興起和積累大致是從2013年左右開始有一個突破點,但數據壁壘較高,獲取成本很大;2)、如何從海量信息中抽繭剝絲在有效降噪的情況下,聚焦有效信息,研發有效的選股策略。
2、充分利用已有的文本數據,切忌「未來函數」現象的出現。比如雪球網用戶的粉絲數、比如投資組合裡面的關注人數等,沒辦法去回溯歷史上某一時刻這些指標的數值大小。
3、大數據文本下的類關注度因子(和關注度因子相仿的因子,如點擊率等)都有很高的同質性。我們興業定量團隊抓取一些主流的財經媒體網站以及東方財富股吧等數據,這些數據源構建的關注度因子的秩相關性均在0.7-0.8之間。
4、情緒因子真的很「情緒」。情緒分析一直是文本挖掘的一個難題,綜合利用到NLP、機器學習等學科。而中文方面的研究更是難上加難:在對漢語進行情緒分析時,首先需要切詞,切詞的依據是有效的詞庫。而我們沒有一個權威的、成熟的、得到廣泛認可的詞庫。另外,無論是國內亦或是國外基於情緒構建的選股因子的選股並不是特別顯著(相對於傳統的選股因子而言)。
宛宛轉轉,三篇報告也已攢完,很感激各位對成果的思考和意見。接下來,我們興業定量研究團隊將投入到時效性的文本研究當中,還希望各位從中取「知」、取「悅」。
詳情請參閱相關研究報告《雪球知股乎系列三:情緒因子選股正當時》,或聯繫興業金融工程研究團隊。
---
聯繫人:任瞳
電話:0755-2382 6010
E-mail:rentong@xyzq.com.cn
---
聯繫人:徐寅
電話:18602155387,021-38565949
E-mail: xuyinsh@xyzq.com.cn
---
聯繫人:鄭兆磊
電話:13918491550
微信:13918491550
E-mail: zhengzhaolei@xyzq.com.cn
---
更多量化最新資訊和研究成果,歡迎關注我們的微信公眾平臺(微信號:XYZQ-QUANT)!