精华内容
下载资源
问答
  • 常用时序预测模型的R实现 二

    千次阅读 2018-05-01 18:10:16
    类似的,实现预测模型,第一步则是了解常用的数据预处理方法以求能让模型跑起来,学会判断模型好坏以保证预测结果是靠谱可用的。具体怎样优化模型不在这个系列里详谈。数据预处理在Python的世界里,Pandas就自带很...

    准备知识

    这个系列偏重实践。要学飞行,第一步是了解飞行前做什么准备以及什么状态的飞机可以放心上去飞,想造飞机了再去了解发动机怎么工作气动外形有何影响。类似的,实现预测模型,第一步则是了解常用的数据预处理方法以求能让模型跑起来,学会判断模型好坏以保证预测结果是靠谱可用的。具体怎样优化模型不在这个系列里详谈。

    数据预处理

    在Python的世界里,Pandas就自带很方便的时间戳转换, resample, slicing之类,基本是标准化的数据处理库。在R里有所不同,常用的时间序列类有ts, zoo, xts,还有一大堆不同的时间格式。xts是zoo的subclass所以能做zoo的一切,两者基本结构都是带时间戳的矩阵,而且基本能接受任何格式的时间戳。ts仅接受时间轴上均匀分布的点,而且需要指定起点时间和周期长度,而zoo和xts能接受不均匀的分布。xts在这个系列里仅用于把不那么好预处理的数据转为ts格式,不作详细讨论。以下是ts最关键的初始化代码:

    ts(1:10, frequency = 7, start = c(12, 2))

    这行意思是什么呢?1:10是数据序列,frequency是指定这个数据序列的周期是7(每个周期里有7个值),start里接受的两个参数,第一个数12是说这个序列的初始周期序号为12,第二个数2是说这个序列的第一个值是周期中的第2个值。打印出来是什么情况呢?

    > print( ts(1:10, frequency = 7, start = c(12, 2)), calendar = TRUE)
       p1 p2 p3 p4 p5 p6 p7
    12     1  2  3  4  5  6
    13  7  8  9 10

    这里用了calendar模式以突出序列的第一个值是周期中的第二位。再看个更贴近生活的例子:

    x <- ts(Weekly,start=c(2010,48),frequency=52)

    Weekly这个序列里存着销售数据,是从2010年的第四十八周开始记录的,记录频率是每周一次,也即这一列中的每一行都是一周的销售量。为何要用ts这个类?因为autoplot, forecast等类都以它作为输入格式。比如可以用刚才的x得到时序图:

    autoplot(x)

    注意观察时序图中曲线是不是从2010年的最后一个月开始的?销量的确直到2011年才开始为正值,但序列却已经开始了。类似的无脑方法还有很多,比如按不同周期标注不同颜色从而可以在同一个周期长度上比较不同周期观测值的:

    ggseasonplot(x) #这里放个彩蛋,这个函数可以加一个参数 polar = TRUE,看看变多帅了?对于周期长的序列尤其好用


    还有观察周期中每个时位数值变化范围的

    ggsubseriesplot(x)

    如果需要slice到特定时间域怎么办呢?有个window函数很好使:

    > x_sub = window(x, start=2017)
    > autoplot(x_sub)

    怎样判断到底是否存在季节性

    时序数据有季节性的很多,像电力消耗,降雨量,气温。有时候甚至存在周期套周期的情况,术语叫multiseasonal。比如零售业销售数据,不同季节因为气温、节假日体现出周而复始年年相似的模式,但这个大的周期里,每个礼拜又因为工作日和周末的关系存在周期性,而小到每一天,又由于作息导致存在24小时的周期律。

    有些时序数据中周期性却不那么显著。比如股票。比如Apple,每年发布新款的时间是固定的,那段时间大概要涨一涨,但谁也不知道下一个新款是不是依然那么受欢迎?又或者不巧碰倒金融危机?很多外部噪声可以破坏掉内生的规律。好在有一种专用的图表就是用来检视周期性的,叫ACF,Auto Correlation Function。它的原理是拿当下的时间序列和lag N的序列做比较,看相关系数为多少,N=1的时候就是和往前移一个时位形成的序列比,N=2和往前移两位比,如此递推。

    lagged<-lag(x_sub,-5)

    lag函数可以用于取得lag后的序列,注意第二个参数是往前推的相位,如果为负值就成了往后推了


    有了ACF函数,就不需要自己一个个相位去做比较,它全部一锤子买卖搞定:

    > ggAcf(x_sub)

    大于0.5就是比较强的correlation了,算比较显著的周期性。注意不要和Acf函数混淆,Acf是从lag=0开始的,也就是自己和自己比,那correlation当然是1了,会导致整个图的scale变得头重脚轻。

    还有值得一提的一个函数是ggPacf,也就是auto correlation function前面加了个partial。这个函数考虑到了不同的lag值可能被共同的变量影响了。比如4周的周期必然导致8周、12周也都显著。排除掉这个因素,绘制pacf会得到如下结果

    > ggPacf(x_sub)

    残值和白噪声

    残值即residual,是预测值和实际值之间的差别。在判断一个模型好坏时,一个标准是残值是否为白噪声,也就是说不再含有任何可以被模型学到的信息(趋势,周期性)。怎样的残值是白噪呢?如果它是个均值为零的随机正态分布就基本可以判断是白噪。均值不为零其实关系也不大,只要把预测值shift一下就好了。在Python里这些都要自己写,但在R里又有个强大的函数把这事情干了,

    > fit <- auto.arima(x_sub)
    > checkresiduals(fit)
    
    	Ljung-Box test
    
    data:  Residuals from ARIMA(0,1,1)(0,0,1)[52]
    Q* = 112.62, df = 102, p-value = 0.222
    
    Model df: 2.   Total lags used: 104

    auto.arima是在建立预测模型,具体怎么干的下一篇再讲。运行结果既包括那个Ljung-Box test又包括如下图表:


    图表显示的,正是白噪声。而Ljung-Box test里最重要的一项结果就是p-value=0.222,它代表的也即是残值确实为白噪(p<0.05则说明非白噪了)

    以上为准备知识。下一篇开始正式介绍预测模型。

    上一篇 常用时序预测模型之背景            下一篇 常用时序预测模型之ETS


    展开全文
  • 常用时序预测模型的R实现 一

    千次阅读 2018-05-01 09:41:46
    一开始接触预测模型算法是因为公司澳洲分发中心人员开支超预算了。大致是这么个情况柱状图显示是每天发出去订单量,蓝色是两班倒日子,红色是周末上班日子,绿色是普通shift。澳洲物流小哥每个小时...

    预测模型本身会比较干巴,所以尽量多用些现实应用实例。

    一开始接触预测模型算法是因为公司澳洲分发中心的人员开支超预算了。大致是这么个情况


    柱状图显示的是每天发出去的订单量,蓝色是两班倒的日子,红色是周末上班的日子,绿色是普通的shift。澳洲的物流小哥每个小时正常薪资在35-50间(软妹币175到250),周末双倍,第二个shift(两班倒)则每小时加15%。具体超支多少是商业机密这儿不方便说,总之已经超到管理层肉疼了。噢对了,两班倒用的不是同一批雇员,所以另外还有一笔training cost,每个人35块一小时,要培训一周。

    这张图其实已经充分说明了问题出在哪里。蓝色的柱子,高度不是应该差不多是绿色的两倍么?两班倒啊。可是并没有,事实上,histogram告诉我们,有相当一部分两班倒的日子其实完全可以用normal shift替代。


    虽然mask掉了具体单量,但两张图的x轴是在同一个scale上的。大约一半的double shift其实并不必要。

    经过和supply chain的director坦率而友好的交流,意识到问题的根本。物流中心是基于订单量安排人手的,而订单量的预测传统上依赖finance部门。金融会计部门的同事是怎么干的呢?拿去年的订单数据来,按照今年预期的growth,统统乘以同一个比率就得了。这么简单粗暴的方式能够用那么多年,自然有其合理性。零售业销售数据是典型的additive time series,有强烈的seasonality。每年的假期基本上差不多是同一个时段,外部变量曾经也是稳定的。你跟我说你要搞啥exponential smoothing? autoregressive integrated moving average? 犯得着吗,还不见得比我去年照搬过来的模式准呢。

    可是这两年,circumstances还真的变了。Amazon入侵,顾客群体年轻化,销售渠道网络化,澳洲的零售商们日子越来越难过,怎么办?折扣不断,降价不断,天天降价,欲购从速哇。好端端的seasonality就变成了一个promotion-driven的dynamic regression模型。简而言之,经济不景气的大趋势要考虑到,季节性要考虑到,而最关键的,外部变量复杂了。网站更新版本会带来流量增加,添加新型支付选项会提高转化率,还有SEM,social media marketing,EDM。。。突然冒出一大堆新的变量,每个变量还有自己的内部小模型,比如更高营销支出带来的是diminishing returns而绝非线性回归,这可不是finance的那些同事能用Excel搞定的!

    再说说预测的周期。之前简略提到过,两班倒的话,并不是能够立即找到第二班的雇员来顶上去的,还有个一周左右的培训周期。面临订单高峰无法及时处置的情况,物流中心也并非只有加班这个选项。还可以加packing benches来永久性的提高单位时间的订单处理能力 -- 当然,这又有个lead time,需要数周之久,因为需要安装相应的硬件设施,购买软件许可。所以预测周期一般而言需要在两周内有比较高的精度,在三四周内有indicative的准确性。

    以上是问题的大背景。

    下一篇 常用时序预测模型的准备知识

    展开全文
  • 常用时序预测模型的R实现 四

    千次阅读 2018-05-02 17:13:31
    简介这篇讲ARIMA。前一篇谈到ETS灵感来自于两个极端方案折中,一个极端是只用最近一次观测,一个是求...其二,只依赖近期数据又容易被outlier带偏,所以还是需要用历史数据点来修正预测。ARIMA理论体系虽...

    简介

    这篇讲ARIMA。前一篇谈到ETS的灵感来自于两个极端方案的折中,一个极端是只用最近的一次观测,一个是求平均,折中方案是用指数衰减来用到所有点,同时又给近期观测更高的权重。换个角度看,这两个极端反映的其实是两个朴素的观念。其一,近期的数据由于recency的关系,对揭示未来也许更有帮助。其二,只依赖近期的数据又容易被outlier带偏,所以还是需要用历史数据点来修正预测。ARIMA的理论体系虽然和ETS完全不同,出发点却很相似。

    ARIMA的全称是Autoregressive Integrated Moving Average。拆开来看,Autoregressive是个自动回归模型,通常仅用p个近期观测值而不是所有观测点,否则作参数估计会是个噩梦。AR这一块,和ETS中指数权重异曲同工,只是不那么精致美用上所有点而已。Integrated比较好理解,假如存在趋势之类,自动回归不足以捕捉到,而需要做差分。

    Moving Average可能是最难理解的部分。首先它很容易和移动平均混淆,但这里完全是另一个概念。这里的moving average是一个q阶的自动回归模型,只是回归的对象是预测误差而非实际观测值。那么既然已经有了autoregressive model (AR),为何还需要MA?这个需要用实例来理解。有个叫Dimitriy V. Masterov的好人给了个很好的例子。在美帝(以及天朝)很多市场营销活动会发出去很多优惠券打折券啥的,这些外部噪声会影响到销售量。MA的自动回归就是用来对付这些外部噪声导致的预测偏差的。为什么不直接把这些噪声移出,而要用q阶回归模型来处理?因为咱家也不知道那些优惠券在某个时间点用掉了多少啊。优惠券的使用是有实效性的,有衰减并且会在有效期内衰减到0。这本身是个时序序列,故而需要另一个针对预测偏差的自动回归模型来模拟。在看到这个例子之前我想了三天都没想明白MA的必要性,所以看到这里的大兄弟大妹子,我很可能让你们的绳命少了三天的煎熬,请遥祝我健康。

    Box-Cox变换

    如果存在振幅变化怎么办呢?这时候需要variance stablization,往往用Box-cox Transformation来处理。在数学的世界里总是有那么些佛系的武器,比如Fourier函数,又比如Box-Cox变换。前者可以拟合天下任意函数,后者则能撸平一切浮华。

    比如,这几行代码构造了一个振幅有变化的体态婀娜且积极向上的时序:

    > a = c(10,20,30,40,50,60,70,80)
    > b = c(-1,2,-3,4,-5,6,-7,8)^3
    > c = a+b
    > c_ts = ts(c,start=c(1,1))
    > autoplot(c_ts)


    上Box-Cox,拈指一算:

    > BoxCox.lambda(c_ts)
    [1] 4.102259e-05

    把这个lambda值代入变换函数:

    > autoplot(BoxCox(c_ts,4.102259e-5))

    是不是撸平了?

    怎么做到的?

    祖师爷Hyndman有个很好的总结:


    就靠这俩函数,不同的lambda值,撸到不服不行。

    ARIMA在非季节性数据上的应用

    ARIMA在季节性数据上的应用

    ARIMA和Dynamic Regression





    如果存在振幅变化怎么办呢?这时候需要variance stablization,往往用Box-cox Transformation来处理。比如
    展开全文
  • 关于时序模型预测的问题最近在做一个小样本的时间序列数据分析...但是我试过adjust并不能实现,而时序模型中更常用的是fcast估计结果,可是fcast不能加if条件语句限制,那么该如何在X2、X3不变情况下,X1调整为原来...
    2c38c355c71a75f723b2f0f66515aaec.png4e0370a5d536b617658595e77cd5f24e.png

    关于时序模型预测的问题

    最近在做一个小样本的时间序列数据分析,是一个有60个观测值的月度数据,Y是一阶单整平稳的,X1、X2、X3为影响它的自变量,构建VAR模型后,想预测未来某期的Y值,我知道一般会用adjust来进行调整预测,但是我试过adjust并不能实现,而时序模型中更常用的是fcast估计结果,可是fcast不能加if条件语句限制,那么该如何在X2、X3不变情况下,X1调整为原来的2倍后再预测未来某期的Y值。具体语句该如何写?谢谢各位老师!

    0da9f0f0ca7f6dfd028f7854b3f39638.png

    可以先生产新的变量X4=2*X1, 然后将X4 X2和X3作为自变量,构建VAR模型。再使用fcast命令预测。

    往期回顾:

    互助问答第286期:关于虚拟变量DID的问题

    如果您在计量学习和实证研究中遇到问题,请及时发到邮箱szlw58@126.com,专业委员会有30多名编辑都会看,您的问题会得到及时关注!请您将问题描述清楚,任何有助于把问题描述清楚的细节都能使我们更方便地回答您的问题,提问细则参见:实证研究互助平台最新通知(点击文末阅读原文查看详情)

    鲜活的事例更有助于提高您的研究水平,呆板的教科书让人生厌。如果您喜欢,请提出您的问题,也请转发推广!

    (欢迎转发,欢迎分享转载请注明出处引用和合作请留言。本文作者拥有所有版权,原创文章最早发表于“学术苑”任何侵权行为将面临追责!)

    学术指导:张晓峒老师 Ben Lambert

    本期解答人:任婉婉老师

    编辑:杨志媛

    统筹:李丹丹

    技术:刘子瑗

    ce2d3a16aebb950eeabc9ad480d7c9aa.png

    全文完,感谢您的耐心阅读

    请顺手点个“在看”吧~

    展开全文
  • 关于时序模型预测的问题最近在做一个小样本的时间序列...但是我试过adjust并不能实现,而时序模型中更常用的是fcast估计结果,可是fcast不能加if条件语句限制,那么该如何在X2、X3不变情况下,X1调整为原来的2倍后再...
  • 基于该方法,首先利用矩阵分解提取原始时序数据特征,然后通过时序模型挖掘特征趋势,最后根据预测的特征得到预测结果并进行推荐。实验结果表明,所提出算法与已有推荐算法相比,在均方根误差(root mean ...
  • 在上一篇文章中,我们简略介绍了与时间序列相关的应用,这次我们聚焦于时间序列的预测,讲讲与之相关的那些事。...时间序列里比较常用的是 MAPE(mean absolute percentage error) 和 RMSE (roo...
  • 在上一篇文章中,我们简略介绍了与时间序列相关的应用,这次我们聚焦于时间序列的预测,讲讲与之相关的那些事。...时间序列里比较常用的是 MAPE(mean absolute percentage error) 和 RMSE (root ...
  • 笔者三年多从业经历里面积累很多关于时序数据建模预测的经验,因为工作性质原因,接触到较多数据类型均为时序数据,在处理这种类型数据时候会较多使用到回归模型、RNN或者是LSTM模型,所以本文主要基于...
  • 第23章 Elman神经网络数据预测----电力负荷预测模型研究 第24章 概率神经网络分类预测--基于PNN变压器故障诊断 第25章 基于MIV神经网络变量筛选----基于BP神经网络变量筛选 第26章 LVQ神经网络分类——...
  • 目前,常用的时间序列模型有自回归模型(Auto Regressive Model,简称 AR 模型),移动平均模型(Moving Average Model,简称 MA 模型),自回归移动平均模型(Auto Regressive Moving Average Model,...
  • LSTM(long short term memory,长短期记忆网络)是预测时间序列最常用的神经网络模型之一。但是这种神经网络模型相当复杂,需要特定的结构、数据前期处理等操作。当在网上搜寻要学习的代码时,很难将另一个程序员的...
  • 模型训练与验证 训练及预测流程 数据集的划分 无时序的数据集:简单划分、交叉验证划分 有时序的数据集:需考虑时序,nested交叉验证划分 ...模型选择 ...常用的回归模型 线性回归 Y=β0+β1X1
  • 时间序列---常用模型

    2019-09-27 07:28:52
    拟合,预测未来节点(或走势分析):  常规序列建模方法:AR、MA、ARMA、ARIMA  回归拟合  Neural Networks ...不同时序对应状态分析,即序列标注问题:HMM、CRF、RecurrentNNs ...
  • 由于业务需求,需要对未来一段时间做销量预测,这在过去可能有点玄学味道,然而在当今大数据时代,数据科学家们早已将这类问题归类为基于时间序列预测,也同时产生了各种时序预测的算法模型,诸如ARMA/ARIMA...
  • ARIMA模型ARIMA模型的全称是自回归移动平均模型,是用来预测时间序列的一种常用的统计模型,一般记作ARIMA(p,d,q)。ARIMA的适应情况ARIMA模型相对来说比较简单易用。在应用ARIMA模型时,要保证以下几点:时间序列...
  • ARIMA模型ARIMA模型的全称是自回归移动平均模型,是用来预测时间序列的一种常用的统计模型,一般记作ARIMA(p,d,q)。ARIMA的适应情况ARIMA模型相对来说比较简单易用。在应用ARIMA模型时,要保证以下几点:时间序列...
  • ARIMA模型的全称是自回归移动平均模型,是用来预测时间序列的一种常用的统计模型,一般记作ARIMA(p,d,q)。 ARIMA的适应情况 ARIMA模型相对来说比较简单易用。在应用ARIMA模型时,要保证以下几点: 时间序列数据是...
  • LSTM(long short term memory,长短期记忆网络)是预测时间序列最常用的神经网络模型之一。但是这种神经网络模型相当复杂,需要特定的结构、数据前期处理等操作。 当在网上搜寻要学习的代码时,很难将另一个程序员...
  • 建模预测(一)一、模型训练与验证**tips**:1.1 常用的回归模型1.1.1 线性回归1.1.2 逻辑回归1.1.3 决策树1.1.4 随机森林1.1.5 梯度提升树 引言 这次我们要开始数据建模预测了。 我们先从模型训练与验证开始。 ...
  • LSTM(long short term memory,长短期记忆网络)是预测时间序列最常用的神经网络模型之一。但是这种神经网络模型相当复杂,需要特定的结构、数据前期处理等操作。当在网上搜寻要学习的代码时,很难将另一个程序员的...
  • 1 模型训练、预测及线下验证 数据划分: 训练集、线下验证集、线下测试集、线上测试集 无时序的数据集:简单划分、交叉验证划分...2 常用的回归模型 模型参数的设置 不建议将精力放在调参;黔驴技穷时再调参
  • 文章目录时间序列预测算法总结前言一、基于统计的时序数据建模方法1.1传统时序数据建模方法1.1.1周期因子法1.1.2移动平均法1.1.3ARIMA模型1.1.3.1模型原理1.平稳性要求2.AR模型3.MA模型4.ARMA模型5.ARIMA模型1.1.3.2...
  • 时间序列预测:I概述

    2021-01-26 23:41:27
    常用的模型,以下基本可以涵盖主流思想: 传统时序模型:ARIMA,Prophet,EMD 构造时序特征的统计学习方法:LR,GBDT(xgboost\lightgbm) 深度学习方法:seq2seq,wavenet,transormer 企业研究 来自工业届的研究...
  • 数据挖掘建模(1)分类与预测

    千次阅读 2018-07-01 20:01:19
    经过数据探索和数据预处理, 得到了可以直接建模的数据。 根据挖掘目标, 和数据形式可以建立分类与预测、聚类...常用的分类与预测算法: 可参考:  逻辑回归(Logistic Regression)分类算法  决策树(De...
  • 掌握机器学习常用模型 利用工具对资金流入流出数据进行训练、验证及预测 1. 模型训练与验证 1.1 模型训练、预测及线下验证 • 数据该如何划分? • 训练集、线下验证集、线下测试集、线上测试集 • 无时序的数据集...
  • 指数模型是用来预测时序未来值常用模型。这类模型相对比较简单,但是实践证明它们短期预测能力较好。不同指数模型建模时选用因子可能不同。比如 单指数模型(simple/single exponential model)拟合是...
  • LSTM(long short term memory,长短期记忆网络)是预测时间序列最常用的神经网络模型之一。但是这种神经网络模型相当复杂,需要特定的结构、数据前期处理等操作。当在网上搜寻要学习的代码时,很难将另一个程序员的...
  • 数据挖掘实践(资金流入流出预测)—8.总结 写在最后 按照计划,至少会有第七步:模型的实战,后续补上。...掌握常用的回归模型,熟悉模型融合方法 利用相关方法和工具完成资金流入流出预测赛题任务 ...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

常用的时序预测模型