时间序列分析方法之 -- 指数平滑(Exponential Smoothing)

news2024/11/28 3:51:19

目录

原理

适用情况

Python 示例代码

结论


 

原理

指数平滑(Exponential Smoothing)是一种用于时间序列分析和预测的平滑技术。与简单移动平均(SMA)和加权移动平均(WMA)不同,指数平滑通过对最新的数据点赋予更大的权重,从而对最新的变化更加敏感。它的基本思想是使用指数加权平均对时间序列数据进行平滑,权重随时间指数衰减。

指数平滑主要包括以下几种类型:

  1. 单一指数平滑(Simple Exponential Smoothing, SES)

    • 适用于无明显趋势和季节性的时间序列数据。
    • 公式:eq?S_t%20%3D%20%5Calpha%20X_t%20&plus;%20%281%20-%20%5Calpha%29%20S_%7Bt-1%7D​ 其中, eq?S_t是时间 t 的平滑值,eq?X_t是时间 t 的实际值, α\alphaα 是平滑系数,取值范围为 0<α<10 < \alpha < 10<α<1。
  2. 二次指数平滑(Double Exponential Smoothing, DES)

    • 适用于具有趋势的时间序列数据。
    • 包含两个平滑方程:一个用于水平值(Level),一个用于趋势值(Trend)。
    • 公式:

                        ​​​​​​​        cbdf2653f8444219821dfc641017a390.png

                其中, eq?T_t​ 是时间 ttt 的趋势值, β 是趋势平滑系数。

  1. 三次指数平滑(Triple Exponential Smoothing, TES 或 Holt-Winters 方法)

    • 适用于具有趋势和季节性的时间序列数据。
    • 包含三个平滑方程:一个用于水平值,一个用于趋势值,一个用于季节性(Seasonal)。
    • 公式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​         133985d0140b424799bcd33173675f6c.png​​

                其中,eq?C_t是时间 ttt 的季节性值, γ是季节性平滑系数, L是季节周期长度。

适用情况

  1. 单一指数平滑(SES)

    • 适用于无明显趋势和季节性变化的平稳时间序列数据。
    • 优点:简单易用,计算成本低。
    • 缺点:无法捕捉趋势和季节性变化。
  2. 二次指数平滑(DES)

    • 适用于存在趋势但无季节性的时间序列数据。
    • 优点:能够捕捉到数据的趋势变化。
    • 缺点:无法处理季节性变化,可能对参数较为敏感。
  3. 三次指数平滑(TES)

    • 适用于存在趋势和季节性变化的时间序列数据。
    • 优点:能够同时捕捉到趋势和季节性变化。
    • 缺点:模型复杂,参数选择较为关键,计算成本相对较高。

Python 示例代码

以下是一些使用 Python 实现不同类型的指数平滑方法及示例代码:

  1. 单一指数平滑(SES)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import SimpleExpSmoothing

# 生成样本数据
np.random.seed(0)
data = np.random.randn(100).cumsum()

# 创建数据序列
data_series = pd.Series(data)

# 应用单一指数平滑
alpha = 0.2
model = SimpleExpSmoothing(data_series).fit(smoothing_level=alpha, optimized=False)
smoothing_series = model.fittedvalues

# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data_series, label='Original Data')
plt.plot(smoothing_series, label='SES', linewidth=2)
plt.legend()
plt.title('Simple Exponential Smoothing')
plt.show()
  1. 二次指数平滑(DES)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 生成样本数据
np.random.seed(0)
data = np.random.randn(100).cumsum()

# 创建数据序列
data_series = pd.Series(data)

# 应用二次指数平滑
alpha = 0.2
beta = 0.1
model = ExponentialSmoothing(data_series, trend='add').fit(smoothing_level=alpha, smoothing_slope=beta)
smoothing_series = model.fittedvalues

# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data_series, label='Original Data')
plt.plot(smoothing_series, label='DES', linewidth=2)
plt.legend()
plt.title('Double Exponential Smoothing')
plt.show()
  1. 三次指数平滑(TES)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 生成样本数据
np.random.seed(0)
data = np.random.randn(100).cumsum()

# 创建数据序列
data_series = pd.Series(data)

# 应用三次指数平滑
alpha = 0.2
beta = 0.1
gamma = 0.3
seasonal_periods = 12
model = ExponentialSmoothing(data_series, trend='add', seasonal='add', seasonal_periods=seasonal_periods).fit(
    smoothing_level=alpha, smoothing_slope=beta, smoothing_seasonal=gamma
)
smoothing_series = model.fittedvalues

# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data_series, label='Original Data')
plt.plot(smoothing_series, label='TES', linewidth=2)
plt.legend()
plt.title('Triple Exponential Smoothing')
plt.show()

结论

指数平滑是一种有效的时间序列分析方法,通过对数据赋予指数衰减的权重,可以更好地捕捉数据的长期趋势和短期变化。单一指数平滑适合无趋势和季节性的平稳数据,二次指数平滑适合存在趋势的数据,三次指数平滑则适合存在趋势和季节性的复杂数据。在实际应用中,选择合适的指数平滑方法应根据具体数据的特性和分析目标进行权衡和调整。

 

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

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

相关文章

VS+opencv+环境配置

下载opencv库。 版本 - OpenCV 下载完了是一个exe文件&#xff0c;&#xff08;可以更换目录&#xff09;直接双击&#xff0c;也就是压缩。 vs配置&#xff1a; 调试-调试属性 点编辑&#xff0c;加入这两个&#xff0c;路径根据自己的opencv库 3、链接器 测试&#xff1a;…

《Java初阶数据结构》----8.<java对象的比较总结>

目录 前言 一、Java对象的比较 1.1基本类型的比较 1.2 对象比较的问题&#xff08;与equals&#xff09; 1.3对象的比较 &#xff08;三种常用方式&#xff09; 1.重写equals方法 2.基于Comparble接口类的比较 3.基于比较器比较&#xff08;Comparator接口&#xff09; …

如何在网站嵌入可填写的PDF表单:2024巴黎奥运会赛程

如何将可填写的 PDF 表单嵌入您的网页&#xff1f;访问者无需下载或注册即可查看并填写。 简单&#xff01;本文以2024巴黎奥运会赛程表单为例&#xff0c;演示如何将其嵌入网页中。您可以在 ONLYOFFICE 表单库免费获取该模板&#xff0c;有白色和紫色两种背景设计。 如何在网站…

uniapp中出现图片过小会与盒子偏离

结论&#xff1a;在image的父盒子中加上display: flex&#xff0c;原因不清楚 出问题的代码和图片如下&#xff1a; <template><view style" background-color: greenyellow; height: 10rpx;width: 10rpx;"><image :src"imgSrc.seatnull" …

UCOS-III 任务调度锁定/解锁接口OSSchedLock/Unlock详解

在实时操作系统中&#xff0c;任务调度是系统实现多任务并发执行的核心机制。但在某些场景下&#xff0c;我们需要临时关闭任务调度&#xff0c;以确保某段代码在执行过程中不被打断。下面将详细介绍这两个接口的应用场景及实现原理。 1. 关闭调度的应用场景 关闭任务调度的主要…

Windows环境下部署本地大模型教程

自ChatGPT在2022年爆发式出圈以来&#xff0c;大模型对人类世界产生了重大影响&#xff0c;无论是在生产、工作、写作方面还是自动驾驶领域&#xff0c;大模型发挥了非常重要的作用。 现各大厂&#xff0c;无论是国内大厂还是国外大厂&#xff0c;都纷纷推出了自己的对话大模型…

服务暴露 traefik

一。traefik 部署 前置资源 还是那个网站&#xff0c;这里复制 entryPoints&#xff0c;进入traefik的大门 可选在哪台机器上部署 traefik 部署 用 Daemonset 的方式是为了&#xff0c;加机器到集群后&#xff0c;能自动部署traefik 到目标机器 注意 8084端口 必须加…

【JVM基础06】——组成-直接内存详解

目录 1- 引言&#xff1a;直接内存概述1-1 直接内存是什么&#xff1f;直接内存的定义(What)1-2 为什么用直接内存&#xff1f;Java程序对直接内存的使用 (Why) 2- ⭐核心&#xff1a;详解直接内存(How)2-1 文件拷贝案例介绍对比常规 IO(BIO) 和 NIO常规 IO 的操作流程NIO 的操…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

Spring Boot的Web开发

目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…

[Vulnhub] Raven2 PHPMailer-RCE+MSQP:Mysql权限提升

信息收集 IP AddressOpening Ports192.168.101.160TCP:22,80,111,46606 $ nmap -p- 192.168.101.160 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f…

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具&#xff0c;进行协作代码开发过程中&#xff0c;最常用的场景为&#xff1a; &#xff08;1&#xff09;拉取代码 将git远端仓库最新代码拉取到本地。 &#xff08;2&#xff09;提交代码 将本地新增修改的代码提交至git远端仓库中…

Spring Cloud微服务项目统一封装数据响应体

在微服务架构下&#xff0c;处理服务之间的通信和数据一致性是一个重要的挑战。为了提高开发效率、保证数据的一致性及简化前端开发&#xff0c;统一封装数据响应体是一种非常有效的实践。本文博主将介绍如何在 Spring Cloud 微服务项目中统一封装数据响应体&#xff0c;并分享…

【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现

1 绪论 1.1 研究背景与意义 在气候变化日益受到全球关注的背景下&#xff0c;天气气温的变化已经对人们的生活各方面都产生了影响&#xff0c;人们在外出时大多都会在手机上看看天气如何&#xff0c;根据天气的变化来决定衣物的穿着和出行的安排。[1]如今手机能提供的信息已经…

C++基础知识:函数重载相关注意事项:1.引用作为重载条件,2.2.函数重载遇见函数默认参数。

1.引用作为重载条件 #include<iostream>using namespace std;//1.引用作为重载的条件 //int 和 const int 类型不同&#xff0c;所以可以作用重载条件 void fn(int &a) //int &a10;不合法 //10放在了常量区&#xff0c;而引用要么在栈区&#xff0c;要么在堆区{…

mysql的MHA以及故障模拟

目录 MHA概念 MHA的组件 MHA的特点 实验&#xff1a;搭建完成MHA的架构 实验&#xff1a;主备切换 实验结果 实验&#xff1a;故障切换 实验&#xff1a;故障恢复 MHA概念 MHA&#xff1a;高可用模式下的故障切换&#xff0c;基于主从复制。它解决的是单点故障和主从复…

Ruby、Python、Java 开发者必备:Codigger之软件项目体检

在编程的广阔天地里&#xff0c;Ruby、Python 和 Java 开发者们各自凭借着独特的语言特性&#xff0c;构建着精彩纷呈的应用世界。然而&#xff0c;无论使用哪种语言&#xff0c;确保项目的高质量始终是至关重要的目标。而 Codigger 项目体检则成为了实现这一目标的得力助手&am…

【JS】事件循环

事件循环&#xff08;Event Loop&#xff09; 什么是事件循环 事件循环就是一个执行任务队列的机制 为什么会出现事件循环 为了避免单线程出现阻塞,采用了异步的形式执行任务。为了解决异步任务的问题,采用了事件循环机制。 事件循环的流程 JavaScript是一门单线程的语言…

Chapter 17 Python文件操作(下)

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、文件的写入二、文件的追加 前言 Python作为一种高效且易于学习的编程语言&#xff0c;提供了一系列强大的文件操作功能&#xff0c;使得用户能够轻松地实现文件的读…

深度解析Linux-C——函数和内存管理

目录 函数指针&#xff1a; 指针函数&#xff1a; 参数为指针的函数&#xff1a; 参数为数组的函数&#xff1a; C语言内存管理 stdlib.h头文件常用函数介绍 1、局部变量 2、全局变量 3、 堆空间变量 4、静态变量 5、常量 函数指针&#xff1a; 指向函数的指针&#…