机器学习笔记:时间序列分解(滑动平均)-程序员宅基地

技术标签: R  机器学习  人工智能  

0 前言

        时间序列数据可以表现出多种模式,将时间序列拆分为多个组件通常很有帮助,每个组件代表一个基础模式类别。

        在机器学习笔记(时间序列):不同类型的图示_UQI-LIUWJ的博客-程序员宅基地中,我们讨论了三种类型的时间序列模式:趋势、季节性和周期。

         当我们进行时间序列分解时,我们通常将趋势和周期组合成单个趋势周期组件(为简单起见,有时就称为趋势)。 因此,我们认为时间序列包含三个部分:趋势周期部分、季节性部分和剩余部分(包含时间序列中的任何其他内容)。

        

        其中 yt 是数据,St 是季节性成分,Tt 是趋势周期成分,Rt 是剩余成分。

        或者,我们也可以对时间序列进行乘法分解。可以写成

 

         如果季节性波动的幅度或围绕趋势-周期的变化不随时间序列 时刻t的变化 而变化,则加法分解是最合适的。

        当季节性波动的变化或趋势-周期的变化与时间序列的 时刻t 成正比时,乘法分解更合适。

         乘法分解在经济相关的时间序列中很常见。

        使用乘法分解的另一种方法是首先转换数据,直到序列中的变化随着时间的推移看起来是稳定的,然后使用加法分解。

        使用对数变换后的加法分解,相当于使用乘法分解,因为  

 1 举个例子先:

        我们将对电气设备的新订单指数进行分解,如图 6.1 所示。 数据显示了欧元区(16 个国家)电气设备(计算机、电子和光学产品)的新订单数量。

        图 6.1 显示了趋势周期分量 Tt ,以红色显示;原始数据 yt, 以灰色显示。 趋势周期显示了该系列的整体运动,忽略了季节性和任何小的随机波动。

         图 6.2 显示了这些数据的加法分解。 本例中用于估计分量的方法是 STL,后面再讨论

         这三个组件分别显示在图 6.2 的底部三个面板中。 可以将这些组件添加在一起以重建顶部面板中显示的时间序列数据。

         请注意,季节性成分随时间缓慢变化,因此任何连续两年都有相似的模式,但相隔很远的年份可能有不同的季节性模式。

         底部面板中显示的剩余部分是从数据中减去季节性和趋势周期部分后剩下的部分。

        

        每个面板右侧的灰色条显示组件的相对比例。 每个灰色条代表相同的长度,但由于图的比例不同,条的大小会有所不同。 底部面板中的大灰色条显示剩余分量的变化与数据的变化相比较小,数据的变化大约是四分之一大小。 如果我们缩小底部的三个面板,直到它们的条形与数据面板中的条形大小相同,那么所有面板的比例都相同。

1.1 经季节性调整的数据

        如果从原始数据中去除季节性成分,则结果值为“季节性调整”数据。 对于加法分解,经季节调整的数据由 yt−St 给出,对于乘法数据,经季节调整的值由 yt/St 获得。

        图 6.3 显示了经季节性调整的电气设备订单。

        如果季节性引起的变化不是主要关注点,则季节性调整的系列可能很有用。

        例如,每月失业数据通常会进行季节性调整,以突出由于潜在经济状况而不是季节性变化引起的变化。毕业季找工作的人增加导致的失业增加是季节性变化,而经济衰退导致的失业增加是非季节性的。大多数研究失业数据的经济分析师对非季节性变化更感兴趣。因此,就业数据(和许多其他经济数据)通常会进行季节性调整。

        注意季节性调整数据并不是趋势数据(因为其中还有剩余部分)

2 移动平均

        时间序列分解的经典方法起源于 1920 年代,直到 1950 年代才被广泛使用。 它仍然是许多时间序列分解方法的基础,因此了解它的工作原理很重要。

        经典分解的第一步是使用移动平均法来估计趋势周期,因此我们从讨论移动平均开始。

2.1 移动平均平滑

        m阶移动平均可以写成

        其中m=2k+1

         也就是说,时间 t 的趋势周期的估计是通过对 t 的 k 个周期内的时间序列的值求平均值来获得的。

        时间上接近位置的观测值也可能接近。 因此,平均值消除了数据中的一些随机性,留下了平滑的趋势周期成分。

        我们称之为 m -MA,表示 m 阶的移动平均线。

2.1.1 R语言实现

library(forecast)
library(ggplot2)

y<-ts(c(5,3,3.1,3.2,3.3,3.4,3.5,3.3,3.2,4,4.1,4.2,
         6,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5,
         10,9,8,8.5,8.4,8.5,8.6,8.7,8.8,8.9,9,9.5),
       start = 2020,
       frequency = 12)


ma(y,5)
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2020   NA   NA 3.52 3.20 3.30 3.34 3.34 3.48 3.62 3.76 4.30 4.46
2021 4.48 4.50 4.52 4.20 4.30 4.40 4.50 4.60 4.70 4.80 5.88 6.74
2022 7.38 8.10 8.78 8.48 8.40 8.54 8.60 8.70 8.80 8.98   NA   NA
autoplot(y,series='origin data')+
 autolayer(ma(y,5),series='5-ma')+
 xlab('year')+
 ggtitle('origin data vs moving average')

         注意在滑动平均中,最前的两个月,最后的两个月都没有值,因为我们在两边都没有两个观察值。

        滑动平均的曲线比原始数据更平滑,并且捕获了时间序列的主要方向,没有小波动。滑动平均线的阶数决定了趋势周期估计的平滑度。 一般来说,阶数越大意味着曲线越平滑。

autoplot(y,series='origin data')+
 autolayer(ma(y,5),series='5-ma')+
 autolayer(ma(y,3),series='3-ma')+
 autolayer(ma(y,7),series='7-ma')

         诸如此类的简单移动平均线通常是奇数阶数(例如,3、5、7 等)。 因此它们是对称的:在 m=2k+1 阶的移动平均中,中间观察值和两侧的 k 个观察值被平均。 但如果 m 是偶数,它将不再是对称的。

2.2 移动平均的移动平均

        可以将移动平均应用于移动平均的结果上。 这样做的一个原因是使偶数阶移动平均对称。

比如我们进行如下的实验:

        

        如果是ma(y,2,centre=FALSE),那么就是包括自己的相邻4个求平均(后面比前面多一个)

        比如此时的y1=0.5(y1+y2),y2=0.5(y2+y3)

        但如果没有centre=FALSE(也就是默认的情况),那么就相当于在ma(y,2,centre=FALSE)的基础上再求一个相邻平均(前面比后面多一个)

       y1=0.5(y1+y2),y2=0.5(y2+y3)的基础上,

y2’=0.5[0.5(y1+y2)+0.5(y2+y3)]=0.25y1+0.5y2+0.25y3

——>于是又对称了

2.3  用季节性数据估计趋势周期

        居中移动平均最常见的用途是根据季节性数据估计趋势周期。 考虑 2×4 -MA(对称的4阶滑动平均):

         当应用于季度数据时,一年中的每个季度都被赋予相同的权重,因为第一项和最后一项适用于连续年份的同一季度。 因此,季节性变化将被平均化,\hat{T_t}的结果值将几乎没有或一点没有季节性变化。 使用 2×8-MA 或 2×12-MA 对季度数据可以获得类似的效果。

        通常,2×m -MA 相当于 m+1 阶的加权移动平均值,其中所有观测值的权重为 1/m,除了第一项和最后一项的权重为 1/(2m)。

        因此,如果季节性周期是偶数m,我们使用 2×m -MA 来估计趋势-周期(对称的m阶滑动平均)。

        如果季节性周期是奇数 m ,我们使用 m -MA 来估计趋势周期。

        例如,2×12 -MA 可用于估计每月数据的趋势周期,而 7-MA 可用于估计具有每周季节性的每日数据的趋势周期。

        MA 阶数的其他选择通常会导致趋势周期估计受到数据季节性的影响。

2.4 加权滑动平均

        滑动平均的组合产生加权滑动平均。 例如,上面讨论的 2×4-MA 等价于加权 5-MA,其权重为

        一般来说,加权m-MA可以写成(其中m=2k+1) 

         重要的是权重总和为 1,并且它们是对称的( )。

        上面说的简单 m -MA 是一种特殊情况,所有的权重都等于 1/m

        加权滑动平均的一个主要优点是它们可以更平滑地估计趋势周期。 与以相同权重进入和离开计算的简单 m -MA不同,它们的权重缓慢增加然后缓慢减少,从而形成更平滑的曲线。

   2.5 亨德森滑动平均

   在趋势的估计中,也使用了亨德森移动平均线。 选择这些滤波器是因为它们的平滑特性。 可以使用公式计算 2p+1 阶 Henderson 移动平均的系数

其中n=p+2 

3 经典的分解方法

        经典分解有两种形式:加法分解和乘法分解。 下面描述了具有季节性周期 m 的时间序列(例如,m=4 用于季度数据,m=12 用于月度数据,m=7 用于具有每周模式的每日数据)。'     

           在经典分解中,我们假设季节性成分每年都是恒定的。 对于乘法季节性,m 值有时称为“季节性指数 seasonal indices”。

3.1 加法分解

  • 如果 m 是偶数,则使用 2×m-MA (对称的m阶滑动平均)计算趋势周期分量 \hat{T_t}。 如果 m 是奇数,则使用 m -MA 计算趋势-周期分量 \hat{T_t}
  • 计算去趋势序列
  • 要估计每个季节的季节性成分,只需平均该季节的去趋势值。
    • 例如,对于月度数据,3 月的季节性成分是数据中所有去趋势的 3 月值的平均值。
    • 然后调整这些季节性指数以确保它们之和为 0 (这里需要限制和,是为了更好地说明季节性和平均值之间的关系【比如在平均值之上0.05的数值,在平均值之下0.01的数值这样】)
    • 通过将这些月度值串在一起,然后为每一年的数据复制序列来获得季节性分量。
    • 这便给出了
  • 剩余部分是通过减去估计的季节性和趋势周期部分来计算的

3.2 乘法分解

        经典的乘法分解是类似的,只是减法被除法代替。

  • 如果 m 是偶数,则使用 2×m-MA (对称的m阶滑动平均)计算趋势周期分量 \hat{T_t}。 如果 m 是奇数,则使用 m -MA 计算趋势-周期分量 \hat{T_t}
  • 计算去趋势序列
  •  要估计每个季节的季节性成分,只需平均该季节的去趋势值。
    • 例如,对于月度数据,3 月的季节性成分是数据中所有去趋势的 3 月值的平均值。
    • 然后调整这些季节性指数以确保它们之和为m(这里需要限制和,是为了更好地说明季节性和平均值之间的关系【比如在平均值之上0.05的比例,在平均值之下0.01的比例这样】)
    • 通过将这些月度值串在一起,然后为每一年的数据复制序列来获得季节性分量。
    • 这便给出了
  • 剩余部分是通过减去估计的季节性和趋势周期部分来计算的

3.3 经典时间序列分解结果

        图 6.8 显示了电气设备指数的经典时间序列分解结果。 将此分解与图 6.1 中所示的分解进行比较。

        2009 年剩余值低于 1 的运行表明趋势周期成分存在一些“泄漏”到剩余成分中。 趋势周期估计过度平滑了数据的下降,相应的剩余值受到了较差的趋势周期估计的影响。

 

 3.4 R语言实现

还是2.11节的y

3.4.1 加法分解

y %>% decompose(type='additive') %>% autoplot()

trend 左右各少半年

seasonality 一个周期内的值求和为0

 3.4.2 乘法分解

y %>% decompose(type='multiplicative') %>% autoplot()

trend 左右各少半年

seasonality 一个周期内的值求和为12

 3.5 经典时间序列分解的局限性

虽然经典分解仍然被广泛使用,但不推荐使用,因为现在有几种更好的方法。

下面总结了经典分解的一些问题。

  • 对于前几次和最后几次观察,趋势周期的估计是不可用的。例如,如果 m=12 ,前六个或后六个观察值没有趋势周期估计。因此,也没有对相同时间段的剩余部分的估计。
  • 趋势-周期估计倾向于过度平滑数据中的快速上升和下降(如上例所示)。
  • 经典分解方法假设季节性成分每年重复。对于许多系列,这是一个合理的假设,但对于一些较长的系列则不是。
    • 例如,随着空调的普及,电力需求模式随着时间的推移而发生了变化。具体而言,在许多地方,几十年前的季节性使用模式在冬季(由于供暖)具有最大需求,而当前的季节性模式在夏季(由于空调)具有最大需求。
    • 经典的分解方法无法捕捉这些随时间的季节性变化。
  • 有时,少数时期的时间序列值可能特别不寻常。例如,每月的航空客运量可能会受到劳资纠纷的影响,使纠纷期间的交通量与往常不同。经典方法对这些异常值并不稳健。

4 X11分解

        一种流行的分解季度和月度数据的方法是 X11 方法,它起源于美国人口普查局和加拿大统计局。

        该方法基于经典分解,但包含许多额外的步骤和功能,以克服上一节中讨论的经典分解的缺点:

  • 趋势周期估计值可用于包括终点在内的所有观测值
  • 允许季节性分量随时间缓慢变化。
  • X11 还具有一些复杂的方法来处理交易日变化、假日效应和已知预测变量的影响。
  • 它同时包含了加法和乘法分解。
  • 该过程是完全自动的,并且往往对时间序列中的异常值具有高度鲁棒性。

         将此分解与图 6.1 所示的 STL 分解和图 6.8 所示的经典分解进行比较。 X11 趋势周期比其他两种方法更好地捕捉到了 2009 年初数据的突然下降,现在在剩余部分中更清楚地看到了 2009 年底的异常观察。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40206371/article/details/122814425

智能推荐

5个超厉害的资源搜索网站,每一款都可以让你的资源满满!_最全资源搜索引擎-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏41次。生活中我们无时不刻不都要在网站搜索资源,但就是缺少一个趁手的资源搜索网站,如果有一个比较好的资源搜索网站可以帮助我们节省一大半时间!今天小编在这里为大家分享5款超厉害的资源搜索网站,每一款都可以让你的资源丰富精彩!网盘传奇一款最有效的网盘资源搜索网站你还在为找网站里面的资源而烦恼找不到什么合适的工具而烦恼吗?这款网站传奇网站汇聚了4853w个资源,并且它每一天都会持续更新资源;..._最全资源搜索引擎

Book类的设计(Java)_6-1 book类的设计java-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏18次。阅读测试程序,设计一个Book类。函数接口定义:class Book{}该类有 四个私有属性 分别是 书籍名称、 价格、 作者、 出版年份,以及相应的set 与get方法;该类有一个含有四个参数的构造方法,这四个参数依次是 书籍名称、 价格、 作者、 出版年份 。裁判测试程序样例:import java.util.*;public class Main { public static void main(String[] args) { List <Book>_6-1 book类的设计java

基于微信小程序的校园导航小程序设计与实现_校园导航微信小程序系统的设计与实现-程序员宅基地

文章浏览阅读613次,点赞28次,收藏27次。相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低学校的运营人员成本,实现了校园导航的标准化、制度化、程序化的管理,有效地防止了校园导航的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修正建筑速看等信息。课题主要采用微信小程序、SpringBoot架构技术,前端以小程序页面呈现给学生,结合后台java语言使页面更加完善,后台使用MySQL数据库进行数据存储。微信小程序主要包括学生信息、校园简介、建筑速看、系统信息等功能,从而实现智能化的管理方式,提高工作效率。

有状态和无状态登录

传统上用户登陆状态会以 Session 的形式保存在服务器上,而 Session ID 则保存在前端的 Cookie 中;而使用 JWT 以后,用户的认证信息将会以 Token 的形式保存在前端,服务器不需要保存任何的用户状态,这也就是为什么 JWT 被称为无状态登陆的原因,无状态登陆最大的优势就是完美支持分布式部署,可以使用一个 Token 发送给不同的服务器,而所有的服务器都会返回同样的结果。有状态和无状态最大的区别就是服务端会不会保存客户端的信息。

九大角度全方位对比Android、iOS开发_ios 开发角度-程序员宅基地

文章浏览阅读784次。发表于10小时前| 2674次阅读| 来源TechCrunch| 19 条评论| 作者Jon EvansiOSAndroid应用开发产品编程语言JavaObjective-C摘要:即便Android市场份额已经超过80%,对于开发者来说,使用哪一个平台做开发仍然很难选择。本文从开发环境、配置、UX设计、语言、API、网络、分享、碎片化、发布等九个方面把Android和iOS_ios 开发角度

搜索引擎的发展历史

搜索引擎的发展历史可以追溯到20世纪90年代初,随着互联网的快速发展和信息量的急剧增加,人们开始感受到了获取和管理信息的挑战。这些阶段展示了搜索引擎在技术和商业模式上的不断演进,以满足用户对信息获取的不断增长的需求。

随便推点

控制对象的特性_控制对象特性-程序员宅基地

文章浏览阅读990次。对象特性是指控制对象的输出参数和输入参数之间的相互作用规律。放大系数K描述控制对象特性的静态特性参数。它的意义是:输出量的变化量和输入量的变化量之比。时间常数T当输入量发生变化后,所引起输出量变化的快慢。(动态参数) ..._控制对象特性

FRP搭建内网穿透(亲测有效)_locyanfrp-程序员宅基地

文章浏览阅读5.7w次,点赞50次,收藏276次。FRP搭建内网穿透1.概述:frp可以通过有公网IP的的服务器将内网的主机暴露给互联网,从而实现通过外网能直接访问到内网主机;frp有服务端和客户端,服务端需要装在有公网ip的服务器上,客户端装在内网主机上。2.简单的图解:3.准备工作:1.一个域名(www.test.xyz)2.一台有公网IP的服务器(阿里云、腾讯云等都行)3.一台内网主机4.下载frp,选择适合的版本下载解压如下:我这里服务器端和客户端都放在了/usr/local/frp/目录下4.执行命令# 服务器端给执_locyanfrp

UVA 12534 - Binary Matrix 2 (网络流‘最小费用最大流’ZKW)_uva12534-程序员宅基地

文章浏览阅读687次。题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93745#problem/A题意:给出r*c的01矩阵,可以翻转格子使得0表成1,1变成0,求出最小的步数使得每一行中1的个数相等,每一列中1的个数相等。思路:网络流。容量可以保证每一行和每一列的1的个数相等,费用可以算出最小步数。行向列建边,如果该格子是_uva12534

免费SSL证书_csdn alphassl免费申请-程序员宅基地

文章浏览阅读504次。1、Let's Encrypt 90天,支持泛域名2、Buypass:https://www.buypass.com/ssl/resources/go-ssl-technical-specification6个月,单域名3、AlwaysOnSLL:https://alwaysonssl.com/ 1年,单域名 可参考蜗牛(wn789)4、TrustAsia5、Alpha..._csdn alphassl免费申请

测试算法的性能(以选择排序为例)_算法性能测试-程序员宅基地

文章浏览阅读1.6k次。测试算法的性能 很多时候我们需要对算法的性能进行测试,最简单的方式是看算法在特定的数据集上的执行时间,简单的测试算法性能的函数实现见testSort()。【思想】:用clock_t计算某排序算法所需的时间,(endTime - startTime)/ CLOCKS_PER_SEC来表示执行了多少秒。【关于宏CLOCKS_PER_SEC】:以下摘自百度百科,“CLOCKS_PE_算法性能测试

Lane Detection_lanedetectionlite-程序员宅基地

文章浏览阅读1.2k次。fromhttps://towardsdatascience.com/finding-lane-lines-simple-pipeline-for-lane-detection-d02b62e7572bIdentifying lanes of the road is very common task that human driver performs. This is important ..._lanedetectionlite

推荐文章

热门文章

相关标签