機器學習預測股價趨勢,修煉數據分析與投資能力的最強專案
原始文章
上周雙十連假,我因為碩班期末考與颱風來襲的關係,所以沒有安排戶外活動,但也剛好有一些空閒時間,可以把我的個人專案佈署到Google Cloud Platform。
我之前寫過一篇文章〈身為資料科學家,為什麼你需要經營自己的作品集網站〉,分享我認為Side Project對資料科學家來說為什麼重要。在我的Side Project中,規模最大的一項是用Python與機器學習模型做股價分析與預測。這個專案在2020年底開始蘊釀,從前期規劃到多次技術試錯,終於在今年六月,也就是COVID-19最嚴重的時候正式上線實戰,並啟動後續的PDCA循環。這個專案讓我在專業能力上有大幅度的成長,把專業能力與投資能力綑綁在一起,是我近期做過最聰明的人生決策之一,因此特別記錄下來與大家分享。
一、能變現的Side Project可以走更遠
Side Project帶來的成就感很重要,經驗與專業能力提升很重要,但如果能加上一些額外的附加價值,這個專案可以走更遠,像是錢。Side Project要能變現,常見的方式是提供免費的網路工具吸引流量,再刊登廣告或是業配合作獲取利潤,但要實際走到這一步,不免需要分散心力在資料科學以外的領域,像是經營網站與社群媒體。我之所以大膽的把股價預測稱之為「最強」,因為這本身就是一個可以變現的專案,並且可以同時累積數據分析及投資操作經驗,在投資與程式設計同時躍升為顯學的時代,把這兩條學習路徑融合在一起,似乎自然而然,也合情合理。當然,這條路的學習成本非常高,但翻山越嶺之後的美景也同樣讓人心神嚮往。
股價預測這個專案有一些不得提的特性。首先,以數據預測的角度來看,越近期的預測結果應該越準確,像是同時預測明天與七天後的產品銷售量,前者的準確率理論上較高。應用在股票投資上,這會導致偏短線的操作風格。
其次,數據與金融市場的互動會衍生出一個悖論:數據分析對於越近期的預測結果會越準確,但是在投資市場中,如果把時間維度縮得太小,容易被短期震盪所干擾,進而影響長期的趨勢判斷。兩者看起來相互抵觸,我對於這樣詭譎的特性也暫無定見,不確定應該作出什麼樣的調整,或是當成哲學性的觀點思考即可,無所作為才是正解,這實際上也不影響專案的規劃與進行。
在工作上,開始執行每一個數據分析專案前,我們都習慣不停的問自己,「這個專案最後的Action是什麼」。在多數情況下,不能產生Action的專案等於是一個沒有價值的專案。但是在股市分析的專案中,可行動、可優化、可獲利,我想不到其他更適合資料科學家練功的專案了。
二、練習像老闆一樣分配資源
我認為老闆和員工最大的差異,是老闆有權調度最大量的資源,包括人力資源、財務資源、硬體資源等。當Side Project有獲利潛能時,我們就能試著切換到老闆的視角,評估是否加碼投資,應該如何分配投資項目,甚至進一步進行風險評估與ROI計算。我相信這在策略性思考,以及全局觀的訓練上都有非常大的幫助。
在股價預測這個專案上,我進行的投資項目有兩個,訂閱經濟新報(TEJ)的資料庫,以及使用Google Cloud Platform。
TEJ資料庫
學會Leverage專業的合作夥伴,是我近期在工作上最有感觸的成長之一。網路上雖然有許多免費的資料,但大部份資料都需要手動收集,或是透過網路爬蟲收集,這兩者都必須投入相當高的時間成本。網路爬蟲看似方便,但我認為這依舊是一個高勞力密集的工作,因為網站的結構可能會修改,爬蟲可能會被伺服器阻擋,光是處理這些不定期的大小事故就非常費心費神,而這才只是專案的第一步。時間的投入是所有資源中的重中之重,直接購買別人收集好的資料才是一勞永逸的方法。
另外,有一些開放資料是以網頁或PDF格式釋出,像是財報資料,如果要自己研究將怎麼網頁上的表格整理成可分析的資料,這會是一條漫長且絕望的道路。真的,我試過。
Google Cloud Platform
我的電腦是Mac Pro,平常操作的溫度大約在65℃左右,下圖是我在跑運算時的電腦溫度,當時的CPU使用率100%,溫度接近驚人的100℃。電腦過熱可能會讓主機板燒掉,也容易導致電池膨脹,不管哪一項聽起來都很危險,都不是我們所樂見的情況,但這確實是個人修煉路上必經的阻礙。
使用付費的雲端平台有另外一個副加效果,我們會對自己的程式設計品質與效能更加要求,因為這類型平台通常是以流量或運算時間計費,計算時間越久,費用也就越高。在工作上,當時間不充裕時,通常不會頻繁針對效能進行優化,如果一段程式需要跑八個小時,那就前一天先把檔案丟下去跑唄。但是當時間就是金錢,而且是自己口袋的金錢時,再怎麼想破頭也會想出新的優化方法。
大數據分析需要硬體資源,需要運算能量,一般人用家用電腦根本玩不起,就算使用散熱良好的桌上型電腦,沒有過熱燒掉的風險,運算時間也可能會一路到海枯石爛,尤其對於深度學習這類型的新技術,那更是連想都不用想。幸好,現在GCP、AWS、Azure等雲端平台非常方便,功能非常完整,並且完全是一般人可以負擔得起的價格,幾乎可說是運算能量平民化。以電腦的CPU來說,目前市面上常見的規格是4-8核心,但是在雲端平台上,我們可以直接使用32核心的機器作運算,而且通常是以使用量計算。依照我目前的使用狀況,每個月的費用在3000元以內可以搞定,但如果Side Project沒辦法獲利,這3000元只會是全然的支出,刷卡前總不免猶豫再三。
其他服務
如果你想將網路輿情資料作為預測模型的材料,有許多公司都提供了這樣的爬蟲服務,如Octoparse與Parsehub。一樣只需要付費,就可以藉助專業的合作夥伴搜尋資料,並將資料打包下載回自己的資料庫,我們就可以更專注在更有價值的項目上,像是輿情分析、情緒分析及自然語言處理(NLP)。但自然語言本身也是一門深不見底的學問,尤其中文的斷句比起英文更為複雜,如果你不想一頭栽進這個無底深淵,那不妨再次藉助專業的合作夥伴,像是Google及AWS都提供了自然語言分析的服務,只需要幾行程式碼就可以快速納入專案。然而,以上提及的這些都是付費服務,這再次回到了這篇文章的核心概念,可以變現的Side Project才能走更遠,也更有機會讓自己接觸到更多元的分析領域。
至於將網路輿論作為投資依據是否合理,這就超過本文討論的重點了,只能說這件事在技術上完全可行。
三、拓展軟體開發相關技能
在工作上,由於組織分工的關係,數據分析師、資料科學家、資料工程師等職位通常是各司其職,但偶爾也會有一些見樹不見林的遺憾。但是當Side Project的規模大到一定程度後,許多新的挑戰會接踵而來,像是需要管理雲端平台,需要決定要用什麼規格的機器,需要搞定資料庫與連線等問題,甚至可以依照自己的喜好開發Dashboard,或是LINE與Telegram的警示機器人。這些任務在狹義的定義上可能早就超出了資料科學家的防守範圍,但對於一個希望見樹又見林的資料科學家來說,我再次想不到其他更適合資料科學家練功的專案了。
結論
有些人認為股市是由人所組成,人類行為不可預測,所以股市也不可預測,因此對於用程式作股價預測的流派感到不以為然。我認為雙方主要的認知差異在於,所謂的預測不是聖杯,不是預測漲5%就是不多不少5%,預測有誤差是常態,完全誤判的情況也常常發生,就像大家每天在看天氣預報,也不會苛求最高溫與最低溫必須完全精準,這不合理,也不切實際。因此,如何以預測結果為基礎,在可能的誤差範圍內找到最適合的進出場時機,這是在技術面以外,第一個我們需要面對的命題。
當某些重大、突發、難以量化的金融事件或黑天鵝事件發生時,人腦的判斷很可能會比電腦還要準確,像是COVID-19疫情最嚴重的時候,美股在10天內經歷了4次熔斷,我們完全可以預期模型會失效,這種情況確實更適合讓人為意志凌駕於模型之上,但這個案例已經屬於極端事件,在其他較小規模的事件發生時,是否仍該繼續相信模型的預測結果,這是第二個我們需要面對的命題。
雖然預測模型不是永遠管用,然而,在一般狀況下,只要模型的預測結果比人為預測還要精準,或是可以大幅減少人工研讀資料的時間,它就不失為一個可用的方法。撇開機器人交易的情況不談,數據分析終究只要輔助,最後做決策的還是人,人機協同才是AI時代的的正解。我認為最健康的心態,應該是把預測模型當成一位能力強大、不時出包,且溝通能力不好的同事,如何與這位同事共事需要一些經驗的累積。即使這位同事的工作表現良好,也可能因為個人操作經驗不足而虧損,這部份之後有機會可以再分享。
最後的最後,我私心想推薦一下經濟新報TEJ的資料庫服務。這不是業配,TEJ似乎也還沒有開發推薦碼的功能,所以這一段是出自內心的使用者推薦。國外有不少公司以美股或虛擬貨幣的資料庫作為產品販售,但台股的市場規模畢竟遠低於美股,一百個人當中,需要這類型服務的可能連一個都沒有,在這個小型且小眾的市場中生存確實不容易。我希望能將這個好服務推薦給大家,也希望TEJ能夠長久經營,讓我不用每天檢查爬蟲們是否健健康康。
經濟新報TEJ E Shop