我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python 时间序列分解案例——加法分解seasonal_decompose

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python 时间序列分解案例——加法分解seasonal_decompose

文章目录

一、模型简介

1.1 加法分解模型

加法分解模型适用于随着时间推移趋势和季节性变化不断累加,并且随机波动比较稳定的时间序列数据。该模型假设原始时间序列由三个组成部分相加而成:
Y t + S t + R t Y_{t}+S_{t}+R_{t} Yt+St+Rt
其中,

  • Y t Y_{t} Yt:实际观测值
  • T t T_{t} Tt:趋势(通常用指数函数来表示)
  • S t S_{t} St:季节指数(一般通过计算每个季节的平均值得到)
  • R t R_{t} Rt:残差(无法被趋势和季节性解释的部分)

1.2 乘法分解模型

乘法分解模型适用于随着时间推移趋势和季节性变化呈现出指数增长或衰减的时间序列数据。该模型假设原始时间序列由三个组成部分相乘而成:
Y t ∗ S t ∗ R t Y_{t}*S_{t}*R_{t} YtStRt

注: 在实际应用中,加法分解模型是比较常见的模型,可以使用线性回归、多项式回归等方法拟合趋势和季节性部分,而乘法分解模型则更适用于呈现出指数增长或衰减趋势的时间序列数据。

1.3 分析步骤

  • 1、观察原始数据趋势;
  • 2、确定周期;
  • 3、数据分解(趋势、季节指数、残差);
  • 4、结果解读

二、案例

2.1 背景 & 数据 & python包

  • 背景:分析某饮料产品2022.1-2023.3期间在上海的销售趋势,采用加法分解模型。
  • 数据
    在这里插入图片描述
  • statsmodels.tsa.seasonal_decompose 介绍
from statsmodels.tsa.seasonal import seasonal_decomposeresult = seasonal_decompose(x,                  # 要分解的时间序列数据model='additive',   # 分解模型,可以是 'additive' (加法)或 'multiplicative'(乘法)filt=None,          # 最小二乘滤波器系数period=None,        # 时间序列的季节周期,如果未指定,则自动检测two_sided=True,     # 是否使用双侧滤波器extrapolate_trend=0 # 在不充分观察到较长时间趋势的情况下,是否应该扩展趋势组件)

该函数返回一个 DecomposeResult 对象,其中包含分解出的趋势、季节性和残差成分等信息,可以通过下方代码来实现获取:

decomposition = seasonal_decompose(df['col_name'],freq=7)trend = decomposition.trend seasonality = decomposition.seasonal residual = decomposition.resid# 创建一个新的DataFrame来存储趋势、季节性和残差decomposed_df = pd.DataFrame({'Trend': trend, 'Seasonality': seasonality, 'Residual': residual})decomposed_df

2.2 分析过程

  • 加载相关库
import pandas as pdfrom statsmodels.tsa.seasonal import seasonal_decomposeimport seaborn as snsimport matplotlib.pyplot as pltimport matplotlib.ticker as ticker%matplotlib inline
  • 读取数据
df = pd.read_csv('data.csv')
  • 绘制销售曲线
# 设置绘图风格sns.set_style("whitegrid")# 设置画布大小、精度plt.figure(figsize = (16,4), dpi = 200)# 绘制曲线图ax = sns.lineplot(x='date', y='sales', data=df, color='blue', linewidth=1)# 解决X轴密集问题:https://blog.csdn.net/small__roc/article/details/126950537?spm=1001.2014.3001.5502ax.xaxis.set_major_locator(ticker.MultipleLocator(base=40)) # 添加标题和轴标签plt.title('Sales Curve')plt.xlabel('Date')plt.ylabel('Sales')# 显示图形plt.show()

在这里插入图片描述

  • 周期确定 :饮料消费品线下销售一般会有:周末(或节假日)比工作日销量高、天气严热比冷寒销量高的特点,本文为了简化下模型,把周期设置为7天。

  • 趋势分解

df.set_index("date",inplace=True)decomposition = seasonal_decompose(df['sales'],period=7)trend = decomposition.trend seasonality = decomposition.seasonal residual = decomposition.resid# 创建一个新的DataFrame来存储趋势、季节性和残差decomposed_df = pd.DataFrame({'Trend': trend, 'Seasonality': seasonality, 'Residual': residual})

在这里插入图片描述

  • 绘制分解后的数据曲线
colors = ['red', 'orange', 'green']linestyles = ['-', '--', ':']linewidths = [1.5, 1.5, 1.5]markers = [None, 's', 'o']markersizes = [1, 1, 1]for i, col in enumerate(decomposed_df.columns):    decomposed_df[col].plot(        kind='line',         color=colors[i],         linestyle=linestyles[i],         linewidth=linewidths[i],         marker=markers[i],         markersize = markersizes[i],        figsize=(16, 4)    )# 添加标题和轴标签plt.title('Decomposed Sales Curve')plt.xlabel('Date')plt.ylabel('Value')# 添加图例plt.legend(decomposed_df.columns)plt.show()

在这里插入图片描述

  • 结果分析
    1、销量趋势的高点在4-7月份,但很明显去年这段时间残差波动非常大,说明存在异常情况(22年上海3-5月份口罩事件);
    2、另一处销量趋势的高点在23年1-2月份,期间残差波动也存在异常,可能的原因是春节或某产品销量猛增,具体还需进一步分析。

来源地址:https://blog.csdn.net/small__roc/article/details/129955759

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python 时间序列分解案例——加法分解seasonal_decompose

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Python怎么对时间序列进行分解和预测

使用Python怎么对时间序列进行分解和预测?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是时间序列?顾名思义,时间序列是按照固定时间间隔记录的数据集。换句话说,以时间
2023-06-06

Python基于LightGBM进行时间序列预测的示例分析

这篇文章主要介绍了Python基于LightGBM进行时间序列预测的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言当我们考虑时间序列的增强树时,通常会想到 M5
2023-06-29

三种Python比较两个时间序列在图形上是否相似的方法分享

这篇文章主要为大家详细介绍了三种Python中比较两个时间序列在图形上是否相似的方法,文中的示例代码简洁易懂,感兴趣的小伙伴可以了解一下
2023-03-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录