常用的时间序列数据的分析两类:
·趋势分解法
简介:将时间序列分解为趋势、周期、随机三部分,并对前两个部分使用曲线进行拟合
适合场景:适合所有类型的时间序列数据,需要事先判断走势及周期性
·ARIMA法
简介:根据数据扰动项之间的相关性结构构建动态微分方程 以预测模型
适合场景:适合所有类型时间序列数据,需预先判定AR、I、MA三部分参数
趋势分解法
1.时间序列的效应分解
1)长期趋势变动
2)周期性/季节性变化
3)随机变化
2.时间序列的组合方式
1)加法模型:X(t) = T(t)+S(t)+I(t)
其中T代表趋势效应 S代表季节效应 I代表随机效应
2)乘法模型:X(t) = T(t) × S(t) × I(t)
周期震荡的幅度随着趋势性变化而变化
3.python实例预测效果-以某航运公司客运量数据为例
加法模型
加法模型 (黑点为实际Y值)乘法模型
乘法模型 (黑点为实际Y值)ARIMA法
1.平稳时间序列
只有平稳时间序列才能进行统计分析 何谓平稳
任意时间下 序列的均值、方差存在并为常数 且自协方差函数与自相关系数只与时间间隔有关 说简单点就是 围绕某个常数上下波动
AR模型
观点:时间序列当期观测值与前N期线性相关 而与前N+1无关
数学语言:X(t)仅与X(t-1),X(t-2),···,X(t-n)有线性关系,而X(t)与X(t-j) (j=n+1,n+2,···)无关
参数判别:自相关系数(ACF)拖尾、偏自相关系数(PACF)p阶截尾
MA模型
观点:当期观测值与以前时刻进入系统的扰动项存在一定的相关关系
数学语言:X(t)与以前时刻t-1,t-2,···t-m进入系统的扰动项ε (t-1),ε (t-2),···,ε (t-m)存在线性关系
参数判别:自相关系数(ACF)q阶截尾、偏自相关系数(PACF)拖尾
ARMA模型
观点:X(t)不仅与其以前的自身值有关,还与以前时刻进入系统的扰动项有关
参数判别:自相关系数(ACF)拖尾、偏自相关系数(PACF)拖尾
存疑点:
教科书的定义 问题来了 都拖尾了 还怎么定p、q参数值?
肉眼观察?总有那么几分不靠谱
可使用AIC和BIC定阶识别 实测貌似拟合的效果也一般
ARIMA模型
对非平稳时间序列使用差分(I),使非平稳时间序列转换为平稳序列
之后套路相同
Python实例分析
Github 源码在此
趋势分解法
主要使用Prophet包
代码也很简单
加了个小彩蛋 预测上证指数
至于效果嘛 hhh
ARIMA法
建模分5步
1)探索平稳性:ADF检验 若非平稳 则差分至平稳
2)绘制ACF和PACF 定阶
3)模型建模
4)残差白噪声检验
5)预测
在绘制ACF和PACF来定阶 也可以采用AIC或BIC准则来识别 统计量越小越好
代码实例中也给出了AIC准则判别参数
ARIMA还有自动调参的包-“pyramid-arima” 可以自动调参 不过有时候参数与手动识别的参数有出入
Github 源码在此 (附上彩蛋 预测上证指数)
总结下
常用的时间序列就这两种:趋势分解法和ARIMA法
学术点的数据预测效果还是不错
至于工业界真实环境的数据 就有点难说
还是要需要结合实际业务调整
网友评论