台積電股票時間序列預測-使用ARIMA模型、Prophet模型預測收盤價

Jian An Lin
芬鐵克 FinTech
Published in
Aug 24, 2022

根據時間序列的歷史資料來預測未來,進行預測的前提為序列資料是定態的,即序列的基本特徵不會發生大的改變,以下使用ARIMA模型、Prophet模型預測台積電股票的收盤價。

目前取得歷史資料的API集成已有多個函式庫可以使用,本文使用yfinance(Yahoo Finance)作為資料來源。

載入歷史資料

使用Yahoo Finance可以很輕鬆的取得歷史資料,由下圖可以看見拿到了從2000年至2022年8月的歷史資料,共有5655筆數據,包含了當日的開盤價、最高價、最低價、收盤價、交易量、股息以及是否有股票分割(拆股)等資料,接下來就要進行資料處理。

台積電歷史股價資料細項
Figure 1. 台積電歷史股價資料欄位
台積電歷史股價資料
Figure 2. 台積電歷史股價資料(前)
Figure 3. 台積電歷史股價資料(後)

台積電歷史收盤價圖表

將收盤價用matplotlib繪製圖表,可以看見歷史價格的變化,可以觀察出近二年台積電真的漲翻天,接下來究竟會如何呢?

台積電歷史收盤價折線圖
Figure 4. 台積電歷史收盤價圖表

計算簡單移動平均與標準差指標

時間序列常使用移動平均作為預測的依據,因為短期內平均可以觀測出趨勢,標準差則能判斷出波動性,所以使用價格分別計算了簡單移動平均SMA3、SMA7、SMA30以及標準差STD3、STD7、STD30作為模型的輸入。此外還將月份、星期、週數也做為訊號之一,在時間序列的模型中也能看出是不是特定的時間點會有特定的變化?

計算移動平均與標準差指標
Figure 5. 計算移動平均與標準差指標

切割訓練資料與測試資料

我們需要將資料分為二等分,一份作爲模型的參考的數據,並以這些數據找出相對的模型結果,再將測試資料丟入訓練好的模型中進行預測。

本文將訓練集設定成2000年–2019年,測試集為2020年至2022年–08月,讓我來看看模型預測的結果如何?

ARIMA模型

使用ARIMA模型預測台積電收盤價
Figure 6. 使用ARIMA模型預測台積電收盤價
RMSE of ARIMA: 9.542232073400012
MAE of ARIMA: 6.83280169777028

Prophet模型

使用Prophet模型預測台積電股價趨勢
Figure 7. 使用Prophet模型預測台積電股價趨勢
使用Prophet模型預測台積電股價趨勢
Figure 8. 使用Prophet模型預測台積電股價趨勢
RMSE of Prophet:	 16.372098002143794
MAE of Prophet: 12.26518461707087

總結

Figure 9. ARIMA模型與Prophet模型預測結果圖

由圖表與誤差可見ARIMA模型預測結果較好,那麼這樣的模型能帶給量化交易者什麼樣的訊息呢?神經網路LSTM預測的結果又如何?下節待續。

感謝 @CYehLu 留言ARIMA模型結果是(0,0,0)?!基本上ARMA模型分析的對象都是定態且非白雜訊的序列,所以分析的第一個步驟是使用ADF單根檢定判斷定態性,再用Ljung-Box檢定判斷是否為白雜訊。本文是使用ARIMA模型,I代表時間序列差分的階數,可以透過差分來讓序列為定態的(例如:將收盤價一階差分成報成率),但本文結果是ARIMA(0,0,0)表示自回歸模型、移動平均模型、階數都為0階,根據公式定義剩下常數與誤差項,所以可以想像成某種形式的線性回歸的結果。時間序列分析的下一篇我會使用更合適的例子進行分析(例如:美國消費者指數CPI)

很開心你有看到最後,如果你認為這篇文章有幫助到你,請幫我拍手!

對於量化交易有興趣的朋友歡迎訂閱與分享。

原始碼底加:P

--

--