statsmodels 笔记 STL
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了statsmodels 笔记 STL相关的知识,希望对你有一定的参考价值。
理论部分见:机器学习笔记: 时间序列 分解 STL_UQI-LIUWJ的博客-CSDN博客
1 基本用法
class statsmodels.tsa.seasonal.STL(
endog,
period=None,
seasonal=7,
trend=None,
low_pass=None,
seasonal_deg=0,
trend_deg=0,
low_pass_deg=0,
robust=False,
seasonal_jump=1,
trend_jump=1,
low_pass_jump=1)
2 参数说明
endog | 要分解的数据。 必须可挤压至 1-d。 |
period | int 或者 None 序列的周期性。 如果 是None,并且 endog 是 pandas Series 或 DataFrame,则尝试从 endog 确定。 如果 endog 是 ndarray,则必须手动提供。 |
seasonal | int 季节分量的LOSSES平滑参数。 必须是奇数,并且通常应该 >= 7(默认值)。 【内循环的第二步?】 |
trend | int 或者 None 趋势分量的LOSSES平滑参数。 必须是奇数。 如果未提供,则使用大于 1.5 * period / (1 - 1.5 /seasonal) 的最小奇数。 |
low_pass | int 或者 None 低通滤波器的长度。 必须是 >=3 的奇数。 如果未提供,则使用大于周期的最小奇数。(感觉像内循环第三步的前两个Np?) |
robust | bool 是否使用对某些形式的异常值具有鲁棒性的版本。 |
seasonal_jump | int 确定季节分量LOSSES线性插值步长的正整数。 (内循环第二步)【每多少步进行一次线性插值】 |
low_pass_jump | int 内循环第三步LOSSES 线性插值步长 |
trend_jump | int 确定趋势分量LOSSES线性插值步长的正整数。(内循环第六步) |
3 使用举例
3.1 数据集
月度数据
from statsmodels.datasets import co2
data = co2.load(True).data
data
'''
co2
1958-03-29 316.1
1958-04-05 317.3
1958-04-12 317.6
1958-04-19 317.5
1958-04-26 316.4
... ...
2001-12-01 370.3
2001-12-08 370.8
2001-12-15 371.2
2001-12-22 371.3
2001-12-29 371.5
2284 rows × 1 columns
'''
data = data.resample('M').mean().ffill()
data
'''
co2
1958-03-31 316.100000
1958-04-30 317.200000
1958-05-31 317.433333
1958-06-30 317.433333
1958-07-31 315.625000
... ...
2001-08-31 369.425000
2001-09-30 367.880000
2001-10-31 368.050000
2001-11-30 369.375000
2001-12-31 371.020000
526 rows × 1 columns
'''
3.2 模型
from statsmodels.tsa.seasonal import STL
res = STL(data).fit()
#
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = 20, 15
res.plot()
plt.show()
STL(data).config
'''
'period': 12,
'seasonal': 7,
'seasonal_deg': 1,
'seasonal_jump': 1,
'trend': 23,
'trend_deg': 1,
'trend_jump': 1,
'low_pass': 13,
'low_pass_deg': 1,
'low_pass_jump': 1,
'robust': False
'''
STL(data).period
#12
3.3 返回结果可以得到的一些信息
observed | 已分解的时间序列。 |
seasonal | 时间序列的周期分量
|
trend | 时间序列的趋势分量 |
resid | 时间序列的残留分量
|
weights | 用于减少异常值影响的权重。
|
以上是关于statsmodels 笔记 STL的主要内容,如果未能解决你的问题,请参考以下文章
即使时间序列是固定的并且在 Python 中没有季节性分量,auto_arima 也会返回最佳模型作为 SARIMAX
Python数模笔记-StatsModels 统计回归可视化