預測股價可以更準嗎?Google提出TFT新解法
如何藉由過去數值的變化趨勢來預測未來,這在許多領域都是一件重要的事情,例如精準地預測商品未來的銷售量會對公司帶來多大的幫助。在統計與機器學習領域中,這類的問題被稱為時間序列分析(Time Series Analysis)。除了過去一些經典的統計模型(e.g. ARIMA)外,在深度學習當道的時代,同樣也有新的模型架構被提出,本次為讀者們介紹的就是Google團隊提出的temporal fusion transformers (TFT)模型。
相對於過去提出的深度學習模型,TFT希望解決的問題包含:
- 時間序列問題中,我們可能會希望讓模型同時觀察到 a. 不隨時間改變(time-invariant)的特徵, b. 隨時間變化的歷史特徵(observed inputs), 以及 c. 已知的未來特徵(future inputs)。由於這三類輸入特徵在時間上數量不同,因此單純將所有特徵合併在一起處理可能並非最好的做法。
- 除了單純預測未來某一天的數值,若能預測未來一段時間的數值(multi-horizon forecasting)對於實際使用上可能更有幫助。另外在預測數值上,除了預測單一數字(e.g. 平均數)外,提供一個數值可能坐落的範圍(區間估計)也能增加應用的決策彈性。
- 現有常見的模型解釋方法(e.g. LIME, SHAP)並不適合用於時間序列問題上。
在本篇文章中,google團隊以近年最夯的Transformer模型為基底,並設計特化的架構將不同性質的特徵分別以不同的模組做處理,再使用LSTM與特化過的自注意力機制使模型,能夠根據任務特性關注短時序或長時序之間的關係,最後,在輸出時TFT應用了分位數迴歸(quantile regression)的概念,使其有區間估計的能力。
更重要的是,由於TFT設計的特化模組Variable Selection Network與自注意力機制的性質,使用者可以針對模型進行預測所使用的特徵做觀察,達到傳統機器學習中萃取特徵重要程度(feature importance)的作用。在文章的範例展示中,也可以透過TFT來觀察資料內含的時間趨勢,例如電力使用會以天為單位做循環、而店家的銷售量會以週為單位做循環等,以及時間序列資料中是否有突發的事件。不免俗地,在文章提到的四個公開資料集中,TFT都拿到了最佳成績。目前在github上無論是tensorflow或是pytorch都有較完整實作TFT的程式碼,在Python的Darts套件中,也有納入TFT模型供使用者快速使用。
還在為時間序列問題而煩惱嗎?也許TFT是你的最佳選擇!
Paper with codes : https://paperswithcode.com/paper/temporal-fusion-transformers-for
google 官方 github:https://github.com/google-research/google-research/tree/master/tft
(撰稿工程師:蔡岳霖)