怎样用Python对时间序列数据进行季节性差分与趋势分解?

梦伟酱_6325

梦伟酱_6325

2026-09-04

169人浏览

原创

季节性差分应使用diff(periods=k)而非seasonal_decompose(),前者是使序列平稳的预处理操作,后者仅用于趋势/季节/残差分解;需先差分再分解,且必须dropna()并正确指定period。

怎样用python对时间序列数据进行季节性差分与趋势分解?

季节性差分用 diff() 还是 seasonal_decompose()?

季节性差分和趋势分解是两件事:前者是预处理操作(让序列平稳),后者是探索性分析(拆出趋势/季节/残差)。别混着用。diff() 本身不支持直接季节性差分,得手动指定周期步长;seasonal_decompose() 不做差分,只拟合加法或乘法模型。

常见错误是调用 df['y'].diff(12) 后还硬塞进 seasonal_decompose() 做“二次分解”,结果残差里残留明显季节模式——因为差分没对齐原始周期,或数据本身存在多重季节性(比如周+年)。

  • 月度数据常用 diff(periods=12),但前提是季节周期确实是 12;季度数据用 diff(periods=4)
  • 用前先检查自相关图:plot_acf(series, lags=24),看滞后 12、24 处是否显著高于置信区间
  • 差分后必须用 dropna(),否则 seasonal_decompose() 会报 ValueError: Input array contains NaNs

用 seasonal_decompose() 时 model 参数怎么选?

加法模型(model='additive')假设季节波动幅度不随趋势变化,适合波动较稳定的数据;乘法模型(model='multiplicative')则要求季节振幅随趋势放大,常见于增长型销售数据。选错会导致趋势线扭曲、残差非白噪声。

判断依据不是业务直觉,而是观察原始序列:如果高值区的季节峰谷绝对差明显大于低值区(比如 12 月销量比 11 月多 5000,而 1 月只多 200),就该用乘法;反之用加法。

Shadows Python Sensei
Shadows Python Sensei

Python 最佳实践助手——代码规范、设计模式、性能优化、测试与类型注解。适用于编写或审查 Python 代码。

下载
  • 乘法模型要求所有值 > 0,否则直接报错 ValueError: Multiplicative seasonality is not appropriate for zero and negative values
  • period 必须显式指定,pandas 不自动推断;传错值(如把周数据设成 period=7 却没重采样对齐周一)会导致季节项完全失真
  • 默认 two_sided=True 用前后均值平滑趋势,但末端点不可靠;实时监控场景建议改 two_sided=False,用单边移动平均

差分 + 分解组合操作的典型流程

先差分再分解是常见做法,但顺序不能反——分解后的趋势项再差分,物理意义模糊,且季节项会被破坏。真实流程是:原始序列 → 季节性差分 → 检查平稳性(ADF)→ 分解。

import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
<h1>假设 df.index 是月度 DatetimeIndex,freq='MS'</h1><p>series_diff = df['y'].diff(periods=12).dropna()
result = seasonal_decompose(
series_diff, 
model='additive', 
period=12,
two_sided=False
)</p>
  • 分解结果对象 result 的 trend、seasonal、resid 都是 Series,索引与 series_diff 对齐,不是原始时间
  • 若后续要建模(如 SARIMA),差分后直接用 series_diff,不要用分解出的 resid —— 它已包含估计误差,不是纯随机扰动
  • 画图时别漏掉 result.plot(),它能快速暴露分解失败信号:比如 seasonal 图出现明显趋势,说明周期设错或需更高阶差分

为什么 seasonal_decompose() 对高频数据(如小时级)容易失效?

底层用移动平均平滑趋势,窗口长度固定为 period*2+1。小时级数据若设 period=24(日周期),窗口就是 49 小时,会抹平真实突变(如工作日早高峰),导致趋势项滞后严重;若强行缩短期(如 period=7 周期),又无法捕获日模式。

这不是参数调优问题,是方法局限。遇到小时/分钟级数据,优先考虑 STL(statsmodels.tsa.seasonal.STL),它用内循环迭代分离,对窗口长度不敏感,且支持双周期(如日+周)。

  • STL 必须指定 period,但可额外加 seasonal_deg=1 让季节项带线性斜率,适应缓慢漂移的周期模式
  • 计算比 seasonal_decompose() 慢 3–5 倍,但结果更鲁棒;内存不足时可设 robust=True 减少迭代次数
  • 别在 STL 前做季节性差分——它内置稳健滤波,差分反而引入边界噪声

实际用的时候,最常被忽略的是周期对齐和差分后索引断裂。比如用 resample('M').sum() 聚合日数据,但没指定 closed='left',导致每月最后一天被算进下月,整个 period=12 就偏了。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1591

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

3804

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1589

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

21957

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2687

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2747

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1103

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2123

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程