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

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

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

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过滤器: 这两种过滤器可用于去除时间序列中的移动平均趋势线或循环成分。它们在一定程度上平滑数据,但需要调整参数以适应不同的数据特性。
在选择去趋势化方法时,需要根据数据的实际情况和趋势类型进行选择。对于线性趋势,减去最优拟合线可能是一个不错的选择;对于复杂趋势和季节性,时间序列分解方法更具优势;而简单的场景下,减去均值可能足够。最终的选择取决于数据的特点和分析的目的。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟着cherno手搓游戏引擎【13】着色器(shader)

创建着色器类&#xff1a; shader.h:初始化、绑定和解绑方法&#xff1a; #pragma once #include <string> namespace YOTO {class Shader {public:Shader(const std::string& vertexSrc, const std::string& fragmentSrc);~Shader();void Bind()const;void Un…

怎样自行搭建幻兽帕鲁游戏联机服务器?

幻兽帕鲁是一款深受玩家喜爱的多人在线游戏&#xff0c;为了获取更好的游戏体验&#xff0c;许多玩家希望能够自行搭建幻兽帕鲁游戏联机服务器&#xff0c;本文将指导大家如何自行搭建幻兽帕鲁游戏联机服务器。 自行搭建幻兽帕鲁游戏联机服务器&#xff0c;阿里云是一个不错的选…

结构体的增删查改

结构体&#xff0c;是为了解决生活中的一些不方便利用c语言自带数据类型来表示的问题。例如表示一个学生&#xff0c;那么学生这个个体假如用c语言自带数据类型怎么表示呢。可以使用名字&#xff0c;也就是字符数组&#xff1b;也可以使用学号&#xff0c;也就是int类型。但是这…

iOS 面试 Swift基础题

一、Swift 存储属性和计算属性比较&#xff1a; 存储型属性:用于存储一个常量或者变量 计算型属性: 计算性属性不直接存储值,而是用 get / set 来取值 和 赋值,可以操作其他属性的变化. 计算属性可以用于类、结构体和枚举&#xff0c;存储属性只能用于类和结构体。存储属性可…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

MySQL-窗口函数 简单易懂

窗口函数 考查知识点&#xff1a; • 如何用窗口函数解决排名问题、Top N问题、前百分之N问题、累计问题、每组内比较问题、连续问题。 什么是窗口函数 窗口函数也叫作OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;函数&#xff0c;可…

Android 基础技术——列表卡顿问题如何分析解决

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于列表卡顿问题如何分析解决 onBindViewHolder 优化 是否有耗时操作、重复创建对象、设置监听器、findViewByID、局部的动画对象等操作 是否存在内存泄漏 发生内存泄露&#xff0c;会导致一些不再使用…

游戏开发丨基于Tkinter的扫雷小游戏

文章目录 写在前面扫雷小游戏需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于tkinter的扫雷小游戏 所需环境 pythonpycharm或anaconda 下载地址 https://download.csdn.net/download/m0_68111267/88790713 扫雷小游戏 扫雷是一款广为人知的单…

RabbitMQ“延时队列“

1.RabbitMQ"延时队列" 延迟队列存储的对象是对应的延迟消息&#xff0c;所谓“延迟消息”是指当消息被发送以后&#xff0c;并不想让消费者立刻拿到消息&#xff0c;而是等待特定时间后&#xff0c;消费者才能拿到这个消息进行消费 注意RabbitMQ并没有延时队列慨念,…

OpenCV-29 自适应阈值二值化

一、引入 在前面的部分我们使用的是全局阈值&#xff0c;整幅图像采用同一个数作为阈值。当时这种方法并不适应于所有情况。尤其是当同一幅图像上的不同部分具有不同的亮度时。这种情况下我们需要采用自适应阈值。此时的阈值时根据图像上的每一个小区域计算与其对应的阈值。因此…

【幻兽帕鲁】开服务器,高性能高带宽(100mbps),免费!!!【学生党强推】

【幻兽帕鲁】开服务器&#xff0c;高性能高带宽&#xff08;100mbps&#xff09;&#xff0c;免费&#xff01;&#xff01;&#xff01;【学生党强推】 教程相关视频地址&#xff1a;https://www.bilibili.com/video/BV16e411Y7Fd/ 目前幻兽帕鲁开服务器有以下几套比较性价比的…

研发日记,Matlab/Simulink避坑指南(九)——可变数组应用Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南(四)——transpose()转置函数Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug》 见《研发日记&#xff0c;Matlab/Si…

qemu + vscode图形化调试linux kernel

一、背景 使用命令行连接gdb 在调试时&#xff0c;虽然可以通过tui enable 显示源码&#xff0c;但还是存在设置断点麻烦&#xff08;需要对着源码设置&#xff09;&#xff0c;terminal显示代码不方便&#xff0c;不利于我们学习&#xff1b;另外在gdb 下p命令显示结构体内容…

重构改善既有代码的设计-学习(六):处理继承关系

1、函数上移&#xff08;Pull Up Method&#xff09; 无论何时&#xff0c;只要系统内出现重复&#xff0c;你就会面临“修改其中一个却未能修改另一个”的风险。通常&#xff0c;找出重复也有一定的难度。 所以&#xff0c;某个函数在各个子类中的函数体都相同&#xff08;它们…

Pandas--数据结构 - Series(3)

Pandas Series 类似表格中的一个列&#xff08;column&#xff09;&#xff0c;类似于一维数组&#xff0c;可以保存任何数据类型。 Series 特点&#xff1a; 索引&#xff1a; 每个 Series 都有一个索引&#xff0c;它可以是整数、字符串、日期等类型。如果没有显式指定索引&…

Android Automotive:在路上释放 Android 操作系统的力量

Android Automotive&#xff1a;在路上释放 Android 操作系统的力量 Android 在汽车行业的历程车载信息娱乐系统 (IVI) 的演变汽车中的 Android&#xff1a;演变和进步Android 汽车操作系统的崛起Polestar 2&#xff1a;开创 Android 汽车体验Android 开源项目 (AOSP) 及其他项…

华为三层交换机与防火墙对接配置上网示例

三层交换机与防火墙对接上网配置示例 组网图形 图1 三层交换机与防火墙对接上网组网图 三层交换机简介配置注意事项组网需求配置思路操作步骤配置文件 三层交换机简介 三层交换机是具有路由功能的交换机&#xff0c;由于路由属于OSI模型中第三层网络层的功能&#xff0c;所以…

mac安装mysql的8.0设置面板启动不了

1、前言 记得之前安装mysql5.7的时候&#xff0c;是可以直接从设置里面的mysql面板启动的&#xff0c;但是到了mysql8.0之后就启动不了了&#xff0c;这个问题不知道是版本问题还是我换了m系列芯片的mysql导致的&#xff0c;之前很多次都启动不了&#xff0c;这次搞了下&#x…

力扣20、有效的括号(简单)

1 题目描述 图1 题目描述 2 题目解读 给定的字符串只包含括号&#xff0c;判断这个字符串中的括号是否按照正确顺序出现&#xff0c;即这个字符串是否有效。 3 解法一&#xff1a;栈 C的STL中的stack&#xff0c;在解题时非常好用。 3.1 解题思路 使用栈stk&#xff0c;并枚举…

Windows 和 Anolis 通过 Docker 安装 Milvus 2.3.4

Windows 10 通过 Docker 安装 Milvus 2.3.4 一.Windows 安装 Docker二.Milvus 下载1.下载2.安装1.Windows 下安装&#xff08;指定好Docker文件目录&#xff09;2.Anolis下安装 三.数据库访问1.ATTU 客户端下载 一.Windows 安装 Docker Docker 下载 双击安装即可&#xff0c;安…