数学建模系列-预测模型(四)---时间序列模型
上回書說到,預測模型中的插值與擬合已經講述完畢。現在我們研究的是時間序列模型。
分類
與普通的數值擬合不同,時間序列的擬合需要考慮多種因素,本質上是一種高級的擬和方式。同時也是一種黑箱模型,
小結一下:多參數對多/單結果:神經網絡模型
單/復參數-單結果:線性回歸模型
參數極度短缺:灰色模型。
定義
可以簡單理解為自變量為時間的數據擬合模型。
底層邏輯
承認事物發展的延續性,運用過去的時間序列數據進行統計分析,推測出事物的發展趨勢;另一方面充分考慮到由于偶然因素影響而產生的隨機性,為了消除隨機波動產生的影響,利用歷史數據進行統計分析,并對數據進行適當處理,進行趨勢預測。即認真考慮時間流逝的規律性。
分析方法
與普通黑箱模型不同,時間序列要考慮的有:
1.長期趨勢(這也是所有黑箱模型考慮的)
2,季節變動
3.循環變動(根據某些規律產生)
4。不規則變動(如某些特殊節假日、特殊事件等)、
建模中一般用加法模型和懲罰模型,或者綜合兩者,底層邏輯就是將這些變動/趨勢量化后疊加、
解決方法
1.kalman filter
可以參見上一講的鏈接,了解卡爾曼濾波法。
2.時間序列平均水平法
比較簡單的算法,通過每年熟知的平均值預測;改進方法為通過每年的增長量加權平均。說句實話意義不是很大,只是列出。也可以改為微分方程預測。
3.指數平滑法
相比于方法2,指數平滑法進一步加強了觀察期近期觀察值對預測值的作用,對不同時間的觀察值所賦予的權數不等,從而加大了近期觀察值的權數,使預測值能夠迅速反映市場實際的變化。模型中參數a越大,那么近期所占的權重就越大。
S(t)=aY+(1-a)S(t-1).因此該模型需要自己設初始值S(0)和a.
可以用excel等軟件直接實現,平滑預測基于的更像是人口模型等的底層邏輯。當一次指數平滑后曲線有線性特征時,考慮二次(當平滑成直線)、三次平滑(當平滑成拋物線)加強穩定性。在一般的數據中勉強夠用了。
改進方法:當數據有一個明顯上升/下降趨勢時,可以加一個趨勢補償函數,由此來彌補原本預測帶來的滯后效應。X補償=bX原+(1-b)(\delta Y)。就是根據最近的趨勢以及原本的函數分權相加。如果已經進行過二、三階平滑,可以考慮留下最近5組數據作為實驗組來裁定是否有滯后,
前面三種基本還是線性回歸/神經網絡/微分方程的思路,對于時間導致的周期性的考慮不大。
4.ARIMA模型
在實際中遇到的時間序列往往有趨勢性、季節性等, 本節主要采用差分方法,有時還要用時間序列的變換方法,消除其趨勢性、季節性,使得變換后的序列是平穩序列,并用ARMA 序列的方法去研究。
ARMA分為AR和MA
AR(p階):X(t)=其余X(n)的加權和+白噪聲
MA(q階):X(t)=其余X(n)的移動量加權和—+白噪聲
差分方法可消除正相關但同時引入負相關
AR項可消除正相關,MA項消除負相關
AR項和MA項作用會相互抵消,通常包含兩種要素時可嘗試減少某項,避免過擬合。
(1)差分法去掉周期性、趨勢性以及隨機性
(2)取參數ARIMA(p,d,q)
(3)帶入數據求解。
mat代碼如下:
clc,clear a = text read( ’hua .txt’) ; %把原始數據按照原來的排列格式存放在純文本文件 hua txt a = non zeros ( ’)%按照原來數據的順序去掉零元素 r11 = autocorr( a) %計算自相關函數 r12 = parcorr( a) %計算偏相關函數 da = diff( a) ; %計算一階差分 r21 = autocorr( da) %計算自相關函數 r22 =parcorr(da) %計算偏相關函數 n = length( da); %計算差分后的數據個數 k =0 ; %初始化試探模型的個數 for i = 0:3 for j = 0:3 if i==0&j==0 continue elseif i ==0 ToEstMd = arima (’MALags ’,1:j, Constant ’,0 );%指定模型的結構else if j = =0 ToEstMd = ar im ARLags ’, 1:i ,’ Constant ’, ); %指定模型 的結構 else ToEstMd = arima (’ ARLags ’, 1:i,’ MALags ’, 1:j , ’Constant' ,0); %指定模型的 結構end k = k + 1 ; R( k) = i; M( k) = j ; [ EstMd, EstParamCov,logL, info] = estimate(ToEstMd ,da)%模型擬合 numPar ams = sum(any(EstParamCov )) %計算擬合參數的個數 %compte Aka i ke and Bayesian Information Criteria [ aic(k), bic(k)] =aicbic(logL,numParams,n) ; end end fprintf ('M, AIC,BIC 的對應值 ’); %顯示計算結果 chec k= [ R’,M’, aic’,bic’ ] r = input (’輸入階數R= ’) ;m = input ’輸入階數M=’) ToEstMd = arima (’ ARLags ’, 1:r ,’ 且,ag ’, 1:m ,’ Constant ’,0 ); %指定模型的結構 [ EstMd , EstParamCov , logL, info] = estimate( ToEstMd, da );%模型擬合 dx_Forecast = forecast ( EstMd, 10 ,’ Y0’, da) %計算 10 步預報值 x _Forecast = a( end) + cumsum( dx_Forecast) %計算原始數據的 10 步預測值`5.提取時間序列的周期性特征進行預測. https://www.jianshu.com/p/31e20f00c26fspm=5176.12282029.0.0.36241491UUhnZE
計算base
預測=base*factors
6.利用時間特征做線性回歸
提取時間的周期性特點做為特征,此時訓練集每條樣本為"時間特征->目標值",時間序列的依賴關系被剔除,不需要嚴格依賴滑窗截取訓練樣本。常見是將時間用0-1啞變量表達,有以下若干種特征:
將星期轉化為了0-1變量,從周一至周天,獨熱編碼共7個變量
將節假日轉化為0-1變量,視具體節假日數目,可簡單分為兩類,“有假日”-“無假日”,獨熱編碼共2個變量;或賦予不同編碼值,如區分國慶、春節、勞動節等使用1、2、3表示
將月初轉化為0-1變量,簡單分兩類表示為"是月初"-“非月初”,共2個特征
類似的月中、月初可以轉化為0-1變量
控制時間粒度,區分是weekday or weekend
觀察序列,當序列存在周期性時,線性回歸也可做為baseline
7.時間序列分解,使用加法模型或乘法模型將原始序列拆分為4部分。
拆分為4部分:長期趨勢變動T、季節變動S(顯式周期,固定幅度、長度的周期波動)、循環變動C(隱式周期,周期長不具嚴格規則的波動)和不規則變動I。參考:
https://wiki.mbalib.com/wiki/%E6%97%B6%E9%97%B4%E5%BA%8F%E5%88%97%E5%88%86%E8%A7%A3%E6%B3%95
https://www.jianshu.com/p/e6d286132690
乘法模型中SCI均為比例,加法模型中SCI與T有相同量綱。
循環變動C較為復雜,短期不體現或歸入趨勢變化中。
平滑方法:
以滑動平均作為平滑方法提取趨勢的seasonal_decompose樸素分解。
https://www.statsmodels.org/dev/generated/statsmodels.tsa.seasonal.seasonal_decompose.html#statsmodels.tsa.seasonal.seasonal_decompose
以魯棒局部加權回歸作為平滑方法的STL分解。
https://www.statsmodels.org/dev/generated/statsmodels.tsa.seasonal.seasonal_decompose.html#statsmodels.tsa.seasonal.seasonal_decompose
季節性分析。數據中有季節性因素,與整體趨勢相比顯得比較弱。
https://mp.weixin.qq.com/s?__biz=MzI1NjQ0Mzc1Mw==&mid=2247497103&idx=3&sn=ee1ab5cbf466a538f94ee4c971e027b1&source=41#wechat_redirect
應用實例:https://www.cnblogs.com/zhizhan/p/4868411.html
8.Facebook-prophet,類似于STL分解思路,在控制程度和可解釋性上比傳統時序模型更有優勢,也是一個一招鮮吃遍天的招數
https://zhuanlan.zhihu.com/p/52330017
推薦后幾種方法求解。
總結
以上是生活随笔為你收集整理的数学建模系列-预测模型(四)---时间序列模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三菱支持c语言的plc,三菱plc编程用
- 下一篇: YTO3087