【數碼金魚缸】社交媒體被廣泛使用,創造龐大商機,海量的社交媒體大數據甚至可決定金融市場價格走勢;掌握了大數據,便可在投資市場贏在起跑線。美國總統特朗普被稱為「Twitter President」,貨幣政策以至外交政策轉變,透過短短約100字的貼文就第一時間對全世界公佈,沒有任何平台比社交媒體更具影響力。
金融市場已認真對待社交媒體數據的研究,Twitter情緒成為分析市場走勢的重要工具之一;筆者今次嘗試以最簡單方法,寫一個可以分析Twitter情緒的程式,嘗試用於交易決策用途。
自反送中運動後,香港人對Twitter這個平台不會陌生,因為它成為抗爭運動國際戰線的主要平台之一。Twitter這個平台一向給人的感覺是比較沉悶,因為它始終是一個以純文字為主的平台,定位對比facebook和Instagram這些以圖片或影片為主題的平台有所不同。
由於Twitter每條發文有字數限制,目前是限於280個字元內,用戶被迫以精簡文字傳情達意,因此帖文含有的信息量非常集中,很適合用於自然語言處理(NLP,Natural Language Processing)分析。另外,Twitter文化鼓勵使用hashtag等方便系統化搜尋機制,增加搜索命中率;因此透過分析大量公開用戶帖文的關鍵詞,可得知市場對某個主題的情緒轉變。
由於Twitter預設可見度很多時是公開的,而facebook和Instagram這些平台預設只容許朋友圈用戶閱讀,對Twitter進行爬蟲蒐集資料相對比較容易。第一步,筆者利用一個名為twint的開放源碼Python程式庫,寫了一個最簡單版本的Twitter爬蟲程式,它能根據某個關鍵字抽樣下載250條最近期的相關帖文。在筆者例子中,使用AAPL(蘋果公司股票代碼)作關鍵字,其他可以嘗試的關鍵字包括權重股編號或名稱,甚至直接使用stock market這樣的關鍵字搜尋也可以。
第二步,程式需要將收集到的帖文進行NLP處理,簡單而言就是把文字轉換為量化指標,就可以做到分析市場情緒效果。筆者選擇了TextBlob作為主要工具。
TextBlob是一個在Python社區相當流行且簡單易用的NLP程式庫。NLP屬於機器學習的一種,它懂得把一段文字分拆成獨立句子,再把每句句子拆細成不同的文法組成部份;例如動詞、名詞、形容詞等,再作出綜合評分。每句句子,也根據機器學習預先訓練好的程式庫判定成兩個參數,分別是polarity和subjectivity。Polarity是一個-1至+1的連續數,標示出整句句子的「正面度」;subjectivity則是一個0至1的連續數,標示出該句子的「主觀度」。
由於目標是統計市場的主觀情緒,因此筆者把整條帖文的「情緒」,定義為polarity乘上subjectivity然後加總。句子的subjectivity越接近1,乘上polarity後會把數字放大,令程式傾向突出一些個人情感豐富的主觀句子,並壓抑一些冷冰冰的客觀句子;影響統計結果的往往是主觀度最豐富的句子,符合統計市場情緒目標。程式目前只能支援英文句子分析,如果帖文內容是以其他語言為主,程式通常會把分析結果顯示為零;筆者為了簡化實驗程序,暫時把這些結果撇除。
筆者分別測試了一些財經及政治相關的常用關鍵字,結果顯示與美股相關的關鍵字普遍傾向樂觀情緒,這與我們的常識一致;因為美股主要指數早前已經接連創出歷史新高,持有美股的股民情緒必然傾向樂觀。為了做一些對照實驗,筆者也使用了一些政治人物相關字進行測試。
搜尋兩大美國總統候選人名字,顯示出對拜登的情緒指數高過現任總統特朗普;如果透過持續觀察這兩個搜尋結果的走勢,或許可以對美國總統大選的結果進行預測。
比較有趣的是,如果用特首林鄭月娥的英文名Carrie Lam進行搜尋,計算出來的情緒指數非常低,遠遠低於其他政治人物的統計結果。大家又認為統計結果符合常識嗎?
筆者使用的爬蟲和情緒分析的程式原碼放於Github(https://bit.ly/3igrzlq),有興趣讀者可自行下載測試不同關詞字的分析結果。
量子雪球