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