用ARIMA模型做需求预测

时间序列预测 — — ARIMA模型(理论分析与代码详解) ARIMA模型的全称为:差分整合移动平均自回归模型是一种数据类型,它记录了在连续时间点上观测到的数值。这些数值可以是任何可以量化的度量,比如经济指标、股票价格、温度、销售额等。是一种按照时间顺序排列的数据集,其中每个数据点都与一个特定的时间点相关联。这种数据类型通常用于记录和分析随时间变化的数值信息。时间序列根据时间和数值的性质不同,可以分为和。性质:时期序列可加,时点序列不可加。 阅读详情

本文结构:

  • 时间序列分析?
  • 什么是ARIMA?
  • ARIMA数学模型?
  • input,output 是什么?
  • 怎么用?-代码实例
  • 常见问题?

时间序列分析?

时间序列,就是按时间顺序排列的,随时间变化的数据序列。
生活中各领域各行业太多时间序列的数据了,销售额,顾客数,访问量,股价,油价,GDP,气温。。。

随机过程的特征有均值、方差、协方差等。
如果随机过程的特征随着时间变化,则此过程是非平稳的;相反,如果随机过程的特征不随时间而变化,就称此过程是平稳的。
下图所示,左边非稳定,右边稳定。

 

非平稳时间序列分析时,若导致非平稳的原因是确定的,可以用的方法主要有趋势拟合模型、季节调整模型、移动平均、指数平滑等方法。
若导致非平稳的原因是随机的,方法主要有ARIMA(autoregressive integrated moving average)及自回归条件异方差模型等。


什么是ARIMA?

ARIMA (Auto Regressive Integrated Moving Average) 可以用来对时间序列进行预测,常被用于需求预测和规划中。

可以用来对付 ‘随机过程的特征随着时间变化而非固定’ 且 ‘导致时间序列非平稳的原因是随机而非确定’ 的问题。不过,如果是从一个非平稳的时间序列开始, 首先需要做差分,直到得到一个平稳的序列。

模型的思想就是从历史的数据中学习到随时间变化的模式,学到了就用这个规律去预测未来。

ARIMA(p,d,q)模型,其中 d 是差分的阶数,用来得到平稳序列。

AR是自回归, p为相应的自回归项。

MA为移动平均,q为相应的移动平均项数。


ARIMA数学模型?

ARIMA(p,d,q)模型是ARMA(p,q)模型的扩展。

ARIMA(p,d,q)模型可以表示为:

 

 

其中L 是滞后算子(Lag operator),d in Z, d>0。

AR:
当前值只是过去值的加权求和。

 

MA:
过去的白噪音的移动平均。

 

ARMA:
AR和MA的综合。

 

ARIMA:
和ARMA的区别,就是公式左边的x变成差分算子,保证数据的稳定性。

 

差分算子就是:

 

令 wt 为:

 

则 ARIMA 就可以写成:

 


input,output 是什么?

输入历史数据,预测未来时间点的数据。


怎么用?-代码实例

本文参考了:时间序列实例
另外推荐大家看这篇,36大数据上有一个python版讲的不错,里面对稳定性的定量检验的讲解比较详细:时间序列预测全攻略-附带Python代码

ARIMA模型运用的基本流程有几下几步:

  1. 数据可视化,识别平稳性。
  2. 对非平稳的时间序列数据,做差分,得到平稳序列。
  3. 建立合适的模型。
    平稳化处理后,若偏自相关函数是截尾的,而自相关函数是拖尾的,则建立AR模型;
    若偏自相关函数是拖尾的,而自相关函数是截尾的,则建立MA模型;
    若偏自相关函数和自相关函数均是拖尾的,则序列适合ARMA模型。
  4. 模型的阶数在确定之后,对ARMA模型进行参数估计,比较常用是最小二乘法进行参数估计。
  5. 假设检验,判断(诊断)残差序列是否为白噪声序列。
  6. 利用已通过检验的模型进行预测。

使用ARIMA模型对裙子长度预测

1、加载数据

skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat", skip=5)
str(skirts)
head(skirts)
boxplot(skirts)
length(skirts)

2、把数据转化为是时间序列

skirts_ts <- ts(skirts, start=c(1886), frequency=1)

1)查看时间序列对应的时间

skirts_ts 

2)画出时间序列图

plot.ts(skirts_ts)

从图可知:女人裙子边缘的直径做成的时间序列数据,从 1866 年到 1911 年在平均值上是不平稳的

3、做差分得到平稳序列

1)做时间序列的一阶差分

skirts_diff <- diff(skirts_ts, differences = 1)
plot.ts(skirts_diff)

从一阶差分的图中可以看出,数据仍是不平稳的,继续差分

2)做时间序列的二阶差分

skirts_diff2 <- diff(skirts_ts, differences = 2)
plot.ts(skirts_diff2)

二次差分后的时间序列在均值和方差上看起来是平稳了

4、找到合适的ARIMA模型

寻找 ARIMA(p,d,q)中合适的 p 值和 q

1)自相关图ACF

acf(skirts_diff2, lag.max = 20)
acf(skirts_diff2, lag.max = 20, plot = F)

自相关图显示滞后1阶自相关值基本没有超过边界值,虽然5阶自相关值超出边界,那么很可能属于偶然出现的,而自相关值在其他上都没有超出显著边界, 而且我们可以期望 1 到 20 之间的会偶尔超出 95%的置信边界。 自相关图5阶后结尾

2)偏相关图PACF

pacf(skirts_diff2, lag.max = 20)
pacf(skirts_diff2, lag.max = 20, plot = F)

偏自相关值选1阶后结尾
故我们的ARMIA模型为armia(1,2,5

3)使用auto.arima()函数,自动获取最佳的ARIMA模型

library(forecast)
auto.arima(skirts_ts, ic=c("aicc", "aic", "bic"), trace = T)

Best model: ARIMA(1,2,0)

5、建立ARIMA模型:并对比arima(1, 2, 0)与arima(1, 2, 5)模型

1)arima(1, 2, 0)模型

(skirts_arima <- arima(skirts_ts, order = c(1, 2, 0)))

aic = 391.33

2)arima(1, 2, 5)模型

(skirts_arima <- arima(skirts_ts, order = c(1, 2, 5)))

aic = 381.6

AIC是赤池消息准则SC是施瓦茨准则,当两个数值最小时,则是最优滞后分布的长度。我们进行模型选择时,AIC值越小越好。所以arima(1, 2, 5)模型较好

6、预测:预测5年后裙子的边缘直径

(skirts_forecast <- forecast.Arima(skirts_arima, h=5, level = c(99.5)))
plot.forecast(skirts_forecast)

7、检验

观察 ARIMA 模型的预测误差是否是平均值为 0 且方差为常数的正态分布,同时也要观察连续预测误差是否自相关

1)检验预测误差的自相关性

tsdiag(skirts_arima)

下面第一个图表代表估计模型误差的绘图。图中竖线的长度比较相似,都处在稳定范围之内,即估计的模型没产生不符合要求的误差分布。

第二张绘图,显示估计的模型没造成误差之间的任何关系。这是符合数据生成时每个数据都是独立的这个前提的。由此可见,这ACF图符合检测要求。

第三张图,也就是Ljung-Box 指标。这个指标可对每一个时间序列的延迟进行显著性的评估。判定技巧是,P-value点的高度越高,我们的模型越可信。

acf(skirts_forecast$residuals, lag.max = 20)
Box.test(skirts_forecast$residuals, lag=20, type = "Ljung-Box")

p-value = 0.9871
相关图显示出在滞后1-20阶中样本自相关值都没有超出显著置信边界,而且Ljung-Box检验的p值为0.99,所以我们推断在滞后1-20阶(lags1-20)中没明显证据说明预测误差是非零自相关的。

Acf检验说明:残差没有明显的自相关性,Ljung-Box测试显示:所有的P-value>0.05,说明残差为白噪声。

2)判断预测误差是否是平均值为零且方差为常数的正态分布
做预测误差的时间曲线图和直方图(具有正态分布曲线)

预测误差的均值是否为0

plot.ts(skirts_forecast$residuals)

自定义判断预测误差的方差是正态分布的函数

plotForecastErrors <- function(forecasterrors){
  #画预测误差的直方图
  hist(forecasterrors, col="red", freq = F)
  #画方差是预测误差数据的方差,平均值是0的正态分布数据的线
  mysd <- sd(forecasterrors)
  mynorm <- rnorm(10000, mean = 0, sd = mysd)
  myhist <- hist(mynorm, plot = F)
  points(myhist$mids, myhist$density, type="l", col="blue", lwd=2)
}
plotForecastErrors(skirts_forecast$residuals)

下图显示时间序列的直方图显示预测误大致是正态分布的且平均值接近于0。因此,把预测误差看作平均值为0方差为服从零均值、方差不变的正态分布是合理的。

既然依次连续的预测误差看起来不是相关,而且服从零均值、方差不变的正态分布,那么对于裙子直径的数据,ARIMA(1,2,5)看起来是可以提供非常合适预测的模型。


常见问题?

1.ARIMA建模的步骤

 

  1. 观察数据是否是时间序列数据,是否有seasonal等因素。
  2. transform:Box-correlation,保证variance是uniform的。如果用box-cor还不能稳定,还要继续深入挖掘。
  3. ACF/PACF 是为了找到 MA 和 AR 的order。
  4. d=0-stationarity,1,2-non stationarity
  5. 白噪音check:确定这个模型是optimize的,mean=0,平方差=1.
  6. 误差是白噪音的时候,model就ok了,就可以预测了

     

2.决定ARIMA参数的方法

d是差分的阶数,几阶后就可以保证稳定:

 

modelfit,计算出来的参数是 1,1,1 ,但可能 2,1,1 预测效果更好,那就用后者。

 

或者用AIC比较俩模型。


推荐阅读:

这一篇实例也不错:python时间序列分析

AR和MA的定义,有图比较:

关于ACF,PACF可以看Duke的材料:

关于AIC,BIC:aic-bic-vs-crossvalidation

理论简介的不错:

需求预测与分仓规划:

一个课程:Time Series Forecasting Theory | AR, MA, ARMA, ARIMA



作者:不会停的蜗牛
链接:https://www.jianshu.com/p/f547bb4b50c3
 

时间序列分析——ARIMA模型预测(R) 读取数据(scan()scan()及read.csv()read.csv()等函数,row.namesrow.names参数可以用来指定索引列) 转换成时间序列(ts()ts()函数,注意frequencyfrequency参数取值设置: http://m.blog.youkuaiyun.com/blog/u014032673/41984147) 观察检验时间序列是否平滑,对不平滑的时间序列要进行差分(di 阅读详情

相关推荐

[Python][pmdarima] 季节性ARIMA模型学习

前段时间参与了一个快消行业需求预测的项目。其中,用到了移动平均法、ARIMA、Xgboost等方法进行预测,现在打算总结一下ARIMA。 因为项目的销售数据属于私密数据,这里用网上找的一份案例数据用于展示。

lam_yx的博客 1万+

时间序列预测之ARIMA模型

时序预测中的ARIMA模型

比尔凡凡的博客 1万+

ARIMA模型原理

一、时间序列分析 北京每年每个月旅客的人数,上海飞往北京每年的游客人数等类似这种顾客数、访问量、股价等都是时间序列数据。这些数据会随着时间变化而变化。时间序列数据的特点是数据会随时间的变化而变化。 随机过程的特征值有均值、方差、协方差等。如果随机过程的特征随时间变化而变化,那么数据是非平稳的,相反,如果随机过程的特征随时间变化而不变化,则此过程是平稳的。 如图所示: 非平稳时间序列分析...

weixin_30906185的博客 3152

ARIMA模型

前述 介绍ARIMA模型前,首先需要了解一下这几个模型 AR 自回归模型(Autoregressive) Xt=φ1Xt-1+…+φpXt-p+αt MA 移动平均模型(Moving Average) Xt = αt-θ1αt-1-…-θqαt-q ARMA(p,q) Xt=φ1Xt-1+…+φpXt-p+αt-θ1αt-1-…-θqαt-q 平稳性以及可逆性 想要ARMA...

weixin_42155128的博客 4056

时间序列 自回归差分移动平均模型 ARIMA

本文主要简单介绍了ARIMA的基本概念,优缺点,应用场景,建模时的注意事项,实现方法以及模型的参数等。

JasonH2021的博客 7091

SPSS时间序列分析和Tableau可视化——用ARIMA、ES、组合预测进行旅游需求预测

将(S)Naive方法、指数平滑法、SARIMA方法生成的预测值进行算数平均,生成组合预测值,并作图对比各种方法预测的结果。

weixin_69471669的博客 2955

【机器学习笔记之五】用ARIMA模型做需求预测用ARIMA模型做需求预测

本文结构: 时间序列分析? 什么是ARIMA? ARIMA数学模型? input,output 是什么? 怎么用?-代码实例 常见问题? 时间序列分析? 时间序列,就是按时间顺序排列的,随时间变化的数据序列。 生活中各领域各行业太多时间序列的数据了,销售额,顾客数,访问量,股价,油价,GDP,气温。。。 随机过程的特征有均值、方差、协方差等。 如果随机过程的特征随着时间变化,

bieguolaia的博客 9220

时间序列分析在珠宝类目商品需求预测中的应用

时间序列分析在珠宝类目商品需求预测中的应用 作者:禅与计算机程序设计艺术 1. 背景介绍 在电商行业,准确预测商品需求对于提升运营效率、优化库存管理、制定营销策略等都至关重要。其中,珠宝类目作为电商平台的重要收入来源之一,其需求预测一直是一个挑战性的问题。传统的基于

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 742

时间序列预测模型之一文讲透 ARIMA 模型

本文的目标将是进入到时间序列模型系列的终极目标,上手深度学习掌握 ARIMA 模型。本人将从ARIMA 模型基本概念、差分过程、ARIMA 模型应用三个章节来详细讲述 ARIMA 模型。希望你通过阅读此文,能够获得对 ARIMA 模型的深入理解,并能够在实际问题中正确使用这些模型。

fengshi_fengshi的专栏 1万+

时间序列分析在电商需求预测中的应用实践

时间序列分析在电商需求预测中的应用实践 作者:禅与计算机程序设计艺术 1. 背景介绍 电子商务行业一直是数据驱动的典型代表。作为电商企业的重要决策依据,需求预测在供应链管理、库存控制、营销策略等方方面面都发挥着关键作用。准确的需求预测不仅可以帮助企业更好地满足客户需求,

AI天才研究院 1111

ARIMA模型解析:时间序列预测与分析

ARIMA模型是一种常用的时间序列分析方法,能够很好地解决非平稳时间序列的预测和分析问题。通过自回归、差分和移动平均这三个关键组件的组合,ARIMA模型能够捕捉时间序列中的趋势和周期性。ARIMA(自回归积分移动平均)模型是一种常用的时间序列分析方法,它综合了自回归(AR)、差分(I)和移动平均(MA)这三种技术。ARIMA模型的记法为ARIMA(p, d, q),其中p表示自回归项的滞后阶数,d表示差分的次数,q表示移动平均项的滞后阶数。AR模型考虑了在时间序列中的滞后项对当前值的影响。

CodeWOW的博客 1206

机器学习项目--库存需求预测2--Arima模型

如图所示,ACF图和PACF图都可以看作拖尾,此时ACF和PACF图像无法帮助我们确定参数p和q的具体值,但能确认p和q一定都不为0。可以看出Arima算法的效果最好,Arima也有自己的局限性,例如预测时间较长的话,预测结果趋于一条直线。数据集划分,选取前731天数据作为训练集,其余全为测试集。训练数据来源于kaggle,读者可以去kagga下载。获取一个门店的数据进行Arima建模。通过网格搜索法定阶确定p值和q值。绘制PACF图,确定q值。绘制ACF图,确定p值。过滤掉销量为0的数据。

u014460433的博客 792

移远EC800M CAT1模块HTTP POST实战:从AT指令到数据上报的完整避坑指南

本文详细介绍了移远EC800M CAT1模块通过AT指令实现HTTP POST数据上报的完整开发流程,包括模块初始化、PDP上下文配置、HTTP POST实现及优化策略。针对实际开发中的常见问题如网络异常、低功耗需求等提供了经过验证的解决方案,帮助开发者快速实现稳定可靠的物联网数据传输功能。

weixin_42556197的博客 482
上一篇: python logging模块
下一篇: 判断字符串是否表示数值--牛客网
Poo_Chai
博客等级 码龄9年 178粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值