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 统计回归简介

statsmodels 笔记:VAR

Python数模笔记-StatsModels 统计回归可视化

statsmodels笔记:判断数据平稳性(adfuller)

Python数模笔记-StatsModels 统计回归模型数据的准备