精华内容
下载资源
问答
  • 作者简介饭饭爱吃饭,携程高级数据分析师,主要负责旅游领域数据赋能相关工作。对旅游趋势识别与推荐、旅游广告投放、旅游LBS等领域浓厚兴趣。一、背景随着大数据发展,自然科学、社会科学、...

    作者简介

     

    饭饭爱吃饭,携程高级数据分析师,主要负责旅游领域数据赋能相关工作。对旅游趋势识别与推荐、旅游广告投放、旅游LBS等领域有浓厚兴趣。

    一、背景

    随着大数据的发展,自然科学、社会科学、工业工程、金融科技等领域都积累了海量的数据,在这些海量的数据中,时间序列数据(按时间戳顺序依次到达的数据)是其中重要的组成部分。利用这些时间序列数据来预测其未来一段时间的状态有着广泛的应用场景,比如在金融领域被使用来做现金流量预测、股票价格预测,在零售行业被使用来做业务收入预测、库存消耗预测,在旅游行业被使用来预测旅游订单量、客服服务量等,在气象、人口密度预测等方面也被广泛使用来帮助决策者做出有数据支撑的重要决策。

    在携程也有一些时间序列预测相关的业务场景,比如下单量预测、话务量预测、客流量预测等,以下将介绍我们在处理时间序列预测相关问题使用的一些方法与思考。

    二、时间序列预测比较常见的工具方法

    通常来说,时间序列预测工具方法可以归结为三大类:一类是基于业务场景理解的因子预测模型,一类是传统时间序列预测模型,比如均值回归、ARIMA、指数平滑预测法(比如Holt-Winters)等,还有一类是机器学习模型,比如支持向量机、树模型(比如GBM、QRF)、神经网络模型(比如RNN、CNN)等。

    2.1 基于业务场景理解的因子预测模型

    基于因子的时序预测是一种传统的预测手法,在一些特定场景有着比较好的表现,比如某条业务线刚起步,历史数据的积累有限的时候。同时该方法基于其业务解释性强、准确率也比较高的特点,可以作为时序预测项目的baseline,并且在黑盒模型做输出时,可以帮助进行后置校准,避免输出较大的偏差。

    以下举几个案例:

    1)需要展示的客流量预测

    需要进行展示的客流量预测这样的场景,是一个模型解释性要求比较高,同时周期性较强的场景。那么对于这样的业务场景,可以考虑分解出最重要的周期因子,来进行可解释地稳定地预测。具体实施的时候:考虑到时间序列数值除了受本身业务的影响,存在固定的周期性波动,同时还会受到已知或者未知事件的影响。因此在预测时,会单独将一些已知的重要事件单独进行预估,在基础预测的再叠加事件的影响。

    这样的场景,因子预测的公式可以是:某日话务量 = 日话务基准量 * 周规律因子 * 事件影响因子

    周规律因子的计算逻辑:基于对一段时间的周规律因子总结,可以得到周规律因子(可以以日话务量与周话务总量的比例关系来做因子,也可以以相邻几天日话务量之间的比例关系来做因子)

    日话务基准量:基于周规律因子,可以用来计算每一天的日话务基准量

    没有叠加事件影响因子的日话务预测量:基于日话务基准量预测的未来日话务基准量 * 周规律因子

    事件影响因子的计算逻辑:可以通过整理出历史上该事件带来的额外话务量(实际量减去预测量)来计算。

    2)一条新开拓的国际业务线

    一条刚开始快速成长的国际业务线,特点是历史数据积累有限,同时数据量变化大。可能仅仅只能拿到2个月的数据,并且短时间内时序数据的性质(均值、方差)就会有极大的改变。因此用历史数据来预测未来的历史数据的参考性较低,所以需要深入业务去理解,找寻该业务特有的相关因子来进行预测,思路可以是:

    首先基于业务相关度进行挖掘(未来入住需求量与售前话务量强相关,新市场新签用户数与未来下单量强相关),然后基于树模型的特征重要性进行核心影响因子的识别,来选择出最为重要的因子特征。最后基于统计学模型对核心影响因子的未来数值进行预测,并在此基础上预测未来的业务线状态。

    2.2 传统时间序列预测模型

    传统时间序列预测模型,通常指用于时间序列分析/预测的统计学模型,比如常用的有均值回归、ARIMA、指数平滑预测法等。

    其中均值回归,指对历史一段时间的值取平均,作为未来每个时刻的预测。其他时间序列预测模型比如ARIMA(auto-regressive integrated moving average)、一些指数平滑模型(SEM,Holt-Winters等),主要通过对历史数据的建模分析,抽离出其中的趋势,最后通过对趋势的预测得到未来一段时间需求的变化。

    基于统计学的传统时间序列预测方法,优点是复杂度低、计算速度快。但是有其局限性,通过对业界方法的调研与自己的实验,我们发现由于真实应用场景的复杂多样性(现实世界的时间序列往往受到各种不同因素的限制与影响,而难以预测),比如受到营销计划、自然灾害等的影响,传统的单一统计学模型的准确率相对来说会比机器学习差一部分,而机器学习模型或者更复杂的ensemble集成模型会有更好的效果。但传统时间序列预测模型也有其重要的意义,比如说:

    • 可以作为预测的baseline model,为项目提供一个准确率的基准线,来帮助评估其他模型的提升。

    • 前置清洗作用,时序模型由于其较好的可解释性,可以帮助剔除一些异常值,比如因服务器故障或者业务线逻辑调整产生的异常值。

    • 作为集成模型中的一块,参与时序集成模型的训练。

    • 可以提供一个预测结果的合理的范围,因为话务量通常不会短时间内激增。使用这个合理的范围,在黑盒模型最后输出结果时,帮忙进行后置校准,从而使预测系统更加稳定。

    2.3 机器学习模型

    在运用机器学习模型时,我们可以把时间序列模型当成一个回归问题来解决,常见的方法有树模型与神经网络模型两大类。

    1)树模型

    一般采用的是xgboost或者lightgbm的方法,现在业界也被广泛应用,这里就不多做介绍了。树模型的一个好处就是,相对于以上的方法,能更方便地添加一些category类的特征比如:是否季节末、是否公共价格、是否营业时间等。

    在用树模型做时间序列预测时,特征工程的核心要点在于如何从历史的数据中抽取特征,这里介绍一些特征构建的经验:

    • 离散类时间特征:年月日时分数,周几,一年中的第几天,第几周,一天中的哪个时间段等

    • 判断类时间特征:是否调休,是否周末,是否公共假期等

    • 滑窗类时间聚合特征:过去X天平均值,过去X天方差,过去X天最大值,过去X小时四分位数,过去X天偏态系数等

    • 其他时序模型的预测值作为特征:ARIMA、SARIMA、指数平滑等

    • 其他相关业务线数据的引入:比如对于售后业务线,引入售前业务线/预定业务线等数据,帮忙进行售后业务线的预测

    2)神经网络模型

    常见的利用神经网络技术来做时间序列预测的方法有有CNN、RNN、LSTM、GRU等。

    相对于传统的树模型需要人工构建相关模型特征,神经网络模型通常需要喂入大量的数据来进行训练,因此如果同类时序的数据量够多(有够多彼此间相关性较强的时序),那么训练一个通用型的端对端的神经网络预测有时也有不错的效果,比如使用LSTM一方面可以较容易地整合外部变量,另一方面LSTM有能较好地自动提取时序特征的能力。

    在某条业务产线上,我们针对多城市的数据进行建模,训练了一个灵活单一通用的端对端LSTM时间预测模型。具体在训练时,输入数据一方面包括了时间序列相关的数据,另一方面也包括了天气、节假日等外部变量,同时使用了encoder-decoder来帮助提取时序特征,在T+14的主要大城市时序预测上有较大的提升,达到日95%+的准确率。

    同时,在实践中,我们发现对于一些产线,采用多任务学习的方法,可以有效地提高模型的泛化性以及准确率,比如预测未来某天某些时段的值时,将不同时段的值作为不同的任务目标来进行学习,或者是加入相关性很强的其他时序数据来作为不同的任务目标。


    三、一些经验与思考

    1)训练测试数据的划分

    和其他机器学习场景不同,时间序列预测的数据是带有前后顺序的序列数据,因此在做训练测试数据的划分时,要注意不能泄露测试数据给模型,因此在做训练测试数据划分时,需要让测试数据全都在训练数据的时间戳之后。

    2)一线业务人员经验的使用

    在做一些时间序列预测场景时,我们发现一线业务人员经验是极其宝贵的,比如说一些抚平/剔除业务异常数据的经验,他们会知道在历史数据里哪些时间段的数据是异常的原因是什么,比如各种事件会对不同的业务线产生什么样的影响、一些预测偏差较大的原因可能是什么。这些宝贵的经验可以转化成时间序列历史数据清洗的规则或者是一些时间序列数据校准的Knowledge Base。

    3)利用能反映未来的信息

    当我们在做时间序列预测时,本质我们是在利用历史数据来预测未来,那么如果我们能够拿到更多关于未来的信息,则可以帮助我们预测的更准。什么是关于未来的信息呢?比如说:用户的预订信息,用户的浏览数据,这些数据能够侧面反映用户对于未来某天的兴趣值,从而帮助我们窥探未来。

    4)如何保证输出结果的稳定性

    在使用黑盒模型时,我们会发现有时模型输出会存在一些异常点,这可能是由于历史数据中存在一些没有被剔除的噪音,因此我们需要构建多种可解释性强的预测尺度范围,来校准最后的输出结果,从而提高模型输出的稳定性,生产中这样的校准有时也可以提高一定的准确率。

    5)重新训练模型的频率

    通常,当有新数据获得时,重新训练模型来进行预测,整体来说在每个时间戳能给出更好的预测结果。如果生产上准备采取这种思路的话,在训练的时候也要用相同的重新训练的方法,来评估哪种模型效果最好,即采用sliding window / expanding window的方法去在每个时间戳重新训练预测和记录误差来进行模型评估。当然这样计算量会比较大,比较适合单一产线并且对准确率较为看中的场景。

    6)如何评估模型的好坏

    对于不同的项目,评判时序预测模型好坏的标准是不同的,整体来说,要针对不同的项目场景,综合模型准确率、可维护性、可解释性、稳定性等多方面去评估一个预测模型或者一个预测框架的合理性和实用性。

    7)历史数据该相信多少

    事物是不断发展变化的,比如随着智能客服智能化程度的提高,需要人工客服处理的订单会逐渐变少,因此人工客服相关的时间序列数据的性质会处于不断变化之中,那么我们对于越久远的历史数据的信任度应该是要逐渐下降的。处理的方法是一方面我们可以通过分析来判断训练应该取多久内的时间序列数据,另一方面我们在训练时可以赋予越近的数据更高的权重。

    【推荐阅读】


     “携程技术”公众号

      分享,交流,成长

    展开全文
  • 时间序列分析之三:参数估计

    千次阅读 2013-12-02 23:56:09
    在选定某种模型如AR、MA、ARMA、ARIMA模型后,需要对模型未知参数进行估计,估计的方法与数理统计中参数点估计方法类似,相关矩估计、最小二乘估计、最小方差估计、极大似然估计、最大熵估计等。  在对...

       在选定某种模型如ARMAARMAARIMA模型后,需要对模型的未知参数进行估计,估计的方法与数理统计中的参数点估计方法类似,有相关矩估计、最小二乘估计、最小方差估计、极大似然估计、最大熵估计等。

        在对参数进行估计前,需要知道各种常见统计量的计算方法。由于自相关函数、偏自相关函数、功率谱密度、格林函数等作为系统的特征函数,在给出大量的数据(样本)之后,如果得到这些特征函数的估计呢?

    1)样本均值、样本方差、样本自相关函数、样本功率谱的计算

    样本均值、样本方差同数理统计。

    样本自相关函数:每个样本值减去样本均值后的自相关乘积平均。

    样本功率谱:有两种方法,第一种间接法:通过先求样本自相关然后根据FFT计算得到

    样本功率谱,第二种直接法:对样本数据得到频谱,再平方得功率谱。

    2)相关矩估计

    由于对随机差分方程求自相关函数后,变成关于自相关函数的确定的差分方程,对多个时刻可构成方程组(AR模型为线性方程组即Yule-Walker方程,计算简单,MAARMA型为非线性方程组,可采用牛顿-拉夫森算法进行迭代,计算复杂),这样就可得到模型的参数估计和噪声的方差。

    3)最小二乘估计

    对随机差分方程,代入量测数据,得到含噪声的线性方程组,采用最小二乘方法,可解出未知参数,由此可得到噪声方差,注意相关矩估计和最小二乘估计在N较大时效果相当。由于MAARMA模型中噪声含有多个,需要将历史噪声转化为数据的形式(逆转关系

    式),这是一个非线性关系,计算量大。

    4)线性最小方差估计

    基本思想是用量测和噪声的线性组合去逼近量测数据,使得均方误差(平方和函数)最小的参数即为所求。最终可以得到估计的解析表达式和误差的平方和函数,使得平方和函数最小。

    5)极大似然估计

    使得量测数据发生的概率最大的参数选择就是参数的估计。似然函数是非线性的,通常由近似或数值算法进行求解。

    6)最大熵估计(?)

    香农提出信息熵的概念,最大熵准则是说选择自相关值使得熵达到最大,外推出下一自相关值,从信息论的观点,推算的自相关值对应的序列的随机性最强,含有最多的信息,这样就构造出了更多的自相关值,可用于谱估计。

    展开全文
  • 时间序列模型

    2018-12-04 20:40:42
    1. 时间序列分析方法概述  一个时间序列往往是一下几类变化形式的叠加或耦合。  (1)长期趋势变动:反映主要变化趋势; ...常见的时间序列模型:  (1)加法模型: Yt = Tt + St + Ct...

    1. 时间序列分析方法概述

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

        (1)长期趋势变动:反映主要变化趋势;

        (2)季节变动

        (3)循环变动

        (4)不规则变动

        使用Ti表示长期趋势预测,St表示季节性变动,Ct表示循环变动,Rt表示随机干扰项。常见的时间序列模型有:

        (1)加法模型:  Yt = Tt + St + Ct + Rt

        (2)乘法模型 : Yt = Tt * St  * Ct * Rt 

        (3)混合模型:    Yt = Tt * St + Rt                  Yt =  St + Tt * Ct * Rt

        

        在预测时间范围内,无突然变动且随机变动方差较小,并且有理由认为过去和现在的演变趋势将继续发展到未来,可使用一些经验方法进行预测:

    1.1  移动平均法

               

                      

            

        最近N期序列的平均值作为未来各期的预测结果。当历史序列的基本趋势变化较大且随机变动较多时,N取值应该大一点。在有确定的季节变动时,移动平均的项数应该取周期长度。最佳N值就是比较多模型的预测误差,选取最小的一个。

            

    1.2 指数平滑法

        一次移动平均是对最近N期数据都加权为1/N,N期以前的权重都为0。二次及更高的移动平均的权重不是1/N,次数越高权重越复杂,但是权重是对称的,两端权重小,中间权重大,不符合一般系统的动态性。

        一般历史数据对未来值的影响是按时间增长而降低的,更切合实际的方法是对观测值按时间的顺序进行加权平均作为预测值。

            

             

        alpha的取值一般在0.1 -- 0.3。alpha值越大,加权系数衰减的越快,所以alpha的大小起到了控制参数计算的历史数据的个数的作用。

       1、 如果序列平稳,预测误差由随机误差造成,这时alpha取值应该小一点,减少修正幅度,让模型能包含更多的历史信息

       2、 如果预测目标趋势发生系统的变化,此时alpha应取值大一点。

     

    2. 平稳时间序列模型

        平稳: 宽平稳,序列的统计特性不随时间的平移而变化,既均值和协方差不随时间的平移而变化。

         自回归模型(auto regressive model)AR模型,移动平均模型(moving average model) MA模型, 自回归移动平均模型(auto regressive moving average model)ARMA模型。

        (1). 一般自回归模型 AR (n)

        

          

        (2).  移动平均模型MA(m)

        

        (3). 自回归移动平均模型

        

        对于平稳系统来说,AR, MA, ARMA(n,m)模型都是ARMA(n,n-1)模型的特例。

    3. ARMA模型的特性

        时间序列中的时域分析中,线性差分方程是极为有效的工具。任何一个ARMA模型都是一个线性差分方程。

    3.1 AR(1)系统的格林函数

       格林函数就是描述系统记忆扰动程度的函数

        

         

        

        

    3.2 ARMA(2,1)系统的格林函数

        

    原文链接: https://wenku.baidu.com/view/2a68228c01f69e3142329468.html?tdsourcetag=s_pctim_aiomsg&qq-pf-to=pcqq.c2c

    展开全文
  • 时间序列分析领域,一种常见的分析方法叫做时间序列的分解(Decomposition of Time Series),它把时间序列 分成几个部分,分别是季节项 ,趋势项 ,剩余项 。也就是说对所有的 ,都 yt=St+Tt+Rty_{t}=S_{t}+...

    1.思想

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

    yt=St+Tt+Rt y_{t}=S_{t}+T_{t}+R_{t}

    除了加法的形式,还有乘法的形式,也就是:

    yt=St×Tt×Rt y_{t}=S_{t} \times T_{t} \times R_{t}

    一般来说,在实际生活和生产环节中,除了季节项,趋势项,剩余项之外,通常还有节假日的效应。所以,在 prophet 算法里面,作者同时考虑了以上四项,也就是:

    y(t)=g(t)+s(t)+h(t)+ϵt y(t)=g(t)+s(t)+h(t)+\epsilon_{t}

    其中 g(t)g(t)表示趋势项,它表示时间序列在非周期上面的变化趋势;
    s(t)s(t)表示周期项,或者称为季节项,一般来说是以周或者年为单位;
    h(t)h(t)表示节假日项,表示在当天是否存在节假日;
    ϵ(t)\epsilon(t)表示误差项或者称为剩余项。
    Prophet 算法就是通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。

    趋势项模型 g(t)g(t)
    在 Prophet 算法里面,趋势项有两个重要的函数,一个是基于逻辑回归函数(logistic function)的,另一个是基于分段线性函数(piecewise linear function)的。

    f(x)=C/(1+ek(xm)) f(x)=C /\left(1+e^{-k(x-m)}\right)

    所以,分段的逻辑回归增长模型就是:

    g(t)=C(t)1+exp((k+a(t)tδ)(t(m+a(t)Tγ) g(t)=\frac{C(t)}{1+\exp \left(-\left(k+\boldsymbol{a}(t)^{t} \boldsymbol{\delta}\right) \cdot\left(t-\left(m+\boldsymbol{a}(t)^{T} \boldsymbol{\gamma}\right)\right.\right.}

    基于分段线性函数的趋势项是怎么做的。众所周知,线性函数指的是y=kx+by=k x+b, 而分段线性函数指的是在每一个子区间上,函数都是线性函数,但是在整段区间上,函数并不完全是线性的。正如下图所示,分段线性函数就是一个折线的形状。

    因此,基于分段线性函数的模型形如:

    g(t)=(k+a(t)δ)t+(m+a(t)Tγ) g(t)=(k+\boldsymbol{a}(t) \boldsymbol{\delta}) \cdot t+\left(m+\boldsymbol{a}(t)^{T} \boldsymbol{\gamma}\right)

    在这里插入图片描述

    季节性趋势
    时间序列通常会随着天,周,月,年等季节性的变化而呈现季节性的变化,也称为周期性的变化。对于周期函数而言,大家能够马上联想到的就是正弦余弦函数。而在数学分析中,区间内的周期性函数是可以通过正弦和余弦的函数来表示的:

    在论文中,作者使用傅立叶级数来模拟时间序列的周期性。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    时间序列的季节项就是:
    在这里插入图片描述
    在这里插入图片描述

    节假日效应(holidays and events)
    同时需要一个参数来表示节假日的影响范围。假设我们有L 个节假日,那么
    在这里插入图片描述
    Prophet 中可以设置的参数
    在 Prophet 中,用户一般可以设置以下四种参数:

    Capacity:在增量函数是逻辑回归函数的时候,需要设置的容量值。
    Change Points:可以通过 n_changepoints 和 changepoint_range 来进行等距的变点设置,也可以通过人工设置的方式来指定时间序列的变点。
    季节性和节假日:可以根据实际的业务需求来指定相应的节假日。
    光滑参数:τ=\tau= changepoint prior scale可以用来控制趋势的灵活度,σ=\sigma=seasonality_prior_scale 用来控制季节项的灵活度, v=v= holidays prior scale 用来控制节假日的灵活度。

    2、实践

    初始化模型:m = Prophet()
    拟合模型:m.fit(df)
    计算预测值:periods 表示需要预测的点数,freq 表示时间序列的频率。
    future = m.make_future_dataframe(periods=30, freq='min')
    future.tail()
    forecast = m.predict(future)
    
    画出预测图:
    m.plot(forecast)
    画出时间序列的分量:
    m.plot_components(forecast)
    

    参考:

    1. Forecasting at Scale;
    2. github prophet;
    3. FACEBOOK 时间序列预测算法 PROPHET 的研究;
    4. zhihu Prophet;
    展开全文
  • 其实,基于时间序列的预测的方法在金融分析中是非常常见的。监督算法是通过训练集找到特征与因变量之间的关系,然后将测试集中的输入特征带入已经训练好的模型中,得到输出结果。时间序列与监督学习最大的不同,时间...
  • 异常检测3——常见方法分类基于统计学极值分析对数据分布进行假设基于线性分析基于时空空间关系造成异常时间序列异常基于相似性分析建立在距离度量上异常检测建立在密度分析异常检测基于聚类异常检测...
  • 常见的预测模型及算法

    千次阅读 2020-05-01 13:22:18
    如果得到一份数据集,任务是要预测出一系列值,而在预测任务中,我们大多数都采用是拟合的方法,这篇文字主要介绍三种预测方法时间序列分析,灰色预测模型,神经网络。 时间序列分析 时间序列也叫动态序列,数据...
  • 然而,使用闭眼休息状态数据来评估微状态参数的时间动态的常见做法可能会导致与警觉性相关的系统性混淆。研究人员研究了两个独立数据集中的微状态参数的动态变化,结果表明,微状态参数与通过脑电功率分析和fMRI全局...
  • 2016-2017年某市场的夹克销量SPSS的预测模型集合了多种预测建模方法,使用专家建模器,SPSS会从中自动挑选最优的时间序列模型。通过SPSS预测2018年的销售情况。详细步骤:准备数据按时间先后顺序排列好数据,年月...
  • 这一章在简要提到处理大数据集的额外资源的同时,它也道出了一系列常见的分析任务(人们期望分析师对任何数据都要进行的操作),以帮助一些人更好地过渡到R。, 第5章:探索数据:数据可视化中新崛起的业务。这一章...
  • 游戏数据分析小总结

    2020-09-09 09:35:51
    常用的分析方法有对比分析法、分组分析法、结构分析法、交叉分析法、漏斗图分析法、矩阵分析法、综合评价分析法、5W1H分析法、相关分析法、回归分析法、聚类分析法、判别分析法、主成分分析法、因子分析法、时间序列...
  • 了解针对时间序列数据的分析方法 实战部分 完成数据探索与分析代码 一、探索性数据分析思想与流程 探索性数据分析(Exploratory Data Analysis,EDA)是指对已数据在尽量少先验假设下通过作图、制表、方程...
  • 常见算法思想——穷举算法简单介绍详细介绍算法思路算法特点算法优化实例演示题目描述题目...  在数学和计算机科学理论中,一个集穷举是列出某些序列所有成员程序,或者是一种特定类型对象计数。这两种
  • 时间序列预测 小波分析预测 神经网络预测 混沌序列预测 向量自回归 联立方程组 相空间重构 局部线性加权法 2.评价与决策 模糊综合评判 主成分综合评价 层次分析法(AHP) 数据包络(DEA)分析 秩和比综合评价法 ...
  • 这类型的数据大多数为时间序列,而时间序列分析在日常中也是很常见的。现在我们先来聊一下R语言中关于日期时间的处理,之后时间的话就学习一些有关时间序列分析方法。一、日期函数as.Date()函数R中自带的函数as....
  • 1.pandas中频率是由一个基础频率和一个乘数组成。基础频率通常以一个字符别名表示。 2.移动(超前和超后)数据。...4.在移动窗口(可以带指数衰减权数)上计算各种统计函数也是一类常见时间序列的数组变

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 166
精华内容 66
关键字:

常见的时间序列分析方法有