时间序列预测算法梳理(Arima、Prophet、Nbeats、NbeatsX、Informer)

时间序列预测算法梳理(Arima、Prophet、Nbeats、NbeatsX、Informer)

  • Arima
    • 1. 算法原理
    • 2. 算法实现
  • Prophet
    • 1. 优点
    • 2. 算法实现
    • 3.算法api实现(fbprophet调api)
  • Nbeats
    • 1. Nbeats优点
    • 2. Nbeats模型结构
  • NbeatsX
  • Informer
  • 参考:

Arima

1. 算法原理

自回归滑动平均(Autoregressive integrated moving average,ARIMA)模型由Box和Jenkins于1970年提出。他们认为某些非平稳序列中,某一部分与其他部分相似,而这种同质性可经d阶差分后就可以成为平稳序列,成为混合自回归-滑动平均过程。那么该非平稳序列为ARIMA模型,用 表示。其中,p表示自回归AR的阶次,q表示移动平均MA的移动平均项数,而d是变成平稳序列时所做的差分阶次。通式如下所示。
请添加图片描述
若d=0,则为一个平稳过程。而d不为0时,需要选择合适的阶次d,进行差分处理,并通过自相关图或者单位根检验进行平稳性验证

2. 算法实现

(1)观察时序的平稳性和随机性
1: 数据具有周期性、长期增长的趋势,并非在某一个常数上下波动,因此主观判断该序列为非平稳时间序列。(非平稳时间序列,在消去其局部水平或者趋势之后,其显示出一定的同质性,也就是说,此时序列的某些部分 与其它部分很相似。)
2: 对非平稳序列进行差分处理,变成平稳序列。
(2)选择具体的模型
1: 一阶差分后的时序图没有明显的线性趋势,观察自相关图ACF和偏自相关图PACF
2: 数据具有周期性,现在按照周期数再进行差分(进行12阶差分后)
(3)拟合模型
1: 使用极大似然估计,拟合ARIMA模型
(4)根据选定模型进行预测
1: 根据选定模型进行预测
预测未来6个月的销售值,设置上下95%的置信区间
(5)模型评价
1: 判断预测误差是否是平均值为零且方差为常数的正态分布;
2: 对模型的残差进行独立性检验(是否相关)

Prophet

1. 优点

Facebook 所提供的 prophet 算法不仅可以处理时间序列存在一些异常值的情况,也可以处理部分缺失值的情形,还能够几乎全自动地预测时间序列未来的走势。从论文上的描述来看,这个 prophet 算法是基于时间序列分解(分解成:季节项+趋势项+剩余项+节假日的效应)和机器学习的拟合(L-BFGS 方法)来做的,其中在拟合模型的时候使用了pyStan这个开源工具,因此能够在较快的时间内得到需要预测的结果。

2. 算法实现

时间序列分解+机器学习拟合。
(1)时间序列分解:
时间序列分成几个部分:季节项+趋势项+剩余项+节假日的效应
在这里插入图片描述

  • 趋势项模型 :
    趋势项有两个重要的函数,一个是基于逻辑回归函数(logistic function)的,另一个是基于分段线性函数(piecewise linear function)的。
  • 季节性趋势(周期性的变化):
    时间序列通常会随着天,周,月,年等季节性的变化而呈现季节性的变化,也称为周期性的变化。在数学分析中,区间内的周期性函数是可以通过正弦和余弦的函数来表示
  • 节假日效应:
    由于每个节假日对时间序列的影响程度不一样。因此,不同的节假日可以看成相互独立的模型,并且可以为不同的节假日设置不同的前后窗口值,表示该节假日会影响前后一段时间的时间序列。
    (2)时间序列分解:机器学习拟合:
    在 Prophet 里面,作者使用了 pyStan 这个开源工具中的 L-BFGS 方法来进行函数的拟合。L-BFGS是解无约束非线性规划问题最常用的方法,具有收敛速度快、内存开销少等优点,L-BFGS和梯度下降、SGD干的同样的事情,但大多数情况下收敛速度更快。

3.算法api实现(fbprophet调api)

fbprophet 所需要的时间序列:第一列的名字是 ‘ds’, 第二列的名称是 ‘y’。通过 prophet 的计算,可以计算出 yhat,yhat_lower,yhat_upper,分别表示时间序列的预测值,预测值的下界,预测值的上界。

  • API计算步骤:
    1: 输入已知的时间序列的时间戳和相应的值;
    2: 输入需要预测的时间序列的长度;
    3: 输出未来的时间序列走势。
    4: 输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。

Nbeats

1. Nbeats优点

Nbeats开创了一个全新的时间序列预测backbone,仅通过全连接实现时间序列预测。Nbeats的核心思路是,通过多层全连接进行时间序列分解,每层拟合时间序列部分信息(之前层拟合的残差)。其中每个block的输入,是上一层block的输入减去上一层block的输出。通过这种方式,模型每层需要处理的是之前层无法正确拟合的残差,也起到了一个将时间序列进行逐层分解,每层预测时间序列一部分的作用

2. Nbeats模型结构

整个模型包括多个stack,每个stack包括多个block。每个block是Nbeats的最基础结构模块,由多个全连接层组成。每个block包含两个主要部分:第一个部分将输入的时间序列映射成expansion coefficients,第二部分将expansion coefficients映射回时间序列。(内部学习过程发生在块内部,并帮助模型捕获局部时间特征。外部学习过程发生在堆叠层,帮助模型学习所有时间序列的全局特征。)expansion coefficients可以理解为:存储了时间序列内在的信息形成的一个低维向量。在模型实现上,其实就是一个向量映射过程:将输入的时间序列(维度为length)映射成低维向量(维度为dim),第二部分再将其映射回时间序列(长度为length)。每个模块会生成两组expansion coefficients膨胀系数,一组用来预测未来(forecast),另一组用来预测过去(backcast)。
图片来源于知乎fareise
(图片来源于知乎fareise)
最终,每个block对输入的序列进行处理后,输出一个预测未来的序列,以及一个预测过去的序列。每个block的输入,是上一层block的输入减去上一层block的输出。通过这种方式,模型每层需要处理的是之前层无法正确拟合的残差,也起到了一个将时间序列进行逐层分解,每层预测时间序列一部分的作用。最终的预测结果,是各个block预测结果的加和。

为了能让模型的分解具有可解释性,文中也提出了在各个层引入一些先验知识,强制让某些层学习某种类型的时间序列特性,实现可解释的时间序列分解。实现的方法是通过约束expansion coefficients到输出序列的函数形式来实现。例如想让某层block主要预测时间序列的季节性,就可以用下面的公式强制输出是季节性的。通过约束不同层学习不同信息的可视化结果,有的层学习了趋势性,有的层学习了周期性

NbeatsX

第一版本的Nbeats,输入只能是单一的时间序列,无法输入额外的特征。而在时间序列预测问题中,诸如日期信息、节日信息、属性信息等外部特征也是非常重要的。因此,基于初版Nbeats,该团队又提出了可以引入外部特征的Nbeatsx,和初版Nbeats的主要区别是引入了外部特征X。
在这里插入图片描述
模型的主体结构和Nbeats基本一致,每个block除了输出序列外,还会输入外部特征,二者一起通过全连接层得到隐状态,再基于隐状态生成expansion coefficients。

Informer

使用Transfomer实现长序列预测。针对Transfomer在长序列预测中的不足(平方时间复杂度、高内存占用和现有编解码结构的局限性),提出ProbSparse注意力机制、自注意力蒸馏技术和生成式解码器等模块解决或缓解上述问题。

  • 研究意义:
    (1)首先,LSTF(Long Sequence Time-Series Forecasting)长序列预测任务具有重要研究意义,对政策计划和投资避险等多种需要长时预测的任务至关重要
    (2)目前现有方法多专注于短期预测,模型缺乏长期预测能力
    (3)Transformer具有较强捕获长距离依赖的能力,但是,在计算时间复杂度和空间复杂度以及如何加强长序列输入和输出关联上都需要优化;

参考:

  1. 借鉴:时间序列分析预测实战之ARIMA模型:https://zhuanlan.zhihu.com/p/486586140
  2. 借鉴:Facebook 时间序列预测算法 Prophet:https://zhuanlan.zhihu.com/p/52330017
  3. 借鉴:Nbeats系列模型详解:Nbeats、NbeatsX、GAGA :
    https://zhuanlan.zhihu.com/p/524324895
  4. 借鉴:基于Transformer的时间序列预测-Informer-AAAI21 BEST PAPER:https://zhuanlan.zhihu.com/p/353228710

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prophet 时间序列预测

Prophet 允许使用具有指定承载能力的物流增长趋势模型进行预测。 我们必须在列中指定承载能力cap。在这里,我们将假设一个特定的值,但这通常是使用有关市场规模的数据或专业知识来设置的。 # Python df[cap] 8.5需要注意的重要事项是cap必须为数据框中…

时间序列预测方法之 DeepAR

本文链接:个人站 | 简书 | CSDN 版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议。转载请注明出处。 最近打算分享一些基于深度学习的时间序列预测方法。这是第一篇。 DeepAR 是 Amazon 于 2017 年提出的基于深度学习的时间序列预…

【时间序列】初识时间序列预测神器 NeuralProphet 实战预测股票指数

历经神奇的2022年,终于迎来曙光的2023年,新的一年,MyEncyclopedia 会和小伙伴们一同学习思考实践。长风破浪会有时,直挂云帆济沧海!共勉之 NeuralProphet深度学习Prophet NeuralProphet 负有盛名,是 Facebo…

时序预测 | Python实现TCN时间卷积神经网络时间序列预测

时序预测 | Python实现TCN时间卷积神经网络时间序列预测 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测预测效果基本介绍环境准备模型描述程序设计学习小结参考资料预测效果 基本介绍 递归神经网络 (RNN),尤其是 LSTM,非常适合时间序列处理。 作为研究相关技术…

使用sklearn.ensemble.RandomForestRegressor和GridSearchCV进行成人死亡率预测

原文链接:https://blog.csdn.net/weixin_44491423/article/details/127011461 本文借鉴博主hhhcbw实现方法完成随机森林回归预测成人死亡率,使用训练数据测试模型的最优得分R20.8161,在测试集上得分R20.5825 成年人死亡率指的是每一千人中15岁…

基于TCN时间序列预测Python程序

基于TCN预测模型 特色:1、单变量,多变量输入,自由切换 2、单步预测,多步预测,自动切换 3、基于Pytorch架构 4、多个评估指标(MAE,MSE,R2,MAPE等) 5、数据从excel文件中读取,更换简单…

时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测

时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测 目录 时序预测 | Python实现Attention-TCN注意力机制时间卷积神经网络的多元时间序列预测预测效果基本介绍环境配置程序设计模型效果参考资料预测效果 基本介绍 使用时间注意卷积神经网络进行…

AI预测死亡时间,准确率95%

(本内容转载自公众号“科技与Python”) 日前,谷歌新出炉的一项研究报告称,该公司已开发出一种新人工智能(AI)算法,可预测人的死亡时间,且准确率高达95%。最近,谷歌的这项研究发表在了《自然》杂…

FACEBOOK 时间序列预测算法 PROPHET 的研究

1.思想 在时间序列分析领域,有一种常见的分析方法叫做时间序列的分解(Decomposition of Time Series),它把时间序列 分成几个部分,分别是季节项 ,趋势项 ,剩余项 。也就是说对所有的 &#xff…

python 用LSTM预测时间序列之预测新冠肺炎疫情

用到的模块 import numpy import matplotlib.pyplot as plt from pandas import read_csv import math from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from sklearn.metrics import mean_squared_error from keras.call…

基于self-attention-TCN时间序列预测Python程序

基于self-attention-TCN时间序列预测Python程序 特色:1、单变量,多变量输入,自由切换 2、单步预测,多步预测,自动切换 3、基于Pytorch架构 4、多个评估指标(MAE,MSE,R2,M…

Kaggle_Titanic生存预测 -- 详细流程吐血梳理

作者: 大树先生 博客: http://blog.csdn.net/koala_tree 知乎:https://www.zhihu.com/people/dashuxiansheng GitHub:https://github.com/MrLeeTree 2017 年 12 月 5 日 一直想在Kaggle上参加一次比赛,奈何被各种事情所…

python攻陷米哈游《元神》数据?详情请看文章。。

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 《原神》是由米哈游自研的一款全新开放世界冒险RPG。 里面拥有许多丰富得角色,让玩家为之着迷~ 今天,我们就来用python探索一下原神游戏角色信息! 标题大家看看就好了哈~&#xff08…

米哈游技术总监详解《原神》画面效果的技术实现

11月17日,中国Unity线上技术大会游戏专场迎来米哈游技术总监弋振中的分享,此次他围绕“从手机走向主机-《原神》主机版渲染技术”为主题,细致地讲解了《原神》在主机上渲染技术实现的重点内容。 以下是演讲内容(有节选&#xff09…

原神反调试分析

打开CE,打开原神启动器。 至此,游戏未加载驱动。启动器可以被CE正常读写。 打开原神,CE中选择YuanShen.exe,发现原神并不能被读写。 尝试分析不能读写的原因。 CE调用的读取内存函数是NtReadVirtualMemory 猜测有三种可能 1.NtReadVirtu…

关于原神抽奖概率的简要分析

序言 最近迷上了原神这款游戏,趁着保研完,肝了两个星期,也氪了一些金。先不谈这款游戏可玩性有多高,但论氪金强度算是我从小到大玩的游戏中,能排得上第一的了。 对于这种寸卡寸金的游戏,如何在无穷无尽的…

CAD教程:如何将Excel数据快速导入CAD图纸

在平时的设计工作中,为了图纸内容的丰富性,通常会在里面添加一些元素,使得数据更加的完善,那我们想在CAD图纸中添加一份Excel数据表,徒手绘制那就肯定是太过于麻烦了,那怎么才能省时省事呢?这个…

CAD绘图软件中如何将图纸分享给其他人

当我们在CAD绘图软件中打开一张图纸进行查看的时候,查看完成后,在CAD绘图软件中如何将图纸分享给其他人,具体要怎么来进行操作呢?相信很多的小伙伴们都想要知道,那下面小编就来教教大家具体的操作方法吧。 第一步&…

怎么将手机上保存的CAD图纸发送给好友

现在有很多的工作我们也可以在手机中完成,就比如说我们再收集中将图纸进行查看之后保存了下来,之后同事需要使用到这张CAD图纸文件。那么我们就可以将图纸发送给好友。怎么将手机上保存的CAD图纸发送给好友,下面我们一起来看看。 步骤一&…

dat文件导入cad画图步骤_图说CAD|多文件、多布局图纸批量打印设置的8个关键步骤...

在AutoCAD中,Publish(发布)功能具有批量打印图纸的功能:1. 以读取预设页面设置的方式进行打印,可直接打印为一套图纸电子文件,也可以打印为单张图纸电子文件。2. 支持批量自定义图纸名称指定。3. 可对发布图纸内容进行增减、排序。…