這篇文章是2018年剛發表的paper,算是非常新但是滿有趣的方法,針對一般的股票建構一個預測隔日價格的LSTM模型,以下就是他的方法思路。
動機
股價預測一直都是非常熱門但具有挑戰性的機器學習題目,通常這類的文章不乏是使用各種的資訊,例如股價、技術指標、公司獲利、新聞資訊,並將這些資料餵給一些模型,例如 linear regression, SVM, 或是 NN 來預測未來股價。雖然這些方法被證實是可以使用的,但是預測能力不佳。因為當中有些資訊不但對於預測未來股價沒有幫助,反而會擾亂預測的準確度。
此篇文章的貢獻
這篇文章提出了 multi-input LSTM model,來使用額外的神經網路額外架構,從低相關連的資訊找出有價值的,並且濾掉不必要的雜訊。並且利用了額外的LSTM邏輯來建構「mainstream」的結構,並用「mainstream」所計算出來的資訊,來遺忘或記憶有用的資訊(gates)。此架構比原本的LSTM效果要更好。
MI-LSTM
這是個特別針對金融股價預測所研發的架構,其原理是先找出想要預測的timeseries,並且找出N條高度正相關的timeseries(以股票而言,就可能是同類型的公司股價),還有N條最負相關的timeseries當作是此預測模型的輸入資料。有了這些資料後,下圖就是MILSTM的整體架構,其中 Y 是欲預測的股票的歷史股價,而 \bold{X}_n^iXni 就是第 i 個高度正相關的timeseries,而\bold{X}_n^iXni 就是高度負相關的 timeseries。最後 Xi 是大盤的 timeseries。
上圖從左到右的解說如下
- LSTM:此圖中的最左邊部分,就是簡單的LSTM計算而已,假如想要知道什麼是LSTM,可以參考這篇關於LSTM的詳細解說。
- Average:往右,可以看到高度正負相關的timeseries的LSTM,額外經過平均的運算,至於為什麼要這樣做,相信是效果比較好的緣故,當然實做時也可以拿掉、或是使用不一樣的的計算方式。
- Multi-Input LSTM:而比較有趣的地方,在於其中紅色的Multi-Input LSTM這個部分,在於它像是一個變種的LSTM架構,多了很多的 gate(請參考LSTM文章來瞭解什麼是「gate」)。此MILSTM可以額外展開如下圖,可以發現跟一般的LSTM長的差不多,但是多了有顏色的三條資訊流,並且此三條資訊流都有額外的gates來篩選要儲存的資訊。
- 接下來是Attention Layer,其實跟LSTM原本的Attention是非常類似的,還是非常建議現瞭解LSTM是什麼,不然到這邊你應該已經頭很昏了XD。
實驗結果
這篇文章使用了300檔股票的歷史股價進行訓練,單一一檔的股票歷史資料一定不足,但是假如300檔串在一起,則樣本數應該就足夠了,既然都已經發了期刊,當然實驗結果要比別人好,所以以下是實驗的結果,當中的MSE就是誤差(mean square error)的意思:
可以發現MI-LSTM獲得了最小的實驗誤差,相比起其它的model效果更好,而其它的model屬於LSTM的變形,這邊就先不介紹了。可以參考這篇LSTM文章。接下來,他們進一步分析了MI-LSTM中,每一類input的效果,種共有以下四類:
- Mainstream:欲預測的股票其歷史股價
- Positive:高度正相關的一群股票
- Negative:高度付相關的一群股票
- Index:大盤
下圖就是這四種不同的資訊流在神經網路中,通過softmax的時候的權重隨著訓練次數的變化:
最後可以發現Mainstream跟Index的資訊是最有效的,大盤對於股價的影響是非常大的,與投資時的狀況符合一致,大盤漲跌對於個股的影響很大。另外可以發現Positive跟Negative的權重被降低了,代表雖然這些資訊有很價值,但是當中也有很多的雜訊,所以權重被有效的分配。
選股策略
這篇文章提出了一種選股的策略,對於所有股票,都判斷明日的漲跌,並且每日選出漲跌最佳的20檔股票,不考慮手續費,可以得到以下每段時間的歷史報酬:
可以看到MI-LSTM的效果比傳統的LSTM和大盤還要好,當然考慮了手續費後效果可能會打很多折扣,甚至是虧損。要是我的話,會想辦法增加預測時間的長度(但預測難度也可能會增加),從每天變成每個禮拜,這樣手續費可能比較不那麼誇張多。但我猜他們可能也有做過類似的實驗,但沒有成功?或是他們覺得這樣已經很好了?
實做上建議使用pytorch或是tensorflow會比較簡單,這篇文章只是簡單的介紹其架構,然而要寫程式的話,還是利用paper中的數學公式,會比直接看架構圖更好理解和實做,會比較好喔!