时间序列(1):LOESS(STL)时间序列分解
近期处理定位请求时间序列的过程中用到了STL时间序列分解,趋势分析及变点检测方法,在Python和R中都进行了实践,小结一下参数设置和其他个人体会。内容包括:
1-时间序列建模/成分提取及异常分析思路;2-STL调参及代码(python and R);
引言
时间序列中的”异常”?
此处的时间序列包含成分:周期成分(seasonal)、趋势成分(trend)及其他部分(remainded/)
周期:如一个商场的总人口每天24小时的规律变化
趋势:最小单元一般是一个周期,及尺度会大于周期。比如商场周一到周末会有一个变化/减少的趋势线
理论上,如果规律完美,原始时间序列减去周期及趋势应该能得到一条水平线,恒为0,但实际上很少会这样,能够得到一个在0或者某个值附近波动的变化,这样都可以称为理想的白噪音了,也即是这个过程没有任何问题,但实际上:
- 各种不确定性的内部外部因素都可能产生异常,导致某天某些时候数据突变,甚至是整个趋势的变化,这就是通常在研究中我们需要关注的点并结合问题进行进一步的分析。
- 有的异常或者个别的异常可能并不带来负面影响,那他就是可容忍的,因此我们需要设置一些阈值,通过一些方法来排除掉,从而找到我们真正需要关心的那些变化
在异常分析时这是比较常规的方式:
- 对序列进行建模/拟合(时间序列分解实际也是这样的),模型总是理想的
- 分离常态并去除规律性的部分(周期或趋势或二者均去除)。趋势的去除和周期的尺度和时间长度密切相关,因此需要结合实际问题和情况考虑趋势是否需要去除
- 根据问题,设定条件,判别真正的异常
stl时序分解
STL(“Seasonal and Trend decomposition using Loess”) 是一种用于分解时间序列的通用且稳健的方法。
Loess 是一种估计非线性关系的方法。STL 方法由RB Cleveland等人 ( 1990 )开发。
简介
STL时间序列分解将序列分解为周期成分(seasonal)、趋势成分(trend)及其他部分(remainded/),这几个成分可以是相加的也可以是相乘的(及加法模型和乘法模型),乘法也就意味着随着时间的推移不同成为有累积叠加作用
代码
参考
预测: 方法与实践: 在线书籍
python statsmodel包:stl_decomposition