数学建模系列-预测模型(四)---时间序列模型

上回书说到,预测模型中的插值与拟合已经讲述完毕。现在我们研究的是时间序列模型。

分类
与普通的数值拟合不同,时间序列的拟合需要考虑多种因素,本质上是一种高级的拟和方式。同时也是一种黑箱模型,

小结一下:多参数对多/单结果:神经网络模型
单/复参数-单结果:线性回归模型
参数极度短缺:灰色模型。

定义
可以简单理解为自变量为时间的数据拟合模型。

底层逻辑
承认事物发展的延续性,运用过去的时间序列数据进行统计分析,推测出事物的发展趋势;另一方面充分考虑到由于偶然因素影响而产生的随机性,为了消除随机波动产生的影响,利用历史数据进行统计分析,并对数据进行适当处理,进行趋势预测。即认真考虑时间流逝的规律性。

分析方法
与普通黑箱模型不同,时间序列要考虑的有:
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)差分法去掉周期性、趋势性以及随机性
数学建模系列-预测模型(四)---时间序列模型_第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

推荐后几种方法求解。

你可能感兴趣的:(数学建模系列+算法系列,数据建模)