时序分析中的去趋势化方法

时序分析中的去趋势化方法

时序分析是研究随时间变化的数据模式的一门学科。在时序数据中,趋势是一种随着时间推移而呈现的长期变化趋势,去趋势化是为了消除或减弱这种趋势,使数据更具平稳性。本文将简单介绍时序分析中常用的去趋势化方法,并通过代码演示每种方法的应用。

1. 引言

时序分析在金融、经济学、气象学等领域中广泛应用,而去趋势化是时序分析的一个重要步骤。通过去趋势化,我们可以更好地理解和分析时间序列中的周期性、季节性和随机波动。以下是一些常见的去趋势化方法。

2. 去趋势化方法

创建示例时间序列数据

#
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from statsmodels.tsa.seasonal import STL

# 创建示例时间序列数据
np.random.seed(42)

# 生成日期范围
date_rng = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')

# 生成随机的趋势成分
trend_component = 0.1 * np.arange(len(date_rng))

# 生成季节性成分
seasonal_component = 5 * np.sin(2 * np.pi * np.arange(len(date_rng)) / 365 * 7)

# 生成随机噪声
noise = np.random.normal(0, 1, len(date_rng))

# 创建原始时间序列数据
original_series = trend_component + seasonal_component + noise

# 绘制原始时间序列图
plt.figure(figsize=(12, 6))
plt.plot(date_rng, original_series, label='Original Series')
plt.title('Original Time Series Data')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.show()

在这里插入图片描述

2.1 最优拟合线

最优拟合线是通过线性回归模型拟合得到的最能代表时间序列趋势的直线。对于简单的趋势,我们可以使用线性回归模型,对于更复杂的趋势,甚至可以使用多项式回归模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 创建示例时间序列数据
# ...

# 方法1:减去最优拟合线
X = np.arange(len(original_series)).reshape(-1, 1)
model = LinearRegression().fit(X, original_series)
trend_component = model.predict(X)
detrended_series_1 = original_series - trend_component

2.2 时间序列分解

时间序列分解是将时间序列分解为趋势、季节和残差三个部分的过程。这可以通过STL(Seasonal and Trend decomposition using Loess)等方法实现。

from statsmodels.tsa.seasonal import STL

# 创建示例时间序列数据
# ...

# 方法2:从时间序列分解中减去趋势成分
stl_result = STL(original_series, seasonal=13).fit()
detrended_series_2 = stl_result.resid

2.3 减去均值

一种简单而直观的方法是减去时间序列的均值,使得数据更平稳。

# 方法3:减去均值
detrended_series_3 = original_series - original_series.mean()

2.4 Baxter-King和Hodrick-Prescott过滤器

这两种过滤器可以用于去除时间序列中的移动平均趋势线或循环成分。

from statsmodels.tsa.filters import bkfilter, hpfilter

# 创建示例时间序列数据
# ...

# 方法4:Baxter-King过滤器
detrended_series_4 = bkfilter.bkfilter(original_series, low=6, high=32, K=12)

3. 示例和比较

接下来,将展示每种方法的应用,并比较它们在去趋势化方面的效果。

# 可视化去趋势化结果
plt.figure(figsize=(12, 8))

plt.subplot(2, 3, 1)
plt.plot(original_series, label='Original Series')
plt.title('Original Time Series')

plt.subplot(2, 3, 2)
plt.plot(detrended_series_1, label='Detrended Series (Method 1)')
plt.title('Detrended Series - Method 1')

plt.subplot(2, 3, 3)
plt.plot(detrended_series_2, label='Detrended Series (Method 2)')
plt.title('Detrended Series - Method 2')

plt.subplot(2, 3, 4)
plt.plot(detrended_series_3, label='Detrended Series (Method 3)')
plt.title('Detrended Series - Method 3')

plt.subplot(2, 3, 5)
plt.plot(detrended_series_4, label='Detrended Series (Method 4)')
plt.title('Detrended Series - Method 4')

plt.tight_layout()
plt.show()

通过上述可视化,我们可以比较不同去趋势化方法的效果。每个子图展示了原始时间序列和经过不同方法去趋势化后的结果。

4. 总结

本文介绍了时序分析中常用的四种去趋势化方法,包括减去最优拟合线、时间序列分解、减去均值以及Baxter-King和Hodrick-Prescott过滤器。
减去最优拟合线: 这种方法通过线性回归或多项式回归模型找到数据的最佳拟合线,并从原始时间序列中减去该线。优点是简单易用,适用于线性趋势。缺点是对于非线性趋势的拟合效果较差。
时间序列分解: 使用STL等方法将时间序列分解为趋势、季节和残差三个部分。这样可以更灵活地处理不同类型的趋势和季节性。然而,分解过程可能对噪声敏感。
减去均值: 简单地减去时间序列的均值,使得数据更平稳。这是一种简单直观的方法,适用于一些简单的场景,但无法处理复杂的趋势。
Baxter-King和Hodrick-Prescott过滤器: 这两种过滤器可用于去除时间序列中的移动平均趋势线或循环成分。它们在一定程度上平滑数据,但需要调整参数以适应不同的数据特性。
在选择去趋势化方法时,需要根据数据的实际情况和趋势类型进行选择。对于线性趋势,减去最优拟合线可能是一个不错的选择;对于复杂趋势和季节性,时间序列分解方法更具优势;而简单的场景下,减去均值可能足够。最终的选择取决于数据的特点和分析的目的。

综上所述,不同的去趋势化方法各有优劣,理解这些方法的特点,根据实际情况选择合适的方法,将有助于更好地进行时序数据分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/354434.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

我爱这夜色茫茫

夜来香 - 李香兰 那南风吹来清凉 那夜莺啼声细唱月下的花儿都入梦 只有那夜来香 吐露着芬芳 我爱这夜色茫茫 也爱这夜莺歌唱 更爱那花一般的梦 拥抱着夜来香 吻着夜来香夜来香我为你歌唱 夜来香我为你思量 啊~啊我为你歌唱 我为你思量 我爱这夜色茫茫 也爱这夜莺歌唱更爱那花…

GitHub Action 实现超简单的持续集成(CI)

GitHub Action 官方文档 GitHub Action 中使用 Docker 的官方文档 所用项目代码获取:公众号发送cloud 前言 在上一篇几分钟完成前后端分离项目部署文章中,我们完成了前后端分离项目的部署,但随着开发的进行,我们每次更新都手动打包…

IT网课满天飞,花两万学这个课真的有用吗?

我一直都觉得,IT类付费课程,无用且没有必要,我写代码10多年,没有花过一分钱报班学什么java, 学什么就业课,完全不妨碍我现在年薪百万。报班没有意义的地方在于,它会给你的大脑灌输一些你消化不了的知识&…

数据湖技术之应用场景篇

数据湖技术有较多的应用场景,本篇文章是针对一些典型的痛点场景做了一些介绍和说明。比如说在线数据抽取场景原有模式对线上库表产生较大压力,flink多流join维护的大状态导致的稳定性问题等等,具体场景如下图所示: 场景1:在线数据…

贪吃蛇/链表实现(C/C++)

本篇使用C语言实现贪吃蛇小游戏,我们将其分为了三个大部分,第一个部分游戏开始GameStart,游戏运行GameRun,以及游戏结束GameRun。对于整体游戏主要思想是基于链表实现,但若仅仅只有C语言的知识还不够,我们还…

2024/1/27 备战蓝桥杯 1-1

目录 求和 0求和 - 蓝桥云课 (lanqiao.cn) 成绩分析 0成绩分析 - 蓝桥云课 (lanqiao.cn) 合法日期 0合法日期 - 蓝桥云课 (lanqiao.cn) 时间加法 0时间加法 - 蓝桥云课 (lanqiao.cn) 扫雷 0扫雷 - 蓝桥云课 (lanqiao.cn) 大写 0大写 - 蓝桥云课 (lanqiao.cn) 标题…

WordPress如何使用SQL实现一键关闭/开启评论功能(已有评论)

WordPress本人就自带评论功能,不过由于种种原因,有些站长不想开启评论功能,那么应该怎么实现一键关闭评论功能或开启评论功能呢?或者针对已有评论功能的文章进行一键关闭或开启评论功能应该怎么操作? 如果你使用的Wor…

第四篇:怎么写express的路由(接口+请求)

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 引言: &#x1f4…

解密人工智能:探索机器学习奥秘

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 机器学习的定义二. 机器学习的发展历程三. 机器学习的原理四. 机器学习的分类…

5.Hive表修改Location,一次讲明白

Hive表修改Loction 一、Hive中修改Location语句二、方案1 删表重建1. 创建表,写错误的Location2. 查看Location3. 删表4. 创建表,写正确的Location5. 查看Location 三、方案2 直接修改Location并恢复数据1.建表,指定错误的Location&#xff0…

有趣的 CSS - 动态圆点水波纹效果

先看效果 整体效果 这个效果使用 css 中 animation 属性&#xff0c;以及搭配伪元素 ::after、::before 来实现两个圆交替变化。 核心代码 html部分代码 <div><label class"dot"></label> </div>label 标签画圆点主体。 css部分代码 .ap…

蓝桥杯---九数组分数

1,2,3 ... 9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 下面的程序实现了该功能,请填写划线部分缺失的代码。 注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。

烧录软件(Renesas Flash Programmer)瑞萨RL78G12系列单片机下载工具(E2)的软件配置与硬件链接说明

一、单片机与仿真器连接 E1引脚接线图 RL78系列单片机的GND接仿真器的pin2、pin12、pin14 RL78系列单片机的VDD接仿真器的pin8 RL78系列单片机的Tool0接仿真器的pin5 RL78系列单片机的Reset接仿真器的pin10、pin13 二、确认接线完成后&#xff0c;开始烧录 1、打开RFPV软件…

实时视觉效果制作 -- Resolume Arena 7 中文

Resolume Arena 7是一款专业的实时视觉效果软件&#xff0c;能够为观众带来令人难以置信的视听盛宴。它具备强大的功能和直观的界面设计&#xff0c;使得用户能够轻松地创作、编辑和演示各种视觉效果。无论是在音乐会、派对还是舞台演出中&#xff0c;Resolume Arena 7都能满足…

golang封装业务err(结合iris)

golang封装业务err 我们有时在web开发时&#xff0c;仅凭httpStatus以及msg是不方便维护和体现我们的业务逻辑的。所以就需要封装我们自己的业务错误。 自定义biz_err维护err map&#xff1a;errorResponseMap、errorHttpStatusMap 注意&#xff1a;本文主要以演示为主&#xf…

【ArcGIS微课1000例】0095:横向图例制作案例教程

文章目录 一、加载数据二、高程分级显示三、横向图例四、注意事项一、加载数据 为了便于直观演示,本实验加载一个栅格数据(配套实验数据包中的0095.rar)并进行分级显示,效果如下: 二、高程分级显示 双击dem数据图层,打开栅格数据的【图层属性】对话框,切换到【符号系统…

POJ No.1852 Ants

思路分析 “转向”问题 假设蚂蚁A与蚂蚁B相遇后转向&#xff0c;可以视作A&#xff0c;B交换位置&#xff0c;从而消除转向。 距离问题 最长距离&#xff1a;比较每只蚂蚁距两端的最大距离&#xff0c;取两端中最大值&#xff0c;取一组中最长距离的最大值。 最短距离&…

互联网加竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…

《HTML 简易速速上手小册》第3章:HTML 的列表与表格(2024 最新版)

文章目录 3.1 创建无序和有序列表&#xff08;&#x1f4dd;&#x1f31f;&#x1f44d; 信息的时尚搭配师&#xff09;3.1.1 基础示例&#xff1a;创建一个简单的购物清单3.1.2 案例扩展一&#xff1a;创建一个旅行计划清单3.1.3 案例扩展二&#xff1a;创建一个混合列表 3.2 …

【C++】输入输出、缺省参数、函数重载

目录 C的输入和输出 缺省参数 概念 缺省参数的分类 全缺省参数 半缺省参数 函数重载 概念 C支持函数重载的原理--名字修饰 C的输入和输出 #include<iostream> // std是C标准库的命名空间名&#xff0c;C将标准库的定义实现都放到这个命名空间中 using namespace …