[Python][pmdarima] ARIMA时间序列模型学习
背景
前段时间参与了一个快消行业需求预测的项目。其中,用到了移动平均法、ARIMA、Xgboost等方法进行预测,现在打算总结一下ARIMA。
因为项目的销售数据属于私密数据,这里用网上找的一份案例数据用于展示。
构建ARIMA模型可以用到statsmodels库和pmdarima库。我这里用的是pmdarima库,这个库有一个优点是能够自动地对ARIMA模型的参数进行自动确定。
1、建模步骤
2、ARIMA模型
- 首先, A R M A ( p , q ) \color{red}ARMA (p,q) ARMA(p,q)称为自回归移动平均模型,由 A R ( p ) AR(p) AR(p)和 M A ( q ) MA(q) MA(q)模型结合而成,公式为: y t = μ + ∑ i = 1 p γ i y t − i + ϵ t + ∑ i = 1 q θ i ϵ t − i y_t=μ+\sum_{i=1}^p \gamma_i y_{t-i} +\epsilon_t + \sum_{i=1}^q \theta_i \epsilon_{t-i} yt=μ+i=1∑pγiyt−i+ϵt+i=1∑qθiϵt−i 其中, μ μ μ为常数项; p p p为自回归阶数; γ i \gamma_i γi和 θ i \theta_i θi为待定系数; ϵ t \epsilon_t ϵt为误差。
A R ( p ) AR(p) AR(p)描述当前值 y t y_t yt与历史值之间的关系。
M A ( q ) MA(q) MA(q)关注的是自回归模型的误差项的累加,有效地消除预测中的随机波动。
有些时间序列可能呈现出季节性、周期性波动。这样的时间序列肯定产生于非平稳的随机过程,从而不可以直接套用 A R ( p ) AR(p) AR(p)、 M A ( q ) MA(q) MA(q)或 A R M A ( p , q ) ARMA(p,q) ARMA(p,q)之类的平稳随机过程来模拟。
对于非平稳的时间序列,应该将其平稳化。其中,差分化是最常用的平稳化方法。然后,再使用 A R ( p ) AR(p) AR(p)、 M A ( q ) MA(q) MA(q)或 A R M A ( p , q ) ARMA(p,q) ARMA(p,q)来模拟已经平稳化的时间序列。这就是所谓的差分自回归移动平均模型 A R I M A ( p , d , q ) \color{red}ARIMA(p,d,q) ARIMA(p,d,q),的 d d d是差分化的次数。
- 优缺点:
优点: 模型十分简单,只需要内生变量而不需要借助其他外生变量。
缺点:(1)要求时序数据是平稳的,或者是通过差分化后是平稳的;(2)本质上只能捕捉线性关系,而不能捕捉非线性关系。
3、季节性ARIMA模型
A R I M A ( p , d , q ) ( P , D , Q ) m \color{red}ARIMA (p,d,q) (P,D,Q)_m ARIMA(p,d,q)(P,D,Q)