精华内容
下载资源
问答
  • 时间序列预测方法最全总结!

    万次阅读 多人点赞 2021-03-12 00:15:38
    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。需要明确一点的是,与回归分析预测模型...

    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。

    需要明确一点的是,与回归分析预测模型不同,时间序列模型依赖于数值在时间上的先后顺序,同样大小的值改变顺序后输入模型产生的结果是不同的。如之前的文章所介绍,时间序列可以分为平稳序列,即存在某种周期,季节性及趋势的方差和均值不随时间而变化的序列,和非平稳序列。如何对各种场景的时序数据做准确地预测,是一个非常值得研究的问题。

    本文为大家总结时间序列预测的有关方法,浅析这些技术并探索如何可以提高这些方法的预测效果。

    01

    基本规则法

    要预测一个时间序列,我们首先需要发现其变化的规律。最基本的方法,就是通过人工经验,挖掘时序数据的演化特征,找到时序变化的周期,从而预估时间序列的未来走势。具体的观察一个时间序列,当序列存在周期性时,提取时间序列的周期性特征进行预测。

    图 | 抽取时序的周期进行拟合

    02

    传统参数法

    之前我们介绍了时间序列的统计分析方法,该方法可以将时间序列的演化变为数学参数,天然的,我们可以通过拟合好的模型,进行时间序列的预测。

    传统的参数预测方法可以分为两种,一种拟合标准时间序列的餐顺方法,包括移动平均,指数平均等;另一种是考虑多因素组合的参数方法,即AR,MA,ARMA等模型。这类方法比较适用于小规模,单变量的预测,比如某门店的销量预测等。总的来说,基于此类方法的建模步骤是:

    首先需要对观测值序列进行平稳性检测,如果不平稳,则对其进行差分运算直到差分后的数据平稳;
    在数据平稳后则对其进行白噪声检验,白噪声是指零均值常方差的随机平稳序列;
    如果是平稳非白噪声序列就计算ACF(自相关系数)、PACF(偏自相关系数),进行ARMA等模型识别,
    对已识别好的模型,确定模型参数,最后应用预测并进行误差分析。
    

    这类方法一般是统计或者金融出身的人用的比较多,对统计学或者随机过程知识的要求比较高。而在数据挖掘的场景中比较难适用,因为需要大量的参数化建模。比如有一个连锁门店的销售数据,要预测每个门店的未来销量,用这类方法的话就需要对每个门店都建立模型, 这样就很难操作了。

    03

    时间序列分解

    时间序列分解法是数年来一直非常有用的方法,一个时间序列往往是一下几类变化形式的叠加或耦合:

    长期趋势(Secular trend, T):长期趋势指现象在较长时期内持续发展变化的一种趋向或状态。
    季节变动(Seasonal Variation, S):季节波动是由于季节的变化引起的现象发展水平的规则变动
    循环波动(Cyclical Variation, C):循环波动指以若干年为期限,不具严格规则的周期性连续变动
    不规则波动(Irregular Variation, I): 不规则波动指由于众多偶然因素对时间序列造成的影响
    

    图 | 原始时间序列

    时间序列分解模型

    /加法模型

    加法模型的形式如下:

    加法模型中的四种成分之间是相互独立的,某种成分的变动并不影响其他成分的变动。各个成分都用绝对量表示,并且具有相同的量纲。

    /乘法模型

    乘法模型的形式如下:

    乘法模型中四种成分之间保持着相互依存的关系,一般而言,长期趋势用绝对量表示,具有和时间序列本身相同的量纲,其他成分则用相对量表示。

    /加乘混合模型

    以上两种方式的混合

    时间序列的长期趋势分析

    图 | 拟合的时序趋势

    /移动平均法

    在原时间序列内依次求连续若干期的平均数作为其某一期的趋势值,如此逐项递移求得一系列的移动平均数,形成一个平均数时间序列。

    /时间回归法

    使用回归分析中的最小二乘法,以时间t或t的函数为自变量拟合趋势方程。常用的趋势方程如下:

    一阶线性方程
    二次(多次)方程曲线
    指数曲线
    

    时间序列季节变动分析

    时间序列短期会受季节等短期因素影响,从而存在一些周期性


    图 | 拟合的季节变动

    /乘法模型-季节指数

    乘法模型中的季节成分通过季节指数来反映。常用的方法称为移动平均趋势剔除法。步骤如下:

    1. 计算一动平均值

    2. 从序列中剔除移动平均值

    时间序列循环变动分析

    时序长期来看会存在一个循环往复,通常通过剩余法来计算循环变动成分C:

    如果有季节成分,计算季节指数,得到季节调整后的数据TCI
    根据趋势方程从季节调整后的数据中消除长期趋势,得到序列CI
    对消去季节成分和趋势值的序列CI进行移动平均以消除不规则波动,得到循环变动成分C
    

    图 | 拟合的长期循环变动

    时间序列不规则变动分析

    除了以上三种变动信息,剩下的为不规律的时序变动信息。如有需要,可以进一步分解出不规则变动成分:

    对于一个时间序列,剔除长期趋势,季节性,循环变动因素之后,剩下的就是不规则变动因素

    图 | 拟合的不规则变动

                 Prophet

    这里特别提一个Facebook 所服务化的时间序列预测工具,Prophet,具体可以参考官网说明。该方法类似于STL时序分解的思路,增加考虑节假日等信息对时序变化的影响。

    04

    机器学习

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

    /单步预测

    在时间序列预测中的标准做法是使用滞后的观测值,作为输入变量来预测当前的时间的观测值。这被称为单步单变量预测。

    /多步预测

    另一种预测问题类型是使用过去的观测序列 来预测未来的观测序列。这就是多步预测或序列预测。

    /多变量预测

    另一个重要的时间序列称为多元时间序列,即每个时间有多个观测值:

    这意味着我们通过不同的测量手段得到了多种观测值,并且希望预测其中的一个或几个值。例如,我们可能有两组时间序列观测值,我们希望分析这组多元时间序列来预测 

    基于以上场景,许多监督学习的方法可以应用在时间序列的预测中,比如svm/xgboost/逻辑回归/回归树/...

    05

    深度学习

    深度学习方法近年来逐渐替代机器学习方法,成为人工智能与数据分析的主流,对于时间序列的分析,有许多方法可以进行处理,包括:循环神经网络-LSTM模型/卷积神经网络/基于注意力机制的模型(seq2seq)/...

    /循环神经网络

    循环神经网络(RNN)框架及其变种(LSTM/GRU/...)是为处理序列型而生的模型,天生的循环自回归的结构是对时间序列的很好的表示。所采用的方式也是监督学习,不过不需要人为的构建时序特征,可以通过深度学习网络拟合时序曲线,捕捉时间先后顺序关系,长期依赖,进行特征学习与预测。

    /卷积神经网络

    传统的卷积神经网络(CNN)一般认为不太适合时序问题的建模,这主要由于其卷积核大小的限制,不能很好的抓取长时的依赖信息。但是最近也有很多的工作显示,特定的卷积神经网络结构也可以达到很好的效果,通常将时间序列转化为图像,再应用基于卷积神经网络的模型做分析。

    Gramian Angular Field (格拉姆角场GAF)

    将笛卡尔坐标系下的一维时间序列,转化为极坐标系表示,再使用三角函数生成GAF矩阵。计算过程:

    数值缩放:将笛卡尔坐标系下的时间序列缩放到[0,1]或[-1,1]区间
    极坐标转换:使用坐标变换公式,将笛卡尔坐标系序列转化为极坐标系时间序列
    角度和/差的三角函数变换:若使用两角和的cos函数则得到GASF,若使用两角差的cos函数则得到GADF
    

    Short Time Fourier Transform (短时傅里叶变换STFT)

    在语音信号处理场景使用很广泛,其目标主要将时间序列转为时频图像,进而采用卷积网络进行特征分析。


    /时间卷积网络

    时间卷积网络(TCN)是一种特殊的卷积神经网络,针对一维空间做卷积,迭代多层捕捉长期关系。具体的,对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。和传统的卷积神经网络的不同之处在于,TCN不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此又被称为因果卷积。

    /基于注意力机制的模型

    在RNN中分析时间序列需要我们一步步的顺序处理从 t-n 到 t 的所有信息,而当它们相距较远(n非常大)时RNN的效果常常较差,且由于其顺序性处理效率也较低。基于注意力机制(Attention)的模型,采用跳步的方式计算每个数值之间的两两关联,然后组合这些关联分数得到一个加权的表示。该表示通过前馈神经网络的学习,可以更好的考虑到时序的上下文的信息。

    以上步骤如下动图所示:

    /结合CNN+RNN+Attention,作用各不相同互相配合

    主要设计思想:

    • CNN捕捉短期局部依赖关系

    • RNN捕捉长期宏观依赖关系

    • Attention为重要时间段或变量加权

    06

    一些需要注意的难点

    • 理解时间序列预测问题是要用历史数据预测未来数据

    • 时间序列问题的训练集、测试集划分

    • 特征工程方法及过程

    • 如何转化为监督学习数据集

    • LSTM计算过程理解,包括输入输出维度、参数数量等

    • seq2seq过程的理解,decoder实现

    • attention注意力机制的原理及实现,包括encoder-decoder attention, self attention, multi-head attention等

    • 时间卷积网络的含义,dilated-convolution 和 causal-convolution

    • prophet预测原理,各参数对模型拟合效果、泛化效果的影响

    • 时间序列基本规则法中周期因子得计算过程

    • 传统方法如周期因子、线性回归、ARMA等的预测结果表现为,预测趋势大致正确,但对波动预测不理想,体现在波动的幅度差异、相位偏移。

    • 时间序列分解方法。理解加法模型和乘法模型,判断分解模型的选取及分解技巧。

    /工具

    • tslearn:开源的时间序列机器学习python工具包

    • tsfresh:开源的时间序列特征提取python工具包

    • pyts:开源的时间序列分类Python工具包。提供预处理工具及若干种时间序列分类算法

    “整理不易,三连

    展开全文
  • 我们的过程包括下面几步:1、时间序列有什么特别之处?2、在Pandas上传和加载时间序列(pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包,类似于 Numpy ...5、时间序列预测。1、时间序列有什么特别...

    我们的过程包括下面几步:

    1、时间序列有什么特别之处?

    2、在Pandas上传和加载时间序列(pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包,类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的 。)

    3、如何检验时间序列的稳定性?

    4、如何令时间序列稳定?

    5、时间序列预测。

    1、时间序列有什么特别之处?

    顾名思义,时间序列是时间间隔不变的情况下收集的时间点集合。这些集合被分析用来了解长期发展趋势,为了预测未来或者表现分析的其他形式。但是是什么令时间序列与常见的回归问题的不同?

    有两个原因:

    1)时间序列是跟时间有关的。所以基于线性回归模型的假设:观察结果是独立的在这种情况下是不成立的。

    2)随着上升或者下降的趋势,更多的时间序列出现季节性趋势的形式,如:特定时间框架的具体变化。即:如果你看到羊毛夹克的销售上升,你就一定会在冬季做更多销售。

    因为时间序列的固有特性,有各种不同的步骤可以对它进行分析。下文将详细分析。通过在Python上传时间序列对象开始。我们将使用飞机乘客数据集。

    请记住本文的目的是希望使你熟悉关于时间序列的不同使用方法。本文的例子只是用来方便解释时间序列对象,我重点关注题目的广泛性,不会做非常精确的预测。

    2、在pandas上传和加载时间序列

    Pandas有专门处理时间序列对象的库,特别是可以存储时间信息和允许人们执行快速合作的datatime64(ns)类。从激发所需的库开始。

    import pandas as pd

    import numpy as np

    import matplotlib.pylab as plt

    %matplotlib inline

    from matplotlib.pylab import rcParams

    rcParams['figure.figsize'] = 15, 6

    现在,我们可以上传数据集和查看一些最初的行以及列的数据类型。

    data = pd.read_csv('AirPassengers.csv')

    print data.head()

    print '\n Data Types:'

    print data.dtypes

    数据包含了指定的月份和该月的游客数量。但是时间序列对象的读取和数据类型的“对象”和“整数类型”的读取是不一样的。为了将读取的数据作为时间序列,我们必须通过特殊的参数读取csv指令。

    dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')

    data = pd.read_csv('AirPassengers.csv', parse_dates='Month', index_col='Month',date_parser=dateparse)

    print data.head()

    我们逐个解释这些参数:

    1)parse_dates:这是指定含有时间数据信息的列。正如上面所说的,列的名称为“月份”。

    2)index_col:使用pandas 的时间序列数据背后的关键思想是:目录成为描述时间数据信息的变量。所以该参数告诉pandas使用“月份”的列作为索引。

    3)date_parser:指定将输入的字符串转换为可变的时间数据。Pandas默认的数据读取格式是‘YYYY-MM-DD HH:MM:SS’。如需要读取的数据没有默认的格式,就要人工定义。这和dataparse的功能部分相似,这里的定义可以为这一目的服务。

    现在我们看到数据有作为索引的时间对象和作为列的乘客(#Passengers)。我们可以通过以下指令再次检查索引的数据类型。

    data.index

    注意: dtype=’datetime[ns]’ 确认它是一个时间数据对象。个人而言,我会将列转换为序列对象,这样当我每次使用时间序列的时候,就不需要每次都要提及列名称。当然,这因人而异,如果能令你更好工作,可以使用它作为数据框架。

    ts = data[‘#Passengers’] ts.head(10)

    在进一步深入前,我会探讨一些关于时间序列数据的索引技术。先在序列对象选择一个特殊值。可以通过以下两种方式实现:

    #1. Specific the index as a string constant:

    ts['1949-01-01']

    #2. Import the datetime library and use 'datetime' function:

    from datetime import datetime

    ts[datetime(1949,1,1)]

    两种方法都会返回值“112”,这可以通过先前的结果确认。希望我们可以获得1949年5月(包括1949年5月)之前的数据。这又可以用以下两种方法实现:

    #1. Specify the entire range:

    ts['1949-01-01':'1949-05-01']

    #2. Use ':' if one of the indices is at ends:

    ts[:'1949-05-01']

    两种方法都会输出以下结果:

    我们要注意两点:

    跟数值索引不一样,结束索引在这儿是被包含的。比如,如果令一个列表成为索引作为一个数组[:5],它将在索引返回值-[0,1,2,3,4].在这里索引‘1949-05-01’是包含在结果输出里面的。

    目录必须为了工作区间而进行分类。如果你随意打乱这些索引,将不能工作。

    考虑到可以使用另外一个例子:你需要1949年所有的值。可以这样做:

    ts['1949']

    可见,月份部分已经省略。如果你要获得某月所有的日期,日期部分也可以省略。

    现在,让我们开始分析时间序列。

    3、如何检验时间序列的稳定性?

    如果一个时间序列的统计特征如平均数,方差随着时间保持不变,我们就可以认为它是稳定的。为什么时间序列的稳定性这么重要?大部分时间序列模型是在假设它是稳定的前提下建立的。直观地说,我们可以这样认为,如果一个时间序列随着时间产生特定的行为,就有很高的可能性认为它在未来的行为是一样的。同时,根据稳定序列得出的理论是更加成熟的, 也是更容易实现与非稳定序列的比较。

    稳定性的确定标准是非常严格的。但是,如果时间序列随着时间产生恒定的统计特征,根据实际目的我们可以假设该序列是稳定的。如下:

    恒定的平均数

    恒定的方差

    不随时间变化的自协方差

    我会跳过一些细节,因为在文章已经说的非常清楚。接下来,是关于测试稳定性的方法。首先是简化坐标和数据,进行可视分析。数据可以通过以下指令定位。

    ts['1949']

    非常清晰的看到,随着季节性的变动,飞机乘客的数量总体上是在不断增长的。但是,不是经常都可以获得这样清晰的视觉推论(下文给出相应例子)。所以,更正式的讲,我们可以通过下面的方法测试稳定性。

    1)绘制滚动统计:我们可以绘制移动平均数和移动方差,观察它是否随着时间变化。随着移动平均数和方差的变化,我认为在任何“t”瞬间,我们都可以获得去年的移动平均数和方差。如:上一个12个月份。但是,这更多的是一种视觉技术。

    2)DF检验:这是一种检查数据稳定性的统计测试。无效假设:时间序列是不稳定的。测试结果由测试统计量和一些置信区间的临界值组成。如果“测试统计量”少于“临界值”,我们可以拒绝无效假设,并认为序列是稳定的。

    这些概念不是凭直觉得出来的。我推荐大家浏览前篇文章。如果你对一些理论数据感兴趣,你可以参考Brockwell 和 Davis关于时间序列和预测的介绍的书。这本书的数据很多,但是如果你能读懂言外之意,你会明白这些概念和正面接触这些数据。

    回到检查稳定性这件事上,我们将使用滚动数据坐标连同许多DF测试结果,我已经定义了一个需要时间序列作为输入的函数,为我们生成结果。请注意,我已经绘制标准差来代替方差,为了保持单元和平均数相似。

    from statsmodels.tsa.stattools import adfuller

    def test_stationarity(timeseries):

    #Determing rolling statistics

    rolmean = pd.rolling_mean(timeseries, window=12)

    rolstd = pd.rolling_std(timeseries, window=12)

    #Plot rolling statistics:

    orig = plt.plot(timeseries, color='blue',label='Original')

    mean = plt.plot(rolmean, color='red', label='Rolling Mean')

    std = plt.plot(rolstd, color='black', label = 'Rolling Std')

    plt.legend(loc='best')

    plt.title('Rolling Mean & Standard Deviation')

    plt.show(block=False)

    #Perform Dickey-Fuller test:

    print 'Results of Dickey-Fuller Test:'

    dftest = adfuller(timeseries, autolag='AIC')

    dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])

    for key,value in dftest[4].items():

    dfoutput['Critical Value (%s)'%key] = value

    print dfoutput

    代码是非常直观的,如果你在阅读过程中遇到挑战可以在评论处提出。

    输入序列开始运行:

    基本上是不可能使序列完全稳定,我们只能努力让它尽可能的稳定。

    先让我们弄明白是什么导致时间序列不稳定。这儿有两个主要原因。

    趋势-随着时间产生不同的平均值。举例:在飞机乘客这个案例中,我们看到总体上,飞机乘客的数量是在不断增长的。

    季节性-特定时间框架内的变化。举例:在特定的月份购买汽车的人数会有增加的趋势,因为车价上涨或者节假日到来。

    模型的根本原理或者预测序列的趋势和季节性,从序列中删除这些因素,将得到一个稳定的序列。然后统计预测技术可以在这个序列上完成。最后一步是通过运用趋势和季节性限制倒回到将预测值转换成原来的区间。

    注意:我将探讨一系列方法。可能有些对文中情况有用,有些不能。但是我的目的是得到一系列可用方法,而不是仅仅关注目前的问题。

    让我们通过分析趋势的一部分开始工作吧。

    预测&消除趋势

    消除趋势的第一个方法是转换。例如,在本例中,我们可以清楚地看到,有一个显著的趋势。所以我们可以通过变换,惩罚较高值而不是较小值。这可以采用日志,平方根,立方跟等等。让我们简单在这儿转换一个对数。

    ts_log = np.log(ts) plt.plot(ts_log)

    在这个简单的例子中,很容易看到一个向前的数据趋势。但是它表现的不是很直观。所以我们可以使用一些技术来估计或对这个趋势建模,然后将它从序列中删除。这里有很多方法,最常用的有:

    聚合-取一段时间的平均值(月/周平均值)

    平滑-取滚动平均数

    多项式回归分析-适合的回归模型

    我在这儿讨论将平滑,你也应该尝试其他可以解决的问题的技术。平滑是指采取滚动估计,即考虑过去的几个实例。有各种方法可以解决这些问题,但我将主要讨论以下两个。

    移动平均数

    在这个方法中,根据时间序列的频率采用“K”连续值的平均数。我们可以采用过去一年的平均数,即过去12个月的平均数。关于确定滚动数据,pandas有特定的功能定义。

    moving_avg = pd.rolling_mean(ts_log,12)

    plt.plot(ts_log)

    plt.plot(moving_avg, color='red')

    红色表示了滚动平均数。让我们从原始序列中减去这个平均数。注意,从我们采用过去12个月的值开始,滚动平均法还没有对前11个月的值定义。我们可以看到:

    ts_log_moving_avg_diff = ts_log - moving_avg

    ts_log_moving_avg_diff.head(12)

    注意前11个月是非数字的,现在让我们对这11个月降值和检查这些模块去测试稳定性。

    ts_log_moving_avg_diff.dropna(inplace=True)

    test_stationarity(ts_log_moving_avg_diff)

    这看起来像个更好的序列。滚动平均值出现轻微的变化,但是没有明显的趋势。同时,检验统计量比5%的临界值小,所以我们在95%的置信区间认为它是稳定序列。

    但是,这个方法有一个缺陷:要严格定义时段。在这种情况下,我们可以采用年平均数,但是对于复杂的情况的像预测股票价格,是很难得到一个数字的。所以,我们采取“加权移动平均法”可以对最近的值赋予更高的权重。关于指定加重这儿有很多技巧。

    指数加权移动平均法是很受欢迎的方法,所有的权重被指定给先前的值连同衰减系数。这可以通过pandas实现:

    expwighted_avg = pd.ewma(ts_log, halflife=12)

    plt.plot(ts_log)

    plt.plot(expwighted_avg, color='red')

    注意,这里使用了参数“半衰期”来定义指数衰减量。这只是一个假设,将很大程度上取决于业务领域。其他参数,如跨度和质心也可以用来定义衰减,正如上面链接分享的探讨。现在让我们从这个序列转移,继续检查稳定性。

    ts_log_ewma_diff = ts_log - expwighted_avg

    test_stationarity(ts_log_ewma_diff)

    这个时间序列有更少的平均值变化和标准差大小变化。同时,检验统计量小于1%的临界值,这比以前的情况好。请注意在这种情况下就不会有遗漏值因为所有的值在一开始就被赋予了权重。所以在运行的时候,它没有先前的值参与。

    消除趋势和季节性

    之前讨论来了简单的趋势减少技术不能在所有情况下使用,特别是在高季节性情况下。让我们谈论一下两种消除趋势和季节性的方法。

    差分-采用一个特定时间差的差值

    分解——建立有关趋势和季节性的模型和从模型中删除它们。

    差分

    处理趋势和季节性的最常见的方法之一就是差分法。在这种方法中,我们采用特定瞬间和它前一个瞬间的不同的观察结果。这主要是在提高平稳性。pandas可以实现一阶差分:

    ts_log_diff = ts_log - ts_log.shift()

    plt.plot(ts_log_diff)

    表中可以看出很大程度上减少了趋势。让我们通过模块验证一下:

    ts_log_diff.dropna(inplace=True)

    test_stationarity(ts_log_diff)

    我们可以看到平均数和标准差随着时间有小的变化。同时,DF检验统计量小于10% 的临界值,因此该时间序列在90%的置信区间上是稳定的。我们同样可以采取二阶或三阶差分在具体应用中获得更好的结果。这些方法你可以自己尝试。

    分解

    在这种方法中,趋势和季节性是分别建模的并倒回到序列的保留部分。我将跳过统计数据,直接给出结果:

    from statsmodels.tsa.seasonal import seasonal_decompose

    decomposition = seasonal_decompose(ts_log)

    trend = decomposition.trend

    seasonal = decomposition.seasonal

    residual = decomposition.resid

    plt.subplot(411)

    plt.plot(ts_log, label='Original')

    plt.legend(loc='best')

    plt.subplot(412)

    plt.plot(trend, label='Trend')

    plt.legend(loc='best')

    plt.subplot(413)

    plt.plot(seasonal,label='Seasonality')

    plt.legend(loc='best')

    plt.subplot(414)

    plt.plot(residual, label='Residuals')

    plt.legend(loc='best')

    plt.tight_layout()

    在这里我们可以看到趋势,季节性从数据分离,我们可以建立残差的模型,让我们检查残差的稳定性:

    ts_log_decompose = residual

    ts_log_decompose.dropna(inplace=True)

    test_stationarity(ts_log_decompose)

    DF测试统计量明显低于1%的临界值,这样时间序列是非常接近稳定。你也可以尝试高级的分解技术产生更好的结果。同时,你应该注意到, 在这种情况下将残差转换为原始值对未来数据不是很直观。

    预测时间序列

    我们看到不同的技术和它们有效的工作使得时间序列得以稳定。让我们建立差分后的时间序列模型,因为它是很受欢迎的技术,也相对更容易添加噪音和季节性倒回到预测残差。在执行趋势和季节性评估技术上,有两种情况:

    不含依赖值的严格稳定系列。简单的情况下,我们可以建立残差模型作为白噪音(指功率谱密度在整个频域内均匀分布的噪声)。但这是非常罕见的。

    序列含有明显的依赖值。在这种情况下,我们需要使用一些统计模型像ARIMA(差分自回归移动平均模型)来预测数据。

    让我给你简要介绍一下ARIMA,我不会介绍技术细节,但如果你希望更有效地应用它们,你应该理解这些概念的细节。ARIMA代表自回归整合移动平均数。平稳时间序列的ARIMA预测的只不过是一个线性方程(如线性回归)。预测依赖于ARIMA模型参数(p d q)。

    自回归函数(AR)的条件(p):AR条件仅仅是因变量的滞后。如:如果P等于5,那么预测x(t)将是x(t-1)。。。(t-5)。

    移动平均数(MA)的条件(q):MA条件是预测方程的滞后预测错误。如:如果q等于5,预测x(t)将是e(t-1)。。。e(t-5),e(i)是移动平均叔在第ith个瞬间和实际值的差值。

    差分(d):有非季节性的差值,即这种情况下我们采用一阶差分。所以传递变量,令d=0或者传递原始变量,令d=1。两种方法得到的结果一样。

    在这里一个重要的问题是如何确定“p”和“q”的值。我们使用两个坐标来确定这些数字。我们来讨论它们。

    自相关函数(ACF):这是时间序列和它自身滞后版本之间的相关性的测试。比如在自相关函数可以比较时间的瞬间‘t1’…’t2’以及序列的瞬间‘t1-5’…’t2-5’ (t1-5和t2 是结束点)。

    部分自相关函数(PACF):这是时间序列和它自身滞后版本之间的相关性测试,但是是在预测(已经通过比较干预得到解释)的变量后。如:滞后值为5,它将检查相关性,但是会删除从滞后值1到4得到的结果。

    时间序列的自回归函数和部分自回归函数可以在差分后绘制为:

    #ACF and PACF plots:

    from statsmodels.tsa.stattools import acf, pacf

    lag_acf = acf(ts_log_diff, nlags=20)

    lag_pacf = pacf(ts_log_diff, nlags=20, method='ols')

    #Plot ACF:

    plt.subplot(121)

    plt.plot(lag_acf)

    plt.axhline(y=0,linestyle='--',color='gray')

    plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

    plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

    plt.title('Autocorrelation Function')

    #Plot PACF:

    plt.subplot(122)

    plt.plot(lag_pacf)

    plt.axhline(y=0,linestyle='--',color='gray')

    plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

    plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')

    plt.title('Partial Autocorrelation Function')

    plt.tight_layout()

    在这个点上,0的每一条边上的两条虚线之间是置信区间。这些可以用来确定“p”和“q”的值:

    1、p-部分自相关函数表第一次截断的上层置信区间是滞后值。如果你仔细看,该值是p=2。

    2、q- 自相关函数表第一次截断的上层置信区间是滞后值。如果你仔细看,该值是q=2。

    现在,考虑个体以及组合效应建立3个不同的ARIMA模型。我也会发布各自的RSS(是一种描述和同步网站内容的格式,是使用最广泛的XML应用)。请注意,这里的RSS是指残差值,而不是实际序列。

    首先,我们需要上传ARIMA模型。

    from statsmodels.tsa.arima_model import ARIMA

    p,d,q值可以指定使用ARIMA的命令参数即采用一个元(p,d,q)。建立三种情况下的模型:

    自回归(AR)模型:

    model = ARIMA(ts_log, order=(2, 1, 0))

    results_AR = model.fit(disp=-1)

    plt.plot(ts_log_diff)

    plt.plot(results_AR.fittedvalues, color='red')

    plt.title('RSS: %.4f'% sum((results_AR.fittedvalues-ts_log_diff)**2))

    组合模型

    model = ARIMA(ts_log, order=(0, 1, 2))

    results_MA = model.fit(disp=-1)

    plt.plot(ts_log_diff)

    plt.plot(results_MA.fittedvalues, color='red')

    plt.title('RSS: %.4f'% sum((results_MA.fittedvalues-ts_log_diff)**2))

    移动平均数(MA )模型

    model = ARIMA(ts_log, order=(2, 1, 2))

    results_ARIMA = model.fit(disp=-1)

    plt.plot(ts_log_diff)

    plt.plot(results_ARIMA.fittedvalues, color='red')

    plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-ts_log_diff)**2))

    在这里我们可以看到,自回归函数模型和移动平均数模型几乎有相同的RSS,但相结合效果显著更好。现在,我们只剩下最后一步,即把这些值倒回到原始区间。

    倒回到原始区间

    既然组合模型获得更好的结果,让我们将它倒回原始值,看看它如何执行。第一步是作为一个独立的序列,存储预测结果,观察它。

    predictions_ARIMA_diff = pd.Series(results_ARIMA.fittedvalues, copy=True)

    print predictions_ARIMA_diff.head()

    注意,这些是从‘1949-02-01’开始,而不是第一个月。为什么?这是因为我们将第一个月份取为滞后值,一月前面没有可以减去的元素。将差分转换为对数尺度的方法是这些差值连续地添加到基本值。一个简单的方法就是首先确定索引的累计总和,然后将其添加到基本值。累计总和可以在下面找到:

    predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum()

    print predictions_ARIMA_diff_cumsum.head()

    你可以在头脑使用之前的输出结果进行回算,检查这些是否正确的。接下来我们将它们添加到基本值。为此我们将使用所有的值创建一个序列作为基本值,并添加差值。我们这样做:

    predictions_ARIMA_log = pd.Series(ts_log.ix[0], index=ts_log.index)

    predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum,fill_value=0)

    predictions_ARIMA_log.head()

    第一个元素是基本值本身,从基本值开始值累计添加。最后一步是将指数与原序列比较。

    predictions_ARIMA = np.exp(predictions_ARIMA_log)

    plt.plot(ts)

    plt.plot(predictions_ARIMA)

    plt.title('RMSE: %.4f'% np.sqrt(sum((predictions_ARIMA-ts)**2)/len(ts)))

    最后我们获得一个原始区间的预测结果。虽然不是一个很好的预测。但是你获得了思路对吗?现在,我把它留个你去进一步改进,做一个更好的方案。

    最后注意

    在本文中,我试图提供你们一个标准方法去解决时间序列问题。这个不可能达到一个更好的时间,因为今天是我们的小型编程马拉松,挑战你们是否可以解决类似的问题。我们广泛的讨论了稳定性的概念和最终的预测残差。这是一个漫长的过程,我跳过了一些统计细节,我鼓励大家使用这些作为参考材料。

    文章来源:36大数据

    展开全文
  • 首先介绍一个新任务,LSTF(Long Sequence Time-Series Forecasting),即长序列预测任务。刚刚我们提到的LSTM模型,往往以滑动窗口(或动态解码)的形式做长序列预测,随着时间步的增长,预测误差会逐渐放大。 ...

    一、LSTM

    class LSTM(nn.Module):
        def __init__(self, input_size=1, hidden_layer_size=100, output_size=1):
            super().__init__()
            self.hidden_layer_size = hidden_layer_size
    
            self.lstm = nn.LSTM(input_size, hidden_layer_size)
    
            self.linear = nn.Linear(hidden_layer_size, output_size)
    
            self.hidden_cell = (torch.zeros(1,1,self.hidden_layer_size),
                                torch.zeros(1,1,self.hidden_layer_size)) # (num_layers * num_directions, batch_size, hidden_size)
    
        def forward(self, input_seq):
            lstm_out, self.hidden_cell = self.lstm(input_seq.view(len(input_seq) ,1, -1), self.hidden_cell)
            predictions = self.linear(lstm_out.view(len(input_seq), -1))
            return predictions[-1]
    

    细节问题:
    在这里插入图片描述

    二、Transformer

    transformer-time-series-prediction时序预测代码
    在这里插入图片描述

    三、Informer

    大名鼎鼎的Informer,AAAI 2021 Best Paper提出的模型,是对Transformer的改进。

    首先介绍一个新任务,LSTF(Long Sequence Time-Series Forecasting),即长序列预测任务。刚刚我们提到的LSTM模型,往往以滑动窗口(或动态解码)的形式做长序列预测,随着时间步的增长,预测误差会逐渐放大。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    Informer2020原作者代码

    args.seq_len = 48 # input sequence length of Informer encoder
    args.label_len = 24 # start token length of Informer decoder
    args.pred_len = 24 # prediction sequence length
    

    代码中的以上参数配置表示:1~48时间步为encoder输入,25~72时间步为decoder输入(其中49~72时间步被置为0),25~72时间步为decoder输出。可以结合着下图来理解。

    在这里插入图片描述

    另一个容易混淆的参数是timeenc。timeenc = 0 if args.embed!=‘timeF’ else 1,如果timeenc为1,将考虑更多可能的周期信息。

    四、一些重要的库

    以下是一些学习过程中接触到的、关于时序任务的开源库的整理。

    https://github.com/linkedin/luminol

    luminol支持两大功能:时序异常检测、两条时间序列的相关性计算。

    GitHub - jdb78/pytorch-forecasting: Time series forecasting with PyTorch

    pytorch-forecasting是一个基于pytorch的时序预测库,内嵌了一系列模型,如LSTM、DeepAR、Transformer、N-BEATS等。

    Anomaly Detection Toolkit (ADTK)

    adtk提供了通过三大组件,提供基本的异常检测算法(Detector)、异常特征加工(Transformer)、处理流程控制(Aggregator)等功能。注意这里真的只是基本算法,例如在异常检测中,通过阈值/分位数/滑动窗口/自回归等方式判断异常,没有高级的检测模型。

    https://github.com/alexminnaar/time-series-classification-and-clustering

    https://github.com/FilippoMB/Time-series-classification-and-clustering-with-Reservoir-Computing

    GitHub - wannesm/dtaidistance: Time series distances: Dynamic Time Warping (DTW)

    tslearn’s documentation - tslearn 0.5.1.0 documentation

    以上几个项目与时间序列聚类任务相关。

    GitHub - MaxBenChrist/awesome_time_series_in_python: This curated list contains python packages for time series analysis

    时间序列相关工具、模型、数据集汇总。

    展开全文
  • 时间序列预测

    千次阅读 2020-12-29 23:10:04
    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。

    关注微信公众号“时序人”获取更好的阅读体验
    在这里插入图片描述

    时间序列知识整理系列

    1. 时间序列统计分析
    2. 时间序列聚类
    3. 时间序列预测
    4. 时间序列回归
    5. 时间序列特征工程
    6. 时间序列补缺
    7. 时间序列异常检测

    写在前面

    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。

    需要明确一点的是,与回归分析预测模型不同,时间序列模型依赖于数值在时间上的先后顺序,同样大小的值改变顺序后输入模型产生的结果是不同的。如之前的文章所介绍,时间序列可以分为平稳序列,即存在某种周期,季节性及趋势的方差和均值不随时间而变化的序列,和非平稳序列。如何对各种场景的时序数据做准确地预测,是一个非常值得研究的问题。

    本文为大家总结时间序列预测的有关方法,浅析这些技术并探索如何可以提高这些方法的预测效果。

    基本规则法

    要预测一个时间序列,我们首先需要发现其变化的规律。最基本的方法,就是通过人工经验,挖掘时序数据的演化特征,找到时序变化的周期,从而预估时间序列的未来走势。具体的观察一个时间序列,当序列存在周期性时,提取时间序列的周期性特征进行预测。
    图 | 抽取时序的周期进行拟合

    传统参数法

    之前我们介绍了时间序列的统计分析方法,arma。该方法可以将时间序列的演化变为数学参数,天然的,我们可以通过拟合好的模型,进行时间序列的预测。

    传统的参数预测方法可以分为两种,一种拟合标准时间序列的餐顺方法,包括移动平均,指数平均等;另一种是考虑多因素组合的参数方法,即AR,MA,ARMA等模型。这类方法比较适用于小规模,单变量的预测,比如某门店的销量预测等。总的来说,基于此类方法的建模步骤是:

    1. 首先需要对观测值序列进行平稳性检测,如果不平稳,则对其进行差分运算直到差分后的数据平稳;
    2. 在数据平稳后则对其进行白噪声检验,白噪声是指零均值常方差的随机平稳序列;
    3. 如果是平稳非白噪声序列就计算ACF(自相关系数)、PACF(偏自相关系数),进行ARMA等模型识别,
    4. 对已识别好的模型,确定模型参数,最后应用预测并进行误差分析。

    这类方法一般是统计或者金融出身的人用的比较多,对统计学或者随机过程知识的要求比较高。而在数据挖掘的场景中比较难适用,因为需要大量的参数化建模。比如有一个连锁门店的销售数据,要预测每个门店的未来销量,用这类方法的话就需要对每个门店都建立模型, 这样就很难操作了。

    这类方法可以参考:时间序列统计分析

    时间序列分解

    时间序列分解法是数年来一直非常有用的方法,一个时间序列往往是一下几类变化形式的叠加或耦合:

    • 长期趋势(Secular trend, T):长期趋势指现象在较长时期内持续发展变化的一种趋向或状态。
    • 季节变动(Seasonal Variation, S):季节波动是由于季节的变化引起的现象发展水平的规则变动
    • 循环波动(Cyclical Variation, C):循环波动指以若干年为期限,不具严格规则的周期性连续变动
    • 不规则波动(Irregular Variation, I): 不规则波动指由于众多偶然因素对时间序列造成的影响

    图 | 原始时间序列

    时间序列分解模型

    加法模型

    加法模型的形式如下:
    X t = T t + S t + C t + I t X_t = T_t + S_t + C_t + I_t Xt=Tt+St+Ct+It
    加法模型中的四种成分之间是相互独立的,某种成分的变动并不影响其他成分的变动。各个成分都用绝对量表示,并且具有相同的量纲。

    乘法模型

    乘法模型的形式如下:
    X t = T t × S t × C t × I t X_t = T_t \times S_t \times C_t \times I_t Xt=Tt×St×Ct×It
    乘法模型中四种成分之间保持着相互依存的关系,一般而言,长期趋势用绝对量表示,具有和时间序列本身相同的量纲,其他成分则用相对量表示。

    加乘混合模型

    以上两种方式的混合

    时间序列的长期趋势分析

    图 | 拟合的时序趋势

    移动平均法

    在原时间序列内依次求连续若干期的平均数作为其某一期的趋势值,如此逐项递移求得一系列的移动平均数,形成一个平均数时间序列。

    时间回归法

    使用回归分析中的最小二乘法,以时间t或t的函数为自变量拟合趋势方程。常用的趋势方程如下:

    • 一阶线性方程
    • 二次(多次)方程曲线
    • 指数曲线

    时间序列季节变动分析

    图 | 拟合的季节变动

    时间序列短期会受季节等短期因素影响,从而存在一些周期性

    乘法模型-季节指数

    乘法模型中的季节成分通过季节指数来反映。常用的方法称为移动平均趋势剔除法。步骤如下:

    1. 计算一动平均值
    2. 从序列中剔除移动平均值
    3. 季 节 指 数 ( S ) = 同 季 平 均 数 总 季 平 均 数 × 100 % 季节指数(S) = \frac{同季平均数}{总季平均数}\times 100\% (S)=×100%
    时间序列循环变动分析

    图 | 拟合的长期循环变动

    时序长期来看会存在一个循环往复,通常通过剩余法来计算循环变动成分C:

    1. 如果有季节成分,计算季节指数,得到季节调整后的数据TCI
    2. 根据趋势方程从季节调整后的数据中消除长期趋势,得到序列CI
    3. 对消去季节成分和趋势值的序列CI进行移动平均以消除不规则波动 ,得到循环变动成分C
    时间序列不规则变动分析

    图 | 拟合的不规则变动
    除了以上三种变动信息,剩下的为不规律的时序变动信息。如有需要,可以进一步分解出不规则变动成分:
    I = T × S × C × I T × S × C I = \frac{T \times S \times C \times I}{T \times S \times C} I=T×S×CT×S×C×I
    对于一个时间序列,剔除长期趋势,季节性,循环变动因素之后,剩下的就是不规则变动因素

    Prophet

    在这里插入图片描述
    这里特别提一个Facebook 所服务化的时间序列预测工具,prophet,官网可以参考官网说明(英文)。该方法类似于STL时序分解的思路,增加考虑节假日等信息对时序变化的影响。

    机器学习

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

    单步预测

    在时间序列预测中的标准做法是使用滞后的观测值 x t − 1 x_{t-1} xt1,作为输入变量来预测当前的时间的观测值 x t x_t xt。这被称为单步单变量预测。

    多步预测

    另一种预测问题类型是使用过去的观测序列 { x t − 1 , x t − 2 , . . . } \{x_{t-1},x_{t-2},...\} {xt1,xt2,...}来预测未来的观测序列 { x t , x t + 1 , . . . } \{x_t, x_{t+1},...\} {xt,xt+1,...}。这就是多步预测或序列预测。

    多变量预测

    另一个重要的时间序列称为多元时间序列,即每个时间有多个观测值, { X t = ( x t a , x t b , x t c , . . . ) } t T \{X_t=(x_t^a, x_t^b, x_t^c,...)\}_t^T {Xt=(xta,xtb,xtc,...)}tT。这意味着我们通过不同的测量手段得到了多种观测值,并且希望预测其中的一个或几个值。例如,我们可能有两组时间序列观测值 { x t − 1 a , x t − 2 a , . . . } \{x_{t-1}^a, x_{t-2}^a,...\} {xt1a,xt2a,...} { x t − 1 b , x t − 2 b , . . . } \{x_{t-1}^b, x_{t-2}^b,...\} {xt1b,xt2b,...},我们希望分析这组多元时间序列来预测 x t a x_t^a xta

    基于以上场景,许多监督学习的方法可以应用在时间序列的预测中,比如svm/xgboost/逻辑回归/回归树/…

    深度学习

    深度学习方法近年来逐渐替代机器学习方法,成为人工智能与数据分析的主流,对于时间序列的分析,有许多方法可以进行处理,包括:循环神经网络-LSTM模型/卷积神经网络/基于注意力机制的模型(seq2seq)

    循环神经网络

    循环神经网络(RNN)框架及其变种(LSTM/GRU/…)是为处理序列型而生的模型,天生的循环自回归的结构是对时间序列的很好的表示。所采用的方式也是监督学习,不过不需要人为的构建时序特征,可以通过深度学习网络拟合时序曲线,捕捉时间先后顺序关系,长期依赖,进行特征学习与预测。

    在这里插入图片描述

    卷积神经网络

    传统的卷积神经网络(CNN)一般认为不太适合时序问题的建模,这主要由于其卷积核大小的限制,不能很好的抓取长时的依赖信息。 但是最近也有很多的工作显示,特定的卷积神经网络结构也可以达到很好的效果,

    Gramian Angular Field (格拉姆角场GAF)

    方法描述:将笛卡尔坐标系下的一维时间序列,转化为极坐标系表示,再使用三角函数生成GAF矩阵。

    计算过程:
    - 数值缩放:将笛卡尔坐标系下的时间序列缩放到[0,1]或[-1,1]区间
    - 极坐标转换:使用坐标变换公式,将笛卡尔坐标系序列转化为极坐标系时间序列
    - 角度和/差的三角函数变换:若使用两角和的cos函数则得到GASF,若使用两角差的cos函数则得到GADF

    Short Time Fourier Transform (短时傅里叶变换STFT)

    方法描述:在语音信号处理场景使用很广泛,其目标主要将时间序列转为时频图像,进而采用卷积网络进行特征分析。
    在这里插入图片描述

    时间卷积网络

    时间卷积网络(TCN)是一种特殊的卷积神经网络,针对一维空间做卷积,迭代多层捕捉长期关系。具体的,对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。和传统的卷积神经网络的不同之处在于,TCN不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此又被称为因果卷积。

    在这里插入图片描述

    基于注意力机制的模型

    在RNN中分析时间序列需要我们一步步的顺序处理从 t-n 到 t 的所有信息,而当它们相距较远(n非常大)时RNN的效果常常较差,且由于其顺序性处理效率也较低。基于注意力机制(Attention)的模型,采用跳步的方式计算每个数值之间的两两关联,然后组合这些关联分数得到一个加权的表示。该表示通过前馈神经网络的学习,可以更好的考虑到时序的上下文的信息。

    结合CNN+RNN+Attention,作用各不相同互相配合

    主要设计思想:

    • CNN捕捉短期局部依赖关系
    • RNN捕捉长期宏观依赖关系
    • Attention为重要时间段或变量加权

    一些需要注意的

    难点:

    • 理解时间序列预测问题是要用历史数据预测未来数据
    • 时间序列问题的训练集、测试集划分
    • 特征工程方法及过程
    • 如何转化为监督学习数据集
    • LSTM计算过程理解,包括输入输出维度、参数数量等
    • seq2seq过程的理解,decoder实现
    • attention注意力机制的原理及实现,包括encoder-decoder attention, self attention, multi-head attention等
    • 时间卷积网络的含义,dilated-convolution 和 causal-convolution
    • prophet预测原理,各参数对模型拟合效果、泛化效果的影响
    • 时间序列基本规则法中周期因子得计算过程
    • 传统方法如周期因子、线性回归、ARMA等的预测结果表现为,预测趋势大致正确,但对波动预测不理想,体现在波动的幅度差异、相位偏移。
    • 时间序列分解方法。理解加法模型和乘法模型,判断分解模型的选取及分解技巧。

    工具

    • tslearn:开源的时间序列机器学习python工具包
    • tsfresh:开源的时间序列特征提取python工具包
    • pyts:开源的时间序列分类Python工具包。提供预处理工具及若干种时间序列分类算法

    更多原创内容与系列分享,欢迎关注微信公众号“时序人”获取。
    在这里插入图片描述

    展开全文
  • LSTM多变量时间序列预测

    千次阅读 多人点赞 2021-03-27 20:40:42
    基于LSTM多变量的时间序列预测
  • 时间序列定义: 时间序列是按照一定的时间间隔排列的一组数据,其时间间隔可以...对于时间序列预测,由于很难确定它与其他变量之间的关系,这时我们就不能用回归去预测,而应使用时间序列方法进行预测。 采用时间序列
  • 本节简单回归一下时间序列任务的几种方向以及有哪些比较优秀的开源算法。1 时序预测时序预测从不同角度看有不同分类。从实现原理的角度,可以分为传统统计学、机器学习(又分非深度学习和深度学习)...
  • 参考链接: 在Python中使用LSTM和PyTorch进行时间序列预测 想了解更多好玩的人工智能应用,请关注公众号“机器AI学习 数据AI挖掘”,”智能应用"菜单中包括:颜值检测、植物花卉识别、文字识别、人脸美妆等有趣的...
  • 自回归模型,模型参量法高分辨率谱分析方法之一,也是现代谱估计中常用的模型。如果{εt}\left\{ \varepsilon _{t}\right\}{εt​}为白噪声,服从N(0,σ2)N\left( 0,\sigma ^{2}\right)N(0,σ2),a0,a1,...,ap(ap≠0...
  • 时间序列(time series)是系统中某...时间序列预测关键:确定已有的时间序列的变化模式,并假定这种模式会延续到未来。 时间序列的基本特点 假设事物发展趋势会延伸到未来 预测所依据的数据具有...
  • 来源:机器学习研习院大家好,我是阳哥!时间序列预测是机器学习中一个经常被忽视的重要领域。时间序列在观察之间添加了显式的顺序依赖性:时间维度。这个额外的维度既是一个约束,也是一个提供额外信息...
  • 时间序列预测是机器学习中一个经常被忽视的重要领域。时间序列在观察之间添加了显式的顺序依赖性:时间维度。这个额外的维度既是一个约束,也是一个提供额外信息来源的结构。时间序列时间序列分析使用经...
  • TCCT:紧耦合卷积Transformer时间序列预测 关注人工智能学术前沿 回复 :ts32 5秒免费获取论文pdf文档,及项目源码 摘要 时间序列预测在现实世界中有着广泛的应用。最近的研究表明,Transformer在处理这...
  • 混沌时间序列分析与预测工具箱 Version2.9chaotic time series analysis and prediction matlab toolbox - trial version 2.9%------------------------------------------------------------------------------1、...
  • 这是我之前工作做的一个项目import osimport pandas as pdimport numpypath = "E:/工作/负荷预测/历史负荷数据-每天" #文件夹目录files= os.listdir(path) #得到文件夹下的所有文件名称data_history = pd.DataFrame...
  • 作者:Mohit Sharma翻译:王闯(Chuck)校对:王可汗本文约4100字,建议阅读10+分钟本文介绍了用Python进行时间序列分解的不同方法,以及如何在Python中进行时间序列预测的一些基本方法和示例。预测是一件复杂的事情,...
  • 引言 本文主要是记载学习阿里天池大数据时间序列预测竞赛的baseline模型的构建过程,以及对baseline进行改进的一些思路,后续将会根据这些思路对模型进行调优。 一、背景 发生在热带太平洋上的厄尔尼诺-南方涛动...
  • 时间序列预测方法论上,主要又分为传统的计量方法,如ARIMA等;及最近兴起的机器学习的方法,如LSTM、树模型(Random Forest,GBDT)及Transformer等。对于常用的时序研究工具包的功能对比如下: 通过上表对比...
  • 目前较为知名的预测方法林林总总,这些方法仅基于时间序列过去值的分析,也就是说,其采用的原则通常用于技术分析。这些方法主要使用外推方案,其中在某特定时间延迟处识别的序列属性超出了其限制。 同时,它还假定...
  • 一种历史资料延伸预测,也称历史...时间序列预测法就是通过编制和分析时间序列,根据时间序列所反映出来的发展过程、方向和趋势,进行类推或延伸,借以预测下一段时间或以后若干年内可能达到的水平。其内容包括:收...
  • 介绍时间序列(简称TS)被认为是分析领域比较少人知道的技能。(我也是几天前才知道它)。但是你一定知道最近的小型编程马拉松就是基于时间序列发展起来的,我参加了这项活动去学习了解决时间序列问题的基本步骤,在这儿...
  • 下载地址见附件或者http://blog.sina.com.cn/luzhenbo2Version2.9与Version2.1不同之处(1)增加了“改进的CC方法”(2)改进了以下三个算法对MATLAB高版本的支持,代价是运算时间稍长!a.求嵌入维(embedding dimension)...
  • 常用时间序列模型

    2021-10-15 11:34:07
    常用时间序列模型 1.差分指数平滑法 当时间序列的变动具有直线趋势时,用一次指数平滑法会出 现滞后偏差,其原因在于数据不满足模型要求。 因此,我们也可以从数据变换的角度来考虑改进措施,如运用差分方法先对数据...
  • 多元时间序列数据的预测和建模标签:#机器学习##预测#时间:2018/09/28 15:44:19作者:小木#### 简介时间是决定企业是上升还是下降的最关键因素。 这就是为什么我们看到商店和电子商务平台的销售与节日保持一致。 ...
  • 趋势外推法是根据事物的历史和现时资料,寻求事物发展规律,从而推测出事物 未来状况的一种比较常用预测方法。利用趋势外推法进行预测,主要包括六个阶段:& t. M( m; a; y- D3 v5 T( e' Q8 v% U% OQ2 i( N(a)...
  • darts库,这是一个包含多种时间序列预测方法的Python库 github网址为:https://github.com/unit8co/darts 其中包含众多效果好并且常用的时间序列预测模型,例如Prophet、RNNModel等等,而且这个库的使用方式又和...
  • #时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,311
精华内容 14,124
关键字:

常用的时间序列预测方法