破解时间序列:移动平均法的综合指南

news2024/11/23 20:10:21

目录

  • 前言
  • 一、时间序列介绍
    • 1-1、时间序列定义
    • 1-2、时间序列特性
    • 1-3、时间序列作用
  • 二、统计学方法
    • 2-1、移动平均法介绍
      • 2-1-1、基本原理、计算过程
      • 2-1-2、移动平均法分类
        • 2-1-3、简单移动平均法
        • 2-1-4、加权移动平均法
        • 2-1-5、指数移动平均法(Exponential Moving Average,EMA)
        • 2-1-6、累积移动平均(Cumulative Moving Average,CMA)
        • 2-1-7、比较
  • 总结


前言

时间序列(英语:time series)是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,12小时,7天,1年),因此时间序列可以作为离散时间数据进行分析处理。时间序列广泛应用于数理统计、信号处理、模式识别、计量经济学、数学金融、天气预报、地震预测、脑电图、控制工程、航空学、通信工程以及绝大多数涉及到时间数据测量的应用科学与工程学。(来源:维基百科)

一、时间序列介绍

1-1、时间序列定义

时间序列:时间序列是按照时间顺序排列的一组数据点。这些数据点可以是在连续的时间点(例如每秒、每分钟、每小时)或者在固定的时间间隔(例如每天、每周、每月、每季度、每年)上观察到的。

1-2、时间序列特性

时间序列数据有一些特殊的特性,这些特性使得它们与其他类型的统计数据有所不同。以下是一些主要的特性

  • 时间依赖性:时间序列数据的一个关键特性是观察值之间的依赖性。这意味着一个时间点的数据可能会受到其历史数据的影响。例如,今天的股票价格可能会受到过去几天或几个月的股票价格的影响。

  • 季节性:许多时间序列数据会显示出季节性的模式,这意味着在一年中的特定时间,数据会有一定的模式或趋势。例如,零售业的销售额通常在假日季节(如圣诞节)期间会有所增加。

  • 趋势:趋势是指时间序列数据随着时间的推移呈现出的持续上升或下降的模式。例如,一个公司的年销售额可能会显示出持续增长的趋势。

  • 周期性:周期性是指数据在固定的时间间隔内显示出的模式或波动。这不同于季节性,因为周期性的模式不一定与日历时间(如季节或月份)有关。例如,经济可能会经历几年的增长和衰退的周期。

  • 不稳定性:许多时间序列数据可能会随着时间的推移而变得不稳定,这可能是由于市场条件的变化、政策的变化、技术的进步等因素引起的。

1-3、时间序列作用

时间序列分析在许多领域都有重要的应用,主要有以下几个作用

  • 预测:时间序列分析的一个主要应用是预测未来的数据点。通过理解过去的数据模式,我们可以预测未来的趋势、季节性模式等。例如,企业可能会使用时间序列分析来预测未来的销售额,以便更好地进行库存管理和资源规划。

  • 异常检测:时间序列分析也可以用于检测数据中的异常值或者突变。例如,如果一个服务器的流量突然增加,这可能意味着服务器正在遭受攻击,或者有一些其他的问题。

  • 理解底层模式和关系:时间序列分析可以帮助我们理解数据的底层模式和关系。例如,我们可以使用时间序列分析来理解经济周期,或者理解股票价格的波动。

  • 政策或计划评估:时间序列分析也可以用于评估政策或计划的效果。例如,政府可能会使用时间序列分析来评估税收政策的影响,或者评估公共卫生干预的效果。

  • 信号处理:在信号处理领域,时间序列分析可以用于提取有用的信号,或者消除噪声。

二、统计学方法

2-1、移动平均法介绍

2-1-1、基本原理、计算过程

移动平均法的基本原理:通过计算数据集中一段连续的数据点的平均值,以平滑数据并揭示出数据的潜在趋势或周期性模式。这种方法特别适用于时间序列数据,因为它可以帮助我们消除短期的波动,以便更好地理解数据的长期趋势。移动平均法的关键概念是“移动窗口”。这个窗口定义了我们要计算平均值的数据点的数量。例如,如果我们有一组每日销售数据,我们可以选择一个7天的窗口,这意味着我们每次计算的是最近7天的平均销售额。

移动平均法的计算过程如下

  • 选择一个窗口大小。这个窗口大小决定了我们要考虑的数据点的数量。
  • 对于每一个时间点,计算其在窗口内的所有数据点的平均值。这个平均值就是该时间点的移动平均值。
  • 将窗口向前移动一步,然后重复第2步,直到计算出所有时间点的移动平均值。

2-1-2、移动平均法分类

移动平均法是一种常用的时间序列分析方法,主要用于平滑数据以揭示潜在的趋势或周期性模式。根据计算方式的不同,移动平均法主要可以分为以下几种

  • 简单移动平均(Simple Moving Average,SMA):这是最基本的移动平均法,它计算的是每个窗口内的数据的平均值。例如,一个7天的简单移动平均就是过去7天数据的平均值。
  • 加权移动平均(Weighted Moving Average,WMA):在加权移动平均中,每个数据点都有一个权重,这个权重决定了该数据点在平均值中的重要性。通常,最近的数据会被赋予更大的权重,因为它们更能反映当前的情况。
  • 指数移动平均(Exponential Moving Average,EMA):指数移动平均是一种特殊的加权移动平均,它给每个数据点赋予的权重会随着时间的推移而指数衰减。这意味着最近的数据会被赋予最大的权重,而越早的数据权重越小。
  • 累积移动平均(Cumulative Moving Average,CMA):累积移动平均是从数据开始到当前点的所有数据的平均值。这种方法的特点是每个新的数据点都会影响到所有的平均值。

这些移动平均法各有优缺点,适用于不同的情况。简单移动平均易于理解和计算,但可能会忽略最近的数据变化。加权移动平均和指数移动平均可以更好地反映最近的数据变化,但计算起来更复杂。累积移动平均则可以反映长期的趋势,但可能会受到早期数据的影响。

2-1-3、简单移动平均法

简单移动平均法(Simple Moving Average,SMA): 是一种常用的时间序列分析方法,用于平滑数据并识别趋势。它通过计算一系列连续数据点的平均值来生成预测值,从而减少数据的波动性,更好地展现长期趋势。

简单移动平均的计算方法很简单:对于给定的时间序列数据,选择一个固定大小的窗口(如n个数据点),然后计算窗口内数据点的平均值作为预测值。随着时间的推移,窗口向前滑动,并且每次都会重新计算平均值。这样,我们就可以得到一系列平滑后的预测值,用于分析趋势和周期性。

下面是一个使用Python实现简单移动平均的示例代码

import numpy as np
import matplotlib.pyplot as plt

def simple_moving_average(data, window_size):
    weights = np.repeat(1.0, window_size) / window_size
    sma = np.convolve(data, weights, 'valid')
    return sma

# 原始数据
data = np.array([3, 5, 7, 6, 9, 8, 7, 6, 7, 8, 10, 12])

# 移动平均窗口大小
window_size = 3

# 计算简单移动平均
sma = simple_moving_average(data, window_size)

# 绘制原图形
plt.plot(data, label='Original')
# 绘制经过移动平均的图形
plt.plot(range(window_size-1, len(data)), sma, label='SMA')
plt.xlabel('Time')
plt.ylabel('Value')
plt.legend()
plt.show()

输出
在这里插入图片描述

结论: 通过使用简单移动平均法,我们可以对时间序列数据进行平滑处理,并更好地观察长期趋势。请注意,窗口大小的选择会影响到平滑程度和响应速度,较小的窗口大小可以更敏感地反映近期变化,而较大的窗口大小则更适用于分析长期趋势。

2-1-4、加权移动平均法

加权移动平均法(Weighted Moving Average,WMA):是一种基于权重分配的时间序列分析方法,与简单移动平均法相比,加权移动平均法对不同时间点的数据赋予不同的权重,以更好地反映不同时间点对预测值的影响。

加权移动平均的计算方法如下:对于给定的时间序列数据,选择一个固定大小的窗口(如n个数据点),并为窗口内的每个数据点分配一个权重。通常,较新的数据点具有较高的权重,较旧的数据点具有较低的权重。然后,按照权重的比例计算加权平均值作为预测值。随着时间的推移,窗口向前滑动,并重新计算加权平均值。

下面是一个使用Python实现加权移动平均的示例代码,并绘制原图形和经过加权移动平均后的图形

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为中文宋体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

def weighted_moving_average(data, weights):
    """
    计算加权移动平均

    参数:
    data: 时间序列数据(一维数组)
    weights: 权重(一维数组,与数据点对应)

    返回值:
    移动平均结果(一维数组)
    """
    ma = np.convolve(data, weights, mode='valid')
    return ma


# 示例数据
data = [10, 12, 15, 14, 16, 18, 17, 19, 20, 22]
weights = [0.1, 0.2, 0.3, 0.4]

# 计算加权移动平均
wma = weighted_moving_average(data, weights)

# 绘制原图形
plt.plot(data, label='原图形')

# 绘制加权移动平均后的图形
plt.plot(range(len(weights) - 1, len(data)), wma, label='加权移动平均')

# 添加图例和标题
plt.legend()
plt.title('加权移动平均')

# 显示图形
plt.show()

输出如下所示
在这里插入图片描述

2-1-5、指数移动平均法(Exponential Moving Average,EMA)

指数移动平均法(Exponential Moving Average,EMA):是一种常用的时间序列分析方法,用于平滑数据并捕捉趋势的变化。与简单移动平均法和加权移动平均法不同,指数移动平均法赋予最近数据点更高的权重,较旧的数据点权重逐渐减小,以更好地反映近期数据对预测值的影响。

指数移动平均的计算方法如下:对于给定的时间序列数据,选择一个平滑系数(一般记为α),通常取值范围在0到1之间。然后,根据以下公式计算指数移动平均值:

E M A ( t ) = α ∗ d a t a ( t ) + ( 1 − α ) ∗ E M A ( t − 1 ) EMA(t) = α * data(t) + (1 - α) * EMA(t-1) EMA(t)=αdata(t)+(1α)EMA(t1)

其中,EMA(t)表示当前时刻的指数移动平均值,data(t)表示当前时刻的原始数据,EMA(t-1)表示上一时刻的指数移动平均值。通过不断更新指数移动平均值,可以得到一系列平滑后的预测值。

下面是一个使用Python实现指数移动平均的示例代码,并绘制原图形和经过指数移动平均后的图形

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为中文宋体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题


def exponential_moving_average(data, alpha):
    """
    计算指数移动平均

    参数:
    data: 时间序列数据(一维数组)
    alpha: 平滑系数

    返回值:
    移动平均结果(一维数组)
    """
    ema = [data[0]]
    for i in range(1, len(data)):
        ema.append(alpha * data[i] + (1 - alpha) * ema[i - 1])
    return ema


# 示例数据
data = [10, 12, 15, 14, 16, 18, 17, 19, 20, 22]
alpha = 0.3

# 计算指数移动平均
ema = exponential_moving_average(data, alpha)

# 绘制原图形
plt.plot(data, label='原图形')

# 绘制指数移动平均后的图形
plt.plot(range(len(data)), ema, label='指数移动平均')

# 添加图例和标题
plt.legend()
plt.title('指数移动平均')

# 显示图形
plt.show()


输出
在这里插入图片描述

2-1-6、累积移动平均(Cumulative Moving Average,CMA)

累积移动平均(Cumulative Moving Average,CMA):是一种用于平滑时间序列数据的方法,它是一种累积式的平均方法。与简单移动平均和加权移动平均不同,累积移动平均不需要指定固定的窗口大小,而是将所有之前的数据都纳入平均计算中。

累积移动平均的计算方法如下:对于给定的时间序列数据,首先初始化一个累计计数器和一个累计和。然后,对于每个数据点,依次进行累计计算。具体步骤如下:

1、初始化累计计数器count为0和累计和cumulative_sum为0。
2、对于每个数据点data[i],执行以下操作:

  • 将累计计数器count加1。
  • 将累计和cumulative_sum加上当前数据点data[i]。
  • 计算累积移动平均值cma为累计和cumulative_sum除以累计计数器count。
  • 将当前的累积移动平均值cma存储到结果列表中。

通过不断累计计算累积移动平均值,可以得到一系列平滑后的预测值。

下面是一个使用Python实现累积移动平均的示例代码,并绘制原图形和经过累积移动平均后的图形

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为中文宋体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

def cumulative_moving_average(data):
    """
    计算累积移动平均

    参数:
    data: 时间序列数据(一维数组)

    返回值:
    移动平均结果(一维数组)
    """
    cma = []
    cumulative_sum = 0

    for i in range(len(data)):
        cumulative_sum += data[i]
        cma.append(cumulative_sum / (i + 1))

    return cma


# 示例数据
data = [10, 12, 15, 14, 16, 18, 17, 19, 20, 22]

# 计算累积移动平均
cma = cumulative_moving_average(data)

# 绘制原图形
plt.plot(data, label='原图形')

# 绘制累积移动平均后的图形
plt.plot(range(len(data)), cma, label='累积移动平均')

# 添加图例和标题
plt.legend()
plt.title('累积移动平均')

# 显示图形
plt.show()

输出

在这里插入图片描述

2-1-7、比较

以下是简单移动平均(SMA)、加权移动平均(WMA)、指数移动平均(EMA)以及累计移动平均(CMA)各自的优势和劣势

1、简单移动平均(SMA)

优势

  • 易于计算和理解。
  • 可以有效平滑数据,有助于识别长期趋势。

劣势

  • 对于所有的数据点权重相同,可能会忽视最近的数据变化。
  • 当新的数据点加入时,最旧的数据点将被移出,可能会引起不必要的跳跃。

2、加权移动平均(WMA)

优势

  • 对近期的数据给予更高的权重,更能反映最新的数据变动。

劣势

  • 计算复杂度较高,需要设定权重。
  • 虽然反映了近期数据变动,但是仍可能忽视更加突然的数据变化。

3、指数移动平均(EMA)

优势

  • 对最近的数据变化有更高的敏感性,而且能够全面反映所有的数据点,不会因为数据点的移出导致跳跃。
  • EMA相比于WMA更为灵活,只需要设定一个衰减因子。

劣势

  • 计算复杂度高,不如SMA直观。
  • 在数据波动剧烈时,EMA可能会产生过多的噪声。

4、累计移动平均(CMA)

优势

  • 可以反映所有历史数据的变化,有助于观察长期趋势。

劣势

  • 不适合处理有趋势性或季节性的数据。
  • 对新的数据变化反应迟钝。

总结

移动平均法先看到这里!

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

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

相关文章

C# 反射(Reflection)总结

目录 什么是反射? 为什么使用反射? 反射机制的优缺点 如何使用反射? 一,Type访问元数据 获取/修改类中公有成员(属性PropertyI和字段Field等) 调用类中的公有构造函数Constructor 调用类中的公有方…

【软件工程】软件工程期末考试复习题

填空题(每空1分,共25分) 软件生存周期一般可以划分为,问题定义、可行性研究、需求分析、设计、编码、测试和运行和维护。基于软件的功能划分,软件可以划分成___系统软件_、支撑软件、应用软件__三种。可行性研究&…

【UE 从零开始制作坦克】10-炮弹溅射伤害

目录 一、解决炮弹穿过坦克炮塔问题 二、炮弹溅射伤害 效果 一、解决炮弹穿过坦克炮塔问题 打开“PHYS_West_Tank_M1A1Abrams”这个物理资产 造成这种现象的原因是,炮弹只会与如下紫色区域产生碰撞事件 选中坦克炮塔的骨骼 添加盒体外形 缩放盒体外形使其包裹住…

数据库原理之数据库事物

文章目录 一、事物介绍1.1 事物的目的是保证数据的一致性1.2 事物的ACID A、I、D是为了实现 C1.3 什么是本地事物(Local Transactions) 二、数据库系统如何实现ACID2.1 影响深远的ARIES理论2.2 本地事物如何实现原子性和持久性 A、D2.2.1 实现原子性和持久性的Commit Logging方…

基于高精度三维机器视觉的汽车曲轴无序抓取系统应用

Part.1 行业背景 汽车产业的高速发展,对零部件自动化生产提出了更高要求。随着汽车销量的水涨船高,传统的手工生产模式已经难以满足大批量生产的需求,自动化生产是必然趋势。 曲轴是汽车发动机的关键组件之一,生产过程复杂&#…

【MySQL】如何速通MySQL(4)

📌前言:本篇博客介绍如何速通MySQL的第四篇,主要介绍Mysql中主要的基础的入门,学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。或者看一下下面这个链接…

Linux(centos )防火墙常见操作

1、查看防火墙当前状态 systemctl status firewalld 2、开启防火墙 systemctl start firewalld 3、关闭防火墙 systemctl stop firewalld.service 4、如果报错:-bash: firewall-cmd: command not found,可能是没有安装 firewall。安装命令&#xff1a…

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a 视频 https://youtu.be/ZBMFs2PwkB4 错误描述 Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.aEr…

双非硕士-美国联培-马普所博士后-985系主任的逆袭之路

本科和硕士都是双非学校,博士期间曾有美国联合培养经历,毕业后到德国马普所从事博士后研究。现任985高校特聘教授、博/硕士生导师,系主任。知识人网小编特刊介绍李志明博士的逆袭之路。 随着国内就业压力的增大,高校招聘教师也呈现…

element 设置 table中的按钮权限

子组件 <template><!-- 二次封装表格&#xff0c; 仅支持单选 :style"{ height: height }"--><div class"self_table"><el-table:data"tableData"style"width: 100%"v-loading"loading"stripeselecti…

[游戏开发]Unity随机网格中空位置_二叉树

[目录] 0. 前言1. 简单随机2. 可用位置内随机3. 二叉树权重随机&#xff08;1&#xff09;分区域随机&#xff08;2&#xff09;设置权重均衡概率&#xff08;3&#xff09;二叉树缓存权重&#xff08;4&#xff09;利用二叉树随机&#xff08;5&#xff09;优缺点 4. 测试对比…

简要介绍 | Backbone与Baseline的区别

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对Backbone和Baseline进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 Backbone与Baseline的区别&#xff1a;从神经网络到性能基准 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来…

大厂测试员是如何编写测试用例呢?

一、测试用例是软件测试的核心 软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入&#xff0c;在最短的时间内完成测试&#xff0c;发现软件系统的缺陷&#xff0c;保证软件的优良品质&#xff0c;则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要…

【活动总结】0617COC深圳社区首场线下AI技术沙龙活动最强总结

文章目录 活动的发起活动的宣传活动的进行活动的收尾活动的总结活动的致谢更多展望友情链接 就在2023年6月17日&#xff0c;CSDN COC 深圳城市开发者社区&#xff0c;在深圳大学组织了一次以【智能未来 —— 人工智能与城乡规划的交叉对话】为主题的线下沙龙活动&#xff0c;活…

基于spring boot的JsonSerializer 业务内容国际化

说起国际化&#xff0c;真的是老生常谈了。后端有各种i18n的依赖组件&#xff0c;springboot本身也支持i18n的设置&#xff0c;前端vue也有i18n的设置&#xff0c;这些常规操作就不提了&#xff0c;大家可以去搜索其他博客&#xff0c;写的都很详细。 本篇博客主要写的是业务内…

5大技巧,实现视频号预约直播人数暴涨!

两个体量相当的视频号&#xff0c;为什么别人的直播间人数过万&#xff0c;而自己的直播间却寥寥无几&#xff1f;这其中有一个非常重要的原因&#xff0c;就是预约直播的工作没有做好。 通常情况下&#xff0c;视频号直播预约人数和最终场观呈现1:10的比例&#xff0c;换言之…

聊聊Redis中的跳跃表

Redis 大家项目中应该都用过&#xff0c;哪怕没有分布式锁、幂等校验的一些逻辑使用场景&#xff0c;缓存数据这个大家肯定都用过吧&#xff1f;最简单的key-value格式&#xff0c;直接存储String类型。 当然&#xff0c;针对越来越复杂的业务场景&#xff0c;后续也可能用到li…

合宙Air724UG Cat.1模块硬件设计指南--数字语音接口

数字语音接口 简介 数字音频接口DAI&#xff0c;即Digital Audio Interfaces&#xff0c;表示在板级或板间传输数字音频信号的方式。相比于模拟接口&#xff0c;数字音频接口抗干扰能力更强&#xff0c;硬件设计简单&#xff0c;DAI在音频电路设计中得到越来越广泛的应用。 特…

【学习日记2023.6.20】之 分布式事务_CAP定理_BASE理论_微服务集成Seata_Seata的四种事务模式_高可用架构模型

文章目录 1. 分布式事务问题1.1 本地事务1.2 分布式事务1.3 演示分布式事务问题 2. 理论基础2.1 CAP定理2.1.1 一致性2.1.2 可用性2.1.3 分区容错2.1.4 矛盾 2.2 BASE理论2.3 解决分布式事务的思路 3. 初识Seata3.1 Seata的架构3.2 部署TC服务3.2.1 下载3.2.2 解压3.2.3 修改配…

数据库系统概述——第七章 数据库设计(知识点复习+练习题)

&#x1f31f;博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f99a;专栏&am…