時間序列分析的模型應用 – 股價預測


©作者 | 董葉

時間序列是一種特殊類型的數據集,其中隨時間測量一個或多個變量。

 

例如天氣變化, 股票價格變動,時間序列分析即是通過構建模型反映時間序列中包含的動態依存關系,並借以對未來發生的變化做預測。對最近7天的天氣、明天收盤股價的預判。

01 時間序列分析的模型分類

目前發展的時間序列分析模型主要有三種:

1.1 經典時間序列模型

經典時間序列模型是一系列統計模型,例如自回歸模型(AR)、整合移動平均自回歸模型(ARIMA), 廣義自回歸條件異方差模型(GARCH),它們基於時間序列內的時間變化,並且適用於單變量時間序列,這些模型一般只適用於時間序列。

1.2 監督模型

線性回歸、隨機森林、XGBoost 這類經典的機器學習算法,雖然不是專門為時間序列分析而設計,但是在變量預測問題有着很好的效果。

1.3 深度學習模型

長短時記憶模型LSTM、Facebook開源時間序列庫Prophet,亞馬遜DeepAR, 此類模型能夠自動從原始數據和不完整數據中學習和提取特征,同時考慮時間序列長期和短期的數據依賴。

02 時間序列數據的主要特性

2.1 時間序列數據的三個組成部分:季節性、趨勢和噪聲

季節性是出現在時間序列變量中的重復運動。例如,一個地方的溫度在夏季較高,而在冬季較低。可以計算平均每月溫度並使用此季節性作為預測未來值的基礎。

趨勢可以是長期向上或向下的模式。在溫度時間序列中,由於全球變暖可能會出現趨勢。例如,除了夏季/冬季季節性之外,很可能會看到平均溫度隨着時間的推移略有上升。

噪聲是時間序列中可變性的一部分,既不能用季節性也不能用趨勢來解釋的部分, 始終存在的誤差項。

2.2 時間序列數據中的自相關

自相關是時間序列的當前值與過去值之間的相關性,這意味着可能用歷史數據預測未來。自相關具有非常強的合理性,因為我們的歷史觀讓我們自然的去相信:歷史會重演,過去的經驗可以被用來反映未來。

2.3 時間序列中的平穩性

平穩性是指時間序列數據的變化特征維持穩定,數據的歷史分布和未來分布趨於一致。通常股價走勢數據、天氣溫度數據具有趨勢性、周期性,並不直接滿足平穩性特征,一般通過差分法將非平穩數據轉換成平穩數據,例如股價的漲幅,溫度按月度同比變化值,通過去除時間序列中趨勢、季節性變化來平穩化數據。

03 實際應用 - 股價預測

預測股市的表現是最困難的事情之一,但時間序列分析可以為股票的技術分析提供參考,下文將會采用經典時間序列模型ARIMA以及深度學習LSTM模型對股價進行預測。

其中我們將會使用 Akshare 庫下載國內A股交易數據, 並且以平安銀行(股票代碼:000001)為例。

經典時間序列模型 – ARIMA

ARIMA 整合移動平均自回歸模型,這個模型適用於非平穩非周期性時間序列分析ARIMA模型有三個分量,通常以ARIMA(p,d,q)表示模型。

AR為自回歸項,p為自回歸項數;

I為差分項,d為使之成為平穩序列所做的差分次數(階數);

MA為"滑動平均",q為滑動平均項數。

其中L是滯后算子(Lag operator),d in Z, d>0。

通常分析時間序列數據,可以參照下圖:

對序列平穩性判斷,通常我們采用ADF檢驗:

股價的原始序列不滿足平穩性條件, 我們需要進行平穩性處理,一般采用差分和變換的方法,下面是確定模型相關參數的步驟,

1對於非平穩時間序列要先進行d階差分運算,化為平穩時間序列

2 對得到的平穩時間序列分別求其自相關系數ACF 和偏自相關系數PACF,通過對自相關圖和偏自相關圖的分析,得到最佳的階層 p 和階數 q

3 由以上得到的d、p、q,得到ARIMA模型,然后開始對得到的模型進行模型檢驗。

從上圖可以得出我們初步的模型可以選擇 ARIMA(1,1,1)

Auto_ARIMA

除了用以上圖形觀察的方法選擇模型參數之外,我們可以借用 pmdarima.arima 內置的Auto-ARIMA包自動迭代(p,d,q)三個參數,通過窮舉的方法找出所有可能參數,從而求得最小AIC的模型。

采用模型作為預測:

逐點預測:

上面是采用ARIMA 模型預測最近一天的結果,屬於逐點預測,如果用來預測未來N天的結果,模型反饋就比較差了,連續預測期數越長,效果越差。

上面的例子中,逐點預測的結果比完整序列預測更精確,但這有點欺騙性。

在這種情況下,除了預測點和最后一次預測的數據點之間的距離,模型其實不需要了解時間序列本身,因為即便它這次預測錯誤了,在進行下一次預測時,它也只會考慮真實結果,完全無視自己的錯誤,然后繼續產生錯誤預測。

雖然這聽起來不太妙,但其實這種方法還是有用的,它至少能反映下一個點的范圍,可用於波動率預測等應用。

LSTM 長短期記憶模型

LSTM 廣泛用於序列預測問題,並已被證明非常有效。它們運行良好的原因是因為 LSTM 能夠存儲重要的過去信息,而忘記不重要的信息。LSTM 有三個門:

輸入門 input gate :輸入門將信息添加到細胞狀態

遺忘門forget gate :刪除模型不再需要的信息

輸出門output gate :選擇要顯示的信息作為輸出

LSTM中采用專門設計的“門”來引入或者去除狀態信息,類似信號處理中的濾波器,允許信號部分通過或者通過時被門加工了;有的門也跟數字電路中的邏輯門類似,允許信號通過或者不通過。

以下是Python實現過程:

1.導入數據,原始數據進行歸一化處理,使數據介於[0,1]

2.利用前期數據預測當期,數據集(前期股價,當期股價)當做(X,Y)

 

3.建立及訓練 LSTM 模型,模型很簡單,就只有一個LSTM層及output層,其中並沒有特別處理季節效應,模型訓練100輪。

從預測結果上看,初次構建的LSTM 模型進行逐點預測的效果不如ARIMA模型,我們可以通過調整LSTM層數、添加dropout值或者增加epoch數來提高模型效果。

關於模型參數的調整,網絡上有很多文章可以借鑒,就不在贅述了。

預測股市的表現是最困難的事情之一,預測涉及的因素很多——物理與心理、理性和非理性行為等。所有這些因素結合在一起,使股價波動且難以准確預測。

本文討論的模型方法僅僅是用來展示時間序列預測的分析思路和方法,並不足以應用在實際投資當中。

時間序列預測是一個非常有趣的領域,除了股價、天氣預測還有航班、門票銷售相關的其他數據場景可以讓我們探索。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM