時間序列分析----結合ARMA的卡爾曼濾波演算法
作者:Epilogue 原文鏈接:時間序列分析補充----結合ARMA的卡爾曼濾波演算法
前言
一直也希望能夠把自己的知識共享出去,為社區補充一些東西,前段時間恰好讀到了 @fyiqi 寫的「金融時間序列分析入門(一)~(四)」,覺得其深入淺出地介紹一些理論知識的模式比較合適,因為確實一些基礎且實用的理論在社區內還沒被介紹過。比如卡爾曼濾波,在社區里幾乎沒有對它的介紹與演算法實現,因此在本貼中希望能夠在一定程度上將其補充~
本文一定程度上是對 @fyiqi 的「金融時間序列分析入門(一)~(四)」的補充,會用到其中的一些概念(如ARMA模型)
卡爾曼濾波簡介
卡爾曼濾波演算法是通過系統輸入輸出觀測數據(在本貼中為HS300日對數收益率),對系統狀態進行最優估計的演算法。由於觀測數據中包括系統(市場)中的雜訊和干擾的影響,所以最優估計也可看作是濾波過程。
卡爾曼濾波無論是在對過去值的估計(插值或平滑)、對現在值得估計(濾波)以及對將來值的估計(預測)方面都有著比較重要的作用。在本帖中主要介紹在預測方面的實現方法,希望能夠給需要用到此類方法的礦友一些啟發~
在將卡爾曼濾波演算法與ARMA模型結合時,卡爾曼濾波演算法可以在當獲得一個新的數據點()時,遞歸地更新狀態變數(預測值)的信息,可以起到對ARMA模型的修正作用,在一定程度上提高ARMA模型的預測精度。
演算法實現 part 1
首先,提取出,即HS300的日對數收益率
提取2015年去年HS300收盤價及對數收益率
一、狀態空間模型與ARMA
要卡爾曼濾波,首先要引入狀態空間模型。在這裡,「狀態」與「測量」相對,表示從數據中移除測量誤差。
在介紹狀態空間模型時,我們由淺入深,首先引入一元的局部趨勢模型1.1 局部趨勢模型
首先考慮一元時間序列(HS300日對數收益率),局部趨勢模型滿足
初始狀態s1~N(μ1|0,Σ1|0),其中μ1|0,Σ1|0是給定的。1.3 ARMA模型與線性狀態空間之間的轉換
ARMA模型的詳細解讀請參照「金融時間序列入門(二)----MA & ARMA & ARIMA」在下面的過程中,令=0(當≠0時,則在中將其減去,得到均值為0的),並令m=max(p,q+1)(後面的討論中為了簡便,只討論令m=p的情況)此時,可以令ARMA(p,q)=ARMA(m,m-1),其中如m=q-1,則?p+1,?,?m=0;如m=p,則θq+1,?,θm?1=0演算法實現 part 2
下面進入ARMA模型的演算法實現部分
ARMA模型:通過信息準則定階(詳細解讀參照「金融時間序列入門(一))
(aic-order: , (3, 2))n(bic-order: , (2, 2))(hqic-order: , (2, 2))bic與hqic均給出ar階數為2,又根據前面假設:p >= q+1,故令order = (2,1)ljung-box檢驗(檢驗殘差序列是否存在滯後相關)AC Q Prob(>Q)
lag n1.0 0.001445 0.000514 0.98192
2.0 0.018605 0.086024 0.957900
3.0 -0.002259 0.087289 0.993318
4.0 0.083168 1.810307 0.770596
5.0 0.051584 2.475918 0.780117
6.0 -0.096262 4.803670 0.569229
7.0 -0.006572 4.814565 0.682581
8.0 0.140752 9.833538 0.276904
9.0 -0.024263 9.983311 0.351838
10.0 -0.102196 12.651893 0.243791
11.0 -0.115016 16.046571 0.139411
12.0 0.072517 17.401897 0.135094
13.0 0.111749 20.634319 0.080483
14.0 -0.075790 22.127649 0.076029
15.0 -0.005695 22.136117 0.104284
16.0 0.097925 24.651090 0.076217
17.0 0.015490 24.714301 0.101290
18.0 -0.015433 24.777319 0.131174
19.0 -0.010715 24.807835 0.166965
20.0 0.114525 28.309448 0.102274
21.0 0.162293 35.372962 0.025685
22.0 -0.043516 35.883094 0.031254
23.0 -0.100106 38.594945 0.021968
24.0 -0.004349 38.600087 0.030066
25.0 0.055229 39.433107 0.033318
26.0 -0.130746 44.123087 0.014662
27.0 -0.055123 44.960590 0.016417
28.0 0.055733 45.820698 0.018188
29.0 0.085124 47.836577 0.015282
30.0 -0.133892 52.847294 0.006163
31.0 -0.093931 55.325033 0.004608
32.0 -0.033918 55.649630 0.005918
33.0 0.061328 56.715913 0.006285
34.0 0.107805 60.026497 0.003847
35.0 -0.060198 61.063710 0.004126
36.0 0.088619 63.322414 0.003275
37.0 0.056958 64.260011 0.003593
38.0 -0.013537 64.313233 0.004847
39.0 -0.017196 64.399532 0.006412
40.0 0.014103 64.457863 0.008440
通過ljung-box檢驗,判斷殘差序列是否存在滯後相關。得到滯後20階以內的p-value均大於0.05,故可以判斷殘差中沒有顯著的序列相關性,可以進行下一步分析。
1.3.1 Harvey方法:推導
將ARMA轉化為狀態空間模型主要有Akaike、Harvey、Aoki三種方法,在這裡只介紹較為常用的Harvey方法。1.3.1節的推導過程中公式較多,但邏輯清晰,讀起來不會費力。不過側重於應用的小夥伴可以跳過該節,直接看Harvey方法的結論與演算法實現部分
推導過程如下:
Harvey方法中,給出了具有m維狀態向量的狀態空間的一種形式,該狀態向量的第一個元素是yt,即=。的其他元素通過遞歸得到。 由ARMA(m,m-1):上式中:繼續,考慮,可以得到:可以得到
繼續,可以得到→→→→?→ 根據遞歸,有:最終有1.3.2 Harvey方法:結論
將上述方程綜合起來,我們得到如下形式的狀態空間模型:
Qt=。在(3)式中,AR與MA的係數被直接用在了系統矩陣里。
演算法實現 part 3
下面進入Harvey方法的演算法實現部分,參見原文查看
二、結合ARMA模型的卡爾曼濾波演算法
2.1 卡爾曼濾波基本公式
卡爾曼濾波(Kalman filter)的目標是:當獲得一個新的數據點時,遞歸地更新狀態變數的信息,即遞歸地得到在給定數據Ft=y1,?,yt條件下st+1的條件分布和模型。由於卡爾曼濾波早已有成型的公式,因此公式的推導過程在這裡不做贅述,直接給出。
對於(2)式所給出的狀態空間模型,給定初始值s1|0,Σ1|0,卡爾曼濾波的演算法為(公式中上角標T表示轉置):2.2 結合ARMA模型的卡爾曼濾波演算法
對於由Harvey方法(即(3)式)所給出的狀態空間模型,給定初始值s1|0,Σ1|0,卡爾曼濾波的演算法為(公式中上角標T表示轉置):
其中T,R,Qt 均由Harvey方法給出。確定初始值s1|0,Σ1|0的方法:
演算法實現 part 4
下面進入卡爾曼濾波預測的演算法實現部分
預測收益率一步漲跌準確率——ARMA + Kalman:0.555555555556
預測收益率一步漲跌準確率——ARMA:0.469135802469
可以看到,相比於ARMA模型的擬合結果,ARMA+卡爾曼濾波演算法所得到的擬合結果更為平滑,說明在經過卡爾曼濾波調整之後,對於雜訊過濾效果更好。因此,利用卡爾曼濾波對時間序列進行平滑是大有可為的。同時,在預測收益率一步漲跌時,ARMA+卡爾曼濾波演算法相比於單純的ARMA演算法來說,準確度有了近10%的提高。雖然相對其他諸如機器學習等預測方法來說,預測準確度還不夠,但卡爾曼濾波對於ARMA的調整效果值得借鑒。參考文獻
《金融時間序列分析》 第2版 Ruey S.Tsay著 王輝、潘家柱 譯
其他文章推薦:
金融時間序列分析入門(一)
金融時間序列入門(二)----MA & ARMA & ARIMA
金融時間序列入門(三)--- 季節模型
金融時間序列入門(四)--- ARCH、GARCH
基於時間序列的協整關係的配對交易
基於小波變換的時間序列預測
時間序列的小波去噪
推薦閱讀:
※RNN最大化條件概率參數模型預測時間序列
※量化策略系列教程:18MACD策略
※掘金量化擂台賽
※【量化】均值回歸入門
TAG:时间序列分析 | 量化 | 卡尔曼滤波KalmanFilter |