时间序列分析方法之 -- 移动平均(Moving Average)

news2024/11/18 13:36:57

目录

 

原理

适用情况

Python 示例代码

结论


 

原理

移动平均(Moving Average, MA)是一种常用的时间序列分析和数据平滑方法。其基本思想是通过取时间序列中某个时间窗口内数据的平均值来消除短期波动,从而更好地揭示数据的长期趋势。根据取平均值的方式不同,移动平均可以分为简单移动平均(Simple Moving Average, SMA)、加权移动平均(Weighted Moving Average, WMA)和指数移动平均(Exponential Moving Average, EMA)等。

  1. 简单移动平均(SMA) 简单移动平均是最基本的移动平均方法,其计算方式是取指定窗口内的数据点的简单平均值。

    eq?text%7BSMA%7D%28t%29%20%3D%20%5Cfrac%7B1%7D%7BN%7D%20%5Csum_%7Bi%3D0%7D%5E%7BN-1%7D%20x%28t-i%29

    其中,x(t)x(t)x(t) 是时间序列在时间 ttt 的值, NNN 是窗口大小。

  2. 加权移动平均(WMA) 加权移动平均在计算平均值时为每个数据点赋予不同的权重,通常是靠近当前时间点的数据点权重较大。

    eq?%5Ctext%7BWMA%7D%28t%29%20%3D%20%5Cfrac%7B%5Csum_%7Bi%3D0%7D%5E%7BN-1%7D%20w_i%20%5Ccdot%20x%28t-i%29%7D%7B%5Csum_%7Bi%3D0%7D%5E%7BN-1%7D%20w_i%7D

    其中, eq?w_i​ 是权重,通常满足 eq?w_0%20%3E%20w_1%20%3E%20%5Ccdots%20%3E%20w_%7BN-1%7D​。

  3. 指数移动平均(EMA) 指数移动平均是一种递归计算的移动平均方法,其特点是对最新数据点赋予更大的权重。其计算公式为:

    eq?%5Ctext%7BEMA%7D%28t%29%20%3D%20%5Calpha%20x%28t%29%20+%20%281%20-%20%5Calpha%29%20%5Ctext%7BEMA%7D%28t-1%29

    其中, α 是平滑系数,取值范围为 0<α<1。

适用情况

  1. 简单移动平均(SMA)

    • 适用于需要平滑短期波动并揭示长期趋势的情况。
    • 适合处理周期性较弱、波动较小的时间序列数据。
  2. 加权移动平均(WMA)

    • 适用于需要对最近数据点赋予更高权重的情况。
    • 常用于金融市场中的技术分析。
  3. 指数移动平均(EMA)

    • 适用于需要对最新数据点反应更敏感的情况。
    • 常用于金融市场中的短期预测和交易策略。

Python 示例代码

以下是一些使用 Python 实现移动平均的方法及示例代码:

  1. 简单移动平均(SMA)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

# 计算简单移动平均
window_size = 5
sma = pd.Series(data).rolling(window=window_size).mean()

# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data, label='Original Data')
plt.plot(sma, label='SMA', linewidth=2)
plt.legend()
plt.title('Simple Moving Average')
plt.show()
  1. 加权移动平均(WMA)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

# 计算加权移动平均
window_size = 5
weights = np.arange(1, window_size + 1)
wma = pd.Series(data).rolling(window=window_size).apply(lambda x: np.dot(x, weights) / weights.sum(), raw=True)

# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data, label='Original Data')
plt.plot(wma, label='WMA', linewidth=2)
plt.legend()
plt.title('Weighted Moving Average')
plt.show()
  1. 指数移动平均(EMA)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

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

# 计算指数移动平均
span = 20
ema = pd.Series(data).ewm(span=span, adjust=False).mean()

# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data, label='Original Data')
plt.plot(ema, label='EMA', linewidth=2)
plt.legend()
plt.title('Exponential Moving Average')
plt.show()

 

结论

移动平均是一种有效的时间序列平滑和分析方法,通过不同的加权方式可以适应各种不同的数据特性和分析需求。简单移动平均适合平滑短期波动并揭示长期趋势;加权移动平均和指数移动平均则适合对最新数据点赋予更高权重,从而对变化更为敏感。在实际应用中,选择合适的移动平均方法应根据具体数据的特性和分析目标进行权衡和调整。

 

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

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

相关文章

【Tomcat】Mac M3 Pro安装Tomcat7

文章目录 下载配置环境变量修改权限启动和关闭 下载 官网&#xff1a;https://tomcat.apache.org/ cd ~/Library tar -zxvf /Users/用户名/Downloads/apache-tomcat-7.0.99.tar.gz mv apache-tomcat-7.0.99 ~/Library/tomcat配置环境变量 vi ~/.bash_profileexport TOMCAT…

UWA Gears正式上线,助力移动平台性能优化

亲爱的开发者朋友们&#xff0c; 我们非常激动地向大家宣布&#xff0c;UWA最新的无SDK性能分析工具 - UWA Gears&#xff0c;现已正式发布&#xff01;无论您使用的是哪种开发引擎&#xff0c;这款工具都能轻松应对&#xff0c;为您的项目保驾护航。更令人心动的是&#xff0c…

vue3【实战】可编辑的脱敏信息

<script lang"ts" setup> import { ref, onMounted } from "vue"; let real_name ref("朝阳");let name ref("");onMounted(() > {name.value des_name(real_name.value); });function focusing() {name.value real_name…

spring —— 事务管理器

事务管理主要针对数据源进行操作&#xff1a;在数据库方面&#xff0c;通过 TransactionManager 事务管理器进行管理&#xff0c;表明一旦出现错误&#xff0c;该数据源的所有数据全部复原。那么数据库如何判断是否发生了错误呢&#xff1f;这就需要在代码方面&#xff0c;通过…

FPGA开发——实现流水灯的设计

一、概述 众所周知&#xff0c;在我们学习任何一款硬件&#xff0c;不管是单片机MCU&#xff0c;DSP以及其他的一系列硬件在内的最开始接触的都是LED流水灯的实现&#xff0c;这就和我们在学习编程时的输出“Hello World”一样&#xff0c;我们在学习FPGA的过程当中也是要从LE…

Webshell管理工具:AntSword(中国蚁剑)

中国蚁剑是一款开源的跨平台网站管理工具&#xff0c;它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。 通俗的讲&#xff1a;中国蚁剑是 一 款比菜刀还牛的shell控制端软件。 一、中国蚁剑下载 1. 下载 AntSword-Loader https://github.com/AntSwordP…

MySQL窗口函数详解

MySQL窗口函数详解 MySQL从8.0版本开始引入了窗口函数&#xff0c;这是一个强大的特性&#xff0c;可以大大简化复杂的数据分析任务。本文将详细介绍MySQL窗口函数的概念、语法和常见用法&#xff0c;并结合实际应用场景进行说明。 什么是窗口函数? 窗口函数是一种能够对结…

单元测试的最佳实践

整体架构 合适的架构可以提升可测试性。比如菱形对称架构的模块化和解耦特性使得系统各个部分可以独立进行单元测试。这不仅提高了测试的效率&#xff0c;还能够减少测试的依赖性&#xff0c;提高测试准确性。 代码设计 代码设计和可测试性有密切关联。强烈建议一个方法的代码行…

Java面试八股之什么是spring boot starter

什么是spring boot starter Spring Boot Starter是Spring Boot项目中的一个重要概念。它是一种依赖管理机制&#xff0c;用于简化Maven或Gradle配置文件中的依赖项声明。Spring Boot Starter提供了一组预定义的依赖关系&#xff0c;这些依赖关系被封装在一个单一的包中&#x…

CC-Link转Profinet协议网关功能与配置详解

怎么样才能把CC-Link和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题&#xff0c;作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题&#xff0c;名为JM-PN-CCLK&#xff0c;下面是详细介绍。 一&#xff0c;产品主要功能 1、捷米特JM-P…

go语言学习文档精简版

Go语言是一门开源的编程语言&#xff0c;目的在于降低构建简单、可靠、高效软件的门槛。Go平衡了底层系统语言的能力&#xff0c;以及在现代语言中所见到的高级特性。 你好&#xff0c;Go package main // 程序组织成包import "fmt" // fmt包用于格式化输出数据// …

【C++_list】理解链表!实现链表!成为链表!!

List 1. list的介绍及使用2. list的模拟1&#xff09;大致了解List框架2&#xff09;模拟实现List操作3&#xff09;关于const迭代器的问题&#xff08;重点&#xff09;4&#xff09;关于链表拷贝的问题 1. list的介绍及使用 下面会给出list的文档介绍官网&#xff0c;也是本博…

Vue常用指令及其生命周期

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 目录 1.常用指令 1.1 v-bind 1.2 v-model 注意事项 1.3 v-on 注意事项 1.4 v-if / v-else-if / v-else 1.5 v-show 1.6 v-for 无索引 有索引 生命周期 定义 流程 1.常用指令 Vue当中的指令…

【OpenCV C++20 学习笔记】基本图像容器——Mat

【OpenCV C20 学习笔记】基本图像容器——Mat 概述Mat内部结构引用计数机制颜色数据格式 显式创建Mat对象使用cv::Mat::Mat构造函数矩阵的数据项 使用数组进行初始化的构造函数cv::Mat::create函数MATLAB风格的初始化小型矩阵通过复制创建Mat对象 Mat对象的输出其他普通数据项的…

软考:软件设计师 — 5.计算机网络

五. 计算机网络 1. OSI 七层模型 层次名称主要功能主要设备及协议7应用层实现具体的应用功能 POP3、FTP、HTTP、Telent、SMTP DHCP、TFTP、SNMP、DNS 6表示层数据的格式与表达、加密、压缩5会话层建立、管理和终止会话4传输层端到端的连接TCP、UDP3网络层分组传输和路由选择 三…

Spring事件机制

文章目录 一、Spring事件二、实现Spring事件1、自定义事件2、事件监听器2.1 实现ApplicationListener接口2.2 EventListener2.3 TransactionalEventListener 3、事件发布4、异步使用 三、EventBus1、事件模式2、EventBus三要素3、同步事件3.1 定义事件类3.2 定义事件监听3.3 测…

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom

STM32是使用的内部时钟还是外部时钟

STM32是使用的内部时钟还是外部时钟&#xff0c;经常会有人问这个问题。 1、先了解时钟树&#xff0c;见下图&#xff1a; 2、在MDK中&#xff0c;使用的是HSEPLL作为SYSCLK&#xff0c;因此需要对时钟配置寄存器&#xff08;RCC_CFGR&#xff09;进行配置&#xff0c;寄存器内…

Linux:传输层(2) -- TCP协议(2)

目录 1. 流量控制 2. 滑动窗口 3. 拥塞控制 4. 延迟应答 5. 捎带应答 6. 面向字节流 7. 粘包问题 8. TCP异常情况 1. 流量控制 接收端处理数据的速度是有限的. 如果发送端发的太快 , 导致接收端的缓冲区被打满 , 这个时候如果发送端继续发送 , 就会造成丢包, 继而引…

享元模式(结构型)

目录 一、前言 二、享元模式 三、总结 一、前言 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;用于减少大量细粒度对象的内存占用。它通过共享尽可能多的相同数据来节约内存空间。 享元模式由以下角色组成&#xff1a; Flyweight&…