> For the complete documentation index, see [llms.txt](https://blessbingo.gitbook.io/garnet/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blessbingo.gitbook.io/garnet/shi-jian-xu-lie/0x07-ji-jie-xing.md).

# 0x07 季节性

## 季节模型

我们在对时间序列进行建模的时候, 如果没有时间序列没有季节性, 直接适应**ARIMA**模型, 基本就能处理大部分情况了.

加入某个时间序列有季节性, 这里的季节其实指的就是周期重复的性质. 在`Python`使用`seasonal_decompose`并指定`freq`(这里的意思就是周期包含的时间间隔), 就能对原来的时间序列进行分解, 得到趋势, **季节性**和残差. 我们可以使用去掉了趋势和季节性的残差继续处理和建模, 虽然不再用考虑季节性等, 但如何将拟合后预测得到的数值, **还原**回原来有意义的时间序列, 是很棘手的.

对季节进行建模的方式如同**ARIMA**类似, 只不过这里的时间间隔变成了`freq`, 对应的AR变为了**SAR**, **MA**变为了**SMA**, 差分变为了**季节差分**(即当前点与`freq`个`lag`之前的值相减, 这是对于一阶季节差分来说), 最终ARIMA模型变为了**SARIMA**模型, 参数有7个:

* (p, d, q): 标准的ARIMA模型中的参数
* (P, D, Q, Freq): 季节模型的参数, 意义与上面相同. 最后的Freq代表周期的长度(时间间隔的数量)

## 模型参数的确定

关于**SARIMA**模型参数的确认, 因为参杂了太多的因素, 直接使用ACF图和PACF图, 主观的选择已经不是那么行得通了, 经常使用**网格搜索**, 根据模型拟合的评价方法, 如**AIC**, **BIC**或者**RMSE**等, 选取最优的模型. 这种形式非常类似于使用`sklearn`中的`GridSearch`方法调参.

尽管如此, 整个SARIMA模型的参数选择和注意事项还是有以下的总结:

* [Summary of rules for identifying ARIMA models](http://people.duke.edu/~rnau/arimrule.htm)
* [利用python进行时间序列分析——季节性ARIMA](https://zhuanlan.zhihu.com/p/35282988)

**如何确定差分阶数和常数项**:

* 假如时间序列在很高的`lag`10以上有正的ACF, 则需要很高阶的差分
* 假如`lag-1`的ACF是0或负数或者非常小, 则不需要很高的差分, 假如`lag-1`的ACF是-0.5或更小, 序列可能**overdifferenced**. **要十分警惕overdifferenced的情况**.
* 最优的差分阶数一般在最优阶数下标准差最小(但并不是总数如此)
* 模型不查分意味着原先序列是平稳的, 一阶差分平稳意味着原先序列有个固定的平均趋势, 二阶差分平稳意味着原先序列有个随时间变化的趋势
* 模型没有差分一般都有常数项, 有两阶差分一般没常数项, 假如一阶差分模型有非零的平均趋势, 则有常数项

**如何确定AR和MA的阶数**:

* 假如PACF显示截尾或者lag-1的ACF是正的（此时序列仍然有点underdifferenced），则需要考虑AR项；PACF的截尾项表明AR的阶数
* 假如ACF显示截尾或者lag-1的ACF是负的（此时序列有点overdifferenced），则需要加MA项，ACF的截尾项表明AR的阶数
* AR和MA可以相互抵消对方的影响，所以假如用AR-MA模型去拟合数据，仍然需要考虑加些AR或MA项。尤其在原先模型需要超过10次的迭代去converge。**BEWARE OF USING MULTIPLE AR TERMS AND MULTIPLE MA TERMS IN THE SAME MODEL.**
* 假如在AR部分有个单位根（AR系数和大约为1），此时应该减少一项AR增加一次差分
* 假如在MA部分有个单位根（MA系数和大约为1），此时应该减少一项AR减少一次差分
* 假如长期预测出现不稳定，则可能AR、MA系数有单位根

**如何确定季节性部分**:

* 假如序列有显著是季节性模式，则需要用季节性差分，**但是不要使用两次季节性差分或总过超过两次差分(季节性和非季节性)**
* 假如差分序列在滞后s处有正的ACF，s是季节的长度，则需要加入SAR项；假如差分序列在滞后s处有负的ACF，则需要加入SMA项，如果使用了季节性差异，则后一种情况很可能发生，如果数据具有稳定和合乎逻辑的季节性模式。如果没有使用季节性差异，前者很可能会发生，只有当季节性模式不稳定时才适用。**应该尽量避免在同一模型中使用多于一个或两个季节性参数(**`SAR + SMA`**)**，因为这可能导致过度拟合数据和/或估算中的问题。
