ARIMA 及 PROPHET 預測股價

機器學習股價實驗(一):時間序列及 Fackbook PROPHET

Chris Lee
工程隨寫筆記
Mar 17, 2022

--

買對股票賺大錢是每個人夢寐以求的目標,在機器學習火紅的時代,能否無腦讓電腦幫我們預測股價,透過純技術分析達到目標,是我們想實驗的。

股價有著高度的時間特性,在一般的直覺中,會隨著淡旺季有季節規律,因此時間序列模型肯定是預測股價的首選方法之一,下面就使用時間序列的處理方式,預測台股 0050 實驗。

本文手法參考此篇文章,並且改以台股作爲標的重現。

資料準備

我們使用 FinMind 抓取台股資料,時間從 2010~2021 年,語法如下:

簡單檢視一下資料,將以收盤價 Close 爲主要 Lable 進行分析。

可以很明顯看到,在 2020/3 因爲疫情關係下崩,然後開始井噴~

特徵工程

只有 OCHL 及成交量資料是不夠的,通常需要做特徵工程來輔助模型預測,我們使用滯後指標(Lagging Indicator)來輔助預測。

我們使用簡單移動平均線(SMA)、指數移動平均線(EMA)、相對強弱指數 (RSI)及異同平滑移動平均線(MACD)作爲特徵。

SMA:一段期間的股價計算平均值

EMA:根據日期指數遞減加權,計算移動平均值,日期愈近的比重愈高

RSI:觀測買賣超指標

MACD:透過EMA觀測走勢量

接下來要做兩個處理,第一個是將 close 做 t-1 的動作,主要是我們想要用滯後資訊來預測下一日的股價。

第二是刪除掉有 null 的資料,讓資料保持完整性。

最後是訓練資料及驗證資料,畢竟股價會隨著時間越大波動越大,因此驗證資料抓一個月就好。

ARIMA

我們使用 Auto ARIMA 建模,估計 p、d、q 參數,詳細參考這裡

看到模型結果都笑了,ARIMA(0,0,0) 不就代表白噪音模型 White Noise Model,是無法預測的隨機序列😂。

爲了比較不同演算法能力,我們還是把它做完。

PROPHET

Prophet 是 Facebook 開源的時間序列模型套件,以簡單好上手及多樣的視覺化圖表聞名,詳細可以參考官方文檔

我們可以使用 model_fbp.plot_components(forecast) 來顯示模型的細節內容。

最後將驗證資料放進去預測看看。

可以看到 Prophet 的表現能力好一點,想深入研究的人可以擴大預測區間或是增加參數,相信模型的預測能力都會有所提升。

從上面實驗結果可以發現,時間序列的 RMSE 並不算太高,但隨着時間拉長應該波動會更大。而且我們是用較穩定的 0050 去預測,如果是個股的話表現應該會更差。

下次我們嘗試使用 Kaggle 流行的演算法試試看,是否能突破時間序列的表現。

--

--

Chris Lee
工程隨寫筆記

隱身在金融業的資料科學家,部分文章會在個人部落格唷 https://chrisnote.com/