0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一些时间序列算法探索

数据分析与开发 来源:数据STUDIO 作者:云朵君 2021-11-18 15:58 次阅读

随着社会的进步,人们生活水平的提高,或是人人都有私家车,然而驱车在外,停车却成了一个头大的问题。而没车的我在维护一组智能停车计时器,它们提供了关于它们使用频率和使用时间的数据。而时刻都在思考,如何才能为大家提供更好的服务。

如果可以根据仪表的过去表现,根据供求规律来预测它的未来价值,那会怎样呢?

准确预测什么时间采取相应策略来实现目标,这是一个不小的挑战,但对于这个挑战,其实是可以通过时间序列预测来解决。当你们在高峰期苦苦寻找停车位时,又被告知这将收取你比平时更多的费用,你们肯定难以接受。但街道通畅无阻的话,车主停车方便,也能给我带来不少的收入,真是一举两得!

接下来我们来探索一些时间序列算法

一些定义时间序列预测法时间序列预测法是一种历史资料延伸预测,也称历史引伸预测法。是以数据数列所能反映的社会经济现象的发展过程和规律性,进行引伸外推,预测其发展趋势的方法。

需要明确一点的是,与回归分析预测模型不同,时间序列模型依赖于数值在时间上的先后顺序,同样大小的值改变顺序后输入模型产生的结果是不同的。

时间序列预测对商业有真正的价值,因为它直接应用于定价、库存和供应链问题。虽然深度学习技术已经开始用于获得更多的洞察力,以更好地预测未来,但时间序列预测仍然是一个主要由经典ML技术提供信息的领域。

当遇到时间序列这个词时,你需要了解它在不同语境中的用法。

时间序列在数学中,时间序列是按时间顺序索引(或列出或图表)的一系列数据点。最常见的是,时间序列是在连续的等间隔时间点上获得的序列。

时间序列的一个例子是道琼斯工业平均指数[1]的日收盘价。在信号处理、天气预报、地震预报和其他可以绘制事件和数据点的领域中,经常会遇到时间序列图和统计建模的使用。

时间序列分析时间序列分析,就是对上述时间序列数据的分析。时间序列数据可以采取不同的形式,包括中断时间序列,它检测时间序列在中断事件前后的演变模式。时间序列所需的分析类型取决于数据的性质。时间序列数据本身可以采用数字或字符序列的形式。

时间序列分析考虑了这样一个事实,即随着时间的推移获取的数据点可能具有应该考虑的内部结构(例如自相关、趋势或季节性变化)

要进行的分析使用多种方法,包括频域和时域、线性和非线性等等。可参见了解更多关于这类数据的时间序列分析的多种方法[2]。

时间序列分解时间序列由四个部分组成:

:季节性成分

:趋势性成分

:周期性成分

:残差,或不规则组件。

时间序列分量分解之间的关系:

加法分解:

, 在哪里 是当时的数据 吨。

乘法分解:

将乘法关系变成加法关系:

一个加模型是否季节性波动的幅度不随水平变化是适当的。如果季节性波动与序列的水平成正比,那么乘法模型是合适的。乘法分解在经济序列中更为普遍。

时间序列预测时间序列预测是使用一个模型来预测未来的价值,该模型基于以前收集的数据在过去发生的模式。虽然可以使用回归模型来探索时间序列数据,将时间指数作为图表上的 变量,但最好使用特殊类型的模型来分析此类数据。

时间序列数据是一组有序的观测数据,不像可以通过线性回归分析的数据。最常见的是ARIMA,这是Autoregressive Integrated Moving Average(自回归综合移动平均线)的首字母缩写。

ARIMA 模型[3] 将一系列的现值与过去的值和过去的预测误差联系起来。它们最适合于分析时域数据,其中数据是随时间排序的。

后面推文将介绍使用单变量时间序列[4]构建一个ARIMA模型,该模型关注一个随时间改变其值的变量。这类数据的一个例子是这个数据集[5],它记录了莫纳罗亚天文台每月的二氧化碳浓度:

CO2YearMonthYearMonth

330.621975.0419751

331.401975.1319752

331.871975.2119753

333.181975.2919754

333.921975.3819755

333.431975.4619756

331.851975.5419757

330.011975.6319758

328.511975.7119759

328.411975.79197510

329.251975.88197511

330.971975.96197512

时间序列数据特征在查看时间序列数据时,为了更好地理解其模式,需要拆解某些特征。如果你想要分析“信号”包含在时间序列数据中,那么就认为这些特征是相对于“信号”的“噪声”。此时需要通过使用一些统计技术来抵消这些特征以减少“噪音”。

时间序列数据变动存在规律性与不规律性时间序列中的每个观察值大小,是影响变化的各种不同因素在同一时刻发生作用的综合结果。从这些影响因素发生作用的大小和方向变化的时间特性来看,这些因素造成的时间序列数据的变动分为四种类型。

趋势性

某个变量随着时间进展或自变量变化,呈现一种比较缓慢而长期的持续上升、下降、停留的同性质变动趋向,但变动幅度可能不相等。

季节性

某因素由于外部影响随着自然季节的交替出现高峰与低谷的规律。

随机性

个别为随机变动,整体呈统计规律。

综合性

实际变化情况是几种变动的叠加或组合。预测时设法过滤除去不规则变动,突出反映趋势性和周期性变动。

查看时间序列时首先要考虑的重要特征是否存在趋势,意味着平均而言,测量值会随着时间的推移而增加(或减少)?

是否存在季节性,这意味着与日历时间(例如季节、季度、月份、星期几等)相关的高点和低点有规律地重复模式?

有异常值吗?在回归中,离群值离你的线很远。对于时间序列数据,您的异常值与其他数据相距甚远。

是否存在与季节性因素无关的长期周期或时期?

随着时间的推移是否存在恒定的方差,或者方差是非常量的?

序列水平或方差是否有任何突然变化?

趋势性通常,时间序列中不具有周期性的系统变化称为趋势。趋势是序列随时间的持续增加或减少。从时间序列数据集中识别、建模甚至删除趋势信息可能会带来好处。

趋势类型有各种各样的趋势,通常分为:

确定性趋势:这些是持续增加或减少的趋势。

随机性趋势:这些趋势会不一致地增加和减少。

一般来说,确定性趋势更容易识别和删除。

根据观察范围来分类趋势:

全局趋势:这些趋势适用于整个时间序列。

本地趋势:这些趋势适用于时间序列的部分或子序列。

一般来说,全局趋势更容易识别和应对。

识别趋势可以绘制时间序列数据以查看趋势是否明显。

而在实践中,识别时间序列中的趋势可能是一个主观过程。因此从时间序列中提取或删除它可能同样具有主观性。

创建数据的线图并检查图中的明显趋势。

在图中添加线性和非线性趋势线,看看趋势是否明显。

删除趋势具有趋势的时间序列称为非平稳的。可以对识别的趋势进行建模。建模后,可以将其从时间序列数据集中删除。这称为去趋势时间序列。

如果数据集没有趋势或我们成功地移除了趋势,则称该数据集是趋势平稳的。

机器学习中使用时间序列趋势从机器学习的角度来看,数据的趋势代表着两个机会:

删除信息:删除扭曲输入和输出变量之间关系的系统信息。

添加信息:添加系统信息以改善输入和输出变量之间的关系。

具体来说,作为数据准备和清洗练习,可以从时间序列数据(以及未来的数据)中删除趋势。这在使用统计方法进行时间序列预测时很常见,但在使用机器学习模型时并不总是能改善结果。

季节性季节性被定义为周期性的波动,季节性变化或季节性是随着时间有规律地重复的循环。

许多时间序列显示季节性。例如,零售额往往在春季期间达到顶峰,然后在假期过后下降。因此,零售销售的时间序列通常会显示 1月至 3月的销售额增加,而 4 月和 5 月的销售额下降。季节性在经济时间序列中很常见,它在工程和科学数据中不太常见。

时间序列中的周期结构可能是季节性的,也可能不是。如果它始终以相同的频率重复,则是季节性的,否则就不是季节性的,称为循环。

季节性类型季节性有很多种。例如:时间、日、每周、每月、每年。因此,确定时间序列问题中是否存在季节性成分是主观的。

确定是否存在季节性因素的最简单方法是绘制和查看数据,可能以不同的比例并添加趋势线。

去除季节性一旦确定了季节性,就可以对其进行建模。季节性模型可以从时间序列中删除。此过程称为季节性调整[8]或去季节性[9]化。

去除了季节性成分的时间序列称为季节性平稳。具有明显季节性成分的时间序列被称为非平稳的。

在时间序列分析领域,有一些复杂的方法可以从时间序列中研究和提取季节性。

机器学习中作用了解时间序列中的季节性成分可以提高机器学习建模的性能。

这可以通过两种主要方式发生:

更清晰的信号:从时间序列中识别和去除季节性成分可以使输入和输出变量之间的关系更清晰。

更多信息:关于时间序列季节性分量的附加信息可以提供新信息以提高模型性能。

这两种方法都可能对项目有用。并在数据清洗和准备期间就需要建模季节性并将其从时间序列中删除。

在特征提取和特征工程期间,可能会提取季节性信息并将其作为输入特征。

其他离群值:离群值离标准数据方差很远。

长期循环:独立于季节性因素,数据可能显示一个长期周期,比如持续超过一年的经济衰退。

恒定方差:随着时间的推移,一些数据显示出不断的波动,比如每天和晚上的能源使用量。

突变:数据可能显示出突变,可能需要进一步分析。例如,由于COVID而突然关闭的企业导致了数据的变化。

以下是时间序列样本图[11],显示了玩家在过去几年里每天花费在游戏中的货币。你能在这个数据中识别出上面列出的任何特征吗?

时间序列预测方法基本规则通过人工经验,挖掘时序数据的演化特征,找到时序变化的周期,从而预估时间序列的未来走势。具体的观察一个时间序列,当序列存在周期性时,提取时间序列的周期性特征进行预测。

传统参数法传统的参数预测方法可以分为两种,

一种拟合标准时间序列的餐顺方法,包括移动平均,指数平均等;

另一种是考虑多因素组合的参数方法,即 AR, MA, ARMA, ARIMA等模型。这类方法比较适用于小规模,单变量的预测。

时间序列分解一个时间序列往往是一下几类变化形式的叠加或耦合

长期趋势 (Secular trend, T)

长期趋势指现象在较长时期内持续发展变化的一种趋向或状态。

季节变动 (Seasonal Variation, S)

季节波动是由于季节的变化引起的现象发展水平的规则变动

循环波动 (Cyclical Variation, C)

循环波动指以若干年为期限,不具严格规则的周期性连续变动

不规则波动 (Irregular Variation, I)

不规则波动指由于众多偶然因素对时间序列造成的影响

机器学习主要是构建样本数据集,采用“时间特征”到“样本值”的方式,通过有监督学习,学习特征与标签之前的关联关系,从而实现时间序列预测。

单步预测在时间序列预测中使用滞后的观测值 ,作为输入变量来预测当前的时间的观测值

多步预测使用过去的观测序列 来预测未来的观测序列

多变量预测每个时间有多个观测值:

通过不同的测量手段得到了多种观测值,并且希望预测其中的一个或几个值。

深度学习对于时间序列的分析,有许多方法可以进行处理,包括:循环神经网络-LSTM模型 / 卷积神经网络 / 基于注意力机制的模型(seq2seq)/。..

循环神经网络循环神经网络(RNN)框架及其变种(LSTM/GRU/。..)是为处理序列型而生的模型,天生的循环自回归的结构是对时间序列的很好的表示

时间卷积网络时间卷积网络(TCN)是一种特殊的卷积神经网络,针对一维空间做卷积,迭代多层捕捉长期关系。具体的,对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。

一个时间序列数据--电力使用数据开始创建一个时间序列模型,根据过去的使用情况来预测未来的电力使用量。

本例中的数据来自GEFCom2014预测竞赛。由2012 - 2014年3年的小时电负荷和温度值组成。

import os

import matplotlib.pyplot as plt

import pandas as pd

%matplotlib inline

data_dir = ‘。/data’

energy = pd.read_csv(‘。/energy.csv’)

energy.head()

可以看到有两列表示date和load

load

2012-01-01 00002698.0

2012-01-01 01002558.0

2012-01-01 02002444.0

2012-01-01 03002402.0

2012-01-01 04002403.0

可视化energy.plot(y=‘load’, subplots=True, figsize=(15, 8), fontsize=12)

plt.xlabel(‘timestamp’, fontsize=12)

plt.ylabel(‘load’, fontsize=12)

plt.show()

现在,绘制2014年7月的第一周,将其作为energy的输入,在[from date]: [to date] 模式中:

energy[‘2014-07-01’:‘2014-07-07’].plot(y=‘load’, subplots=True, figsize=(15, 8), fontsize=12)

plt.xlabel(‘timestamp’, fontsize=12)

plt.ylabel(‘load’, fontsize=12)

plt.show()

看看这些图,看看你是否能确定上面列出的任何特征。通过可视化数据我们可以推测出什么?后面将介绍创建一个ARIMA模型来创建一些预测。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87576
  • 时序设计
    +关注

    关注

    0

    文章

    21

    浏览量

    43899

原文标题:一文解读时间序列基本概念

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    时间序列分析的异常检测综述

    时间序列是在不同时点记录一个或多个变量值的数据。例如,每天访问网站的人数、每月城市的 average 温度、每小时的股票价格等。时间序列非常重要,因为它们允许我们分析过去,理解现在,并
    的头像 发表于 03-11 09:36 219次阅读
    <b class='flag-5'>时间</b><b class='flag-5'>序列</b>分析的异常检测综述

    一些有关通信电路的资料?

    有关嵌入式之间DSP、ARM、FPGA三者之间和这三款芯片和外部电路之间通信的一些资料,比如说芯片之间的并行通信和芯片和外部电路之间的串行通信,MODBUS、DP、CAN等,一些一些常用的通信协议的
    发表于 03-03 18:53

    深度学习在时间序列预测的总结和未来方向分析

    2023年是大语言模型和稳定扩散的一年,时间序列领域虽然没有那么大的成就,但是却有缓慢而稳定的进展。Neurips、ICML和AAAI等会议都有transformer结构(BasisFormer
    的头像 发表于 02-24 08:26 363次阅读
    深度学习在<b class='flag-5'>时间</b><b class='flag-5'>序列</b>预测的总结和未来方向分析

    一些无功补偿装置SVG的资料

    一些SVG电路原理和功能码相关的技术说明书,想了解一些SVG的工作原理和工作过程
    发表于 02-03 10:13

    准确的时间记录在时间序列数据分析中的重要性

    时间序列数据是一系列随时间间隔收集的数据点,使我们能够跟踪时间的变化。时间序列数据可以跟踪从毫秒
    的头像 发表于 11-09 09:18 376次阅读

    序列的z变换为什么会出现一对相互共轭的复数零点?

    。当对一个实序列进行Z变换时,通常会得到频域表示中的一对相互共轭的复数零点。 要理解为什么会在实序列的Z变换中存在一对相互共轭的复数零点,首先需要理解Z变换的定义和一些基本概念。 Z变换是一种将离散
    的头像 发表于 11-08 17:46 1829次阅读

    arduino驱动舵机速度能否慢一些

    arduino驱动舵机速度太快,能不能慢一些,就是占空比调节的指定宽度有个时间设置的函数有吗?比如0度到90度我需要转动3秒完成,但是直接驱动到90度速度太快了半秒就到90度了
    发表于 11-08 06:03

    使用轮廓分数提升时间序列聚类的表现

    我们将使用轮廓分数和一些距离指标来执行时间序列聚类实验,并且进行可视化
    的头像 发表于 10-17 10:35 231次阅读
    使用轮廓分数提升<b class='flag-5'>时间</b><b class='flag-5'>序列</b>聚类的表现

    Python比较两个时间序列在图形上是否相似

    比较两个时间序列在图形上是否相似,可以通过以下方法: 可视化比较:将两个时间序列绘制在同一张图上,并使用相同的比例和轴标签进行比较。可以观察它们的趋势、峰值和谷值等特征,从而进行比较。
    的头像 发表于 10-16 11:33 252次阅读

    如何使用SBC ToolBox云平台进行时间序列分析?

    使用SBC ToolBox云平台时间序列分析模块探索基因集在不同时间点的表达趋势,使用c-means算法对基因集进行聚类分群,寻找出表达趋势
    的头像 发表于 09-20 16:52 683次阅读
    如何使用SBC ToolBox云平台进行<b class='flag-5'>时间</b><b class='flag-5'>序列</b>分析?

    使用GPIO模拟ARGB2 LED时间序列并产生LED彩虹波效果

    使用个计时器将 ARGB2 LED 时间序列排成 ARGB2 LED Ting, 组 GPIO 模拟 ARGB2 LED 时间
    发表于 08-29 07:25

    使用RAPID cuDF处理时间序列数据的常见步骤

    加速数据分析:使用 RAPID cuDF 进行更快的时间序列分析
    的头像 发表于 07-05 16:30 353次阅读

    利用强化学习来探索更优排序算法的AI系统

    探索更优的排序算法,因为相对于高级编程语言来说,在汇编指令层级对存储和寄存器的操作可以更加的灵活,所以能发现更多潜在的调优策略。 在 AlphaDev 的论文中,只关注探索序列排序
    的头像 发表于 06-19 10:49 390次阅读
    利用强化学习来<b class='flag-5'>探索</b>更优排序<b class='flag-5'>算法</b>的AI系统

    一些模电笔记

    一些模电笔记
    发表于 06-09 22:33

    如何让个uno成为ringmaster向网络上的每个其他uno发送一些数据并触发它们做一些工作?

    直在寻找许多不成功的时间,试图找到个项目,其中有人通过 esp8266 连接了 2 个或更多 unos。 目标是让个 uno 成为 ringmaster,向网络上的每个其他 u
    发表于 05-23 07:06