销售额预测分析报告
一、模型选择
预测是重要的统计技术,对于领导层进行科学决策具有不可替代的支撑作用。
常用的预测方法包括定性预测法、传统时间序列预测(如移动平均预测、指数平滑预测)、现代时间序列预测(如ARIMA模型)、灰色预测(GM)、线性回归预测、非线性曲线预测、马尔可夫预测等方法。
综合考量方法简捷性、科学性原则,我选择ARIMA模型预测、GM(1,1)模型预测两种方法进行预测,并将结果相互比对,权衡取舍,从而选择最佳的预测结果。
二ARIMA模型预测
(一)预测软件选择----R软件
ARIMA模型预测,可实现的软件较多,如SPSS、SAS、Eviews、R等。使用R软件建模预测的优点是:第一,R是世最强大、最有前景的软件,已经成为美国的主流。第二,R是免费软件。而SPSS、SAS、Eviews正版软件极为昂贵,盗版存在侵权问题,可以引起法律纠纷。第三、R软件可以将程序保存为一个程序文件,略加修改便可用于其它数据的建模预测,便于方法的推广。
(二)指标和数据
指标是销售量(x),样本区间是1964-20##年,保存文本文件data.txt中。
(三)预测的具体步骤
1、准备工作
(1)下载安装R软件
目前最新版本是R3.1.2,发布日期是20##-10-31,下载地址是http://www.r-project.org/。我使用的是R3.1.1。
(2)把数据文件data.txt文件复制 “我的文档”[①]。
(3)把data.txt文件读入R软件,并起个名字。具体操作是:打开R软件,输入(输入每一行后,回车):
data=read.table("data.txt",header=T)
data #查看数据[②]
回车表示执行。完成上面操作后,R窗口会显示:
(4)把销售额(x)转化为时间序列格式
x=ts(x,start=1964)
x
结果:
2、对x进行平稳性检验
ARMA模型的一个前提条件是,要求数列是平稳时间序列。所以,要先对数列x进行平稳性检验。
先做时间序列图:
从时间序列图可以看出,销售量x不具有上升的趋势,也不具有起降的趋势,初步判断,销售量x是平稳时间序列。但观察时间序列图是不精确的,更严格的办法是进行单位根检验。
单位根检验是通行的检验数列平稳性的工具,常用的有ADF单位根检验、PP单位根检验和KPSS单位根检验三种方法。
单位根检验的准备工作是,安装tseries程序包。安装方法:在联网状态下,点菜单“Packages—Install packages”,在弹出的对话框中,选择一个镜像,如China(Beijing1),确定。然后弹出附加包列表,选择tseries,确定即可。
安装完附加包后,执行下面操作:
library(tseries) #加载tseries包
adf.test(x) #ADF检验
pp.test(x) #PP检验
kpss.test(x) #KPSS检验
结果:
上面分别给出了ADF检验、PP检验和KPSS检验的结果。其中,ADF检验显示x是不平稳的(P值=0.99>0.05),而PP检验[③]和KPSS检验[④]则表明x是平稳时间序列。再结合时间序列图的判断,我们认为x是平稳时间序列,因而符合建立ARMA模型的前提条件。
3、选择模型
做x的自相关图(左图)和偏自相关图(右图):
acf(x) #做自相关图
pacf(x) #做偏自相关图
无论是自相关系数图(左),还是偏自相关系数图(右),都显著第4阶的系数突破了虚线,表明相关性显著。因此,我们建立4阶AR模型,写作AR(4)。
4、估计模型参数
fit=arima(xse,order=c(4,0,0)) #把估计结果取名为fit
fit #查看fit
上面给出了AR模型的回归系数的估计值,其中,截距为44079.31,1到4阶自回归系数分别是0.0344,-0.0174,-0.2002和0.4560。
5、模型效果的检验
模型效果的检验非常重要,因为只有通过检验,才证明是可靠、有效的模型,才能进行后续的预测分析。
主要的检验工具有两个,一是对回归系数的显著性检验。四个自回归系数中,第4个回归系数的T统计值=0.4560/0.1241=3.67,大于2,因此,通过了显著性检验,表明确实存在四阶自相关。这与前面看自相关图和偏自相关系数图的结论相吻合。
第二个检验是残差的白噪声检验(Ljung-Box检验),这个最主要、最关键。一般来说,只要通过了残差的白噪声检验,则表明模型是有效的。
残差白噪声检验的R代码:
tsdiag(fit)
结果:
上边是残差的自相关图,图形显示,除了0阶以外,各阶自相关系数都很小,基本在0左右。表明残差中已经没有多少有用的信息,残差是纯随机序列,即白噪声。换个角度说,时间序列的有价值信息绝大部分都已经被模型提取了,建模获得了成功。
下边是更为精确的Ljung-Box检验结果,所有小圈都在虚线之上(虚线值为0.05),表明在0.05的显著性水平上,各阶自相关系数和零的差别不显著,残差为白噪声序列,模型效果优良。这与上面的残差的自相关图相吻合。
6、ARIMA模型预测
R软件代码:
predict(fit,n.ahead=3) #预测下三年(20##-2016)的数值
若想预测后五年,就把3改成5,依此类推。
结果:
pred即predict(预测)的前四个字母,下面是时间20##-2016,表明要预测20##-20##年三年的。结果在最后一行,20##年销售额预测值为61768.02,20##年为36563.83,20##年为45464.87。
(四)模型的再检验—用AIC准则寻找更优
上面建模预测,通过的显著性检验和残差的白噪声检验,证明模型优良,可以进行预测。一般的预测报告就到此结束了。
但考虑到预测对于企业家的决策重要,而决策的失误将会产生很大的不良后果。因此,更严谨起见,我们建立了24个可能的ARMA模型,一个一个比较,想看一看还有没有比前面我们建立的模型拟合效果更好的。挑选标准是国际通行的AIC准则。
AIC是日本统计学家Akaike于1973年提出的。其基本思想是,变量越多,一般来说模型的拟合优度会越高。但是我们又不能单纯地以拟合的准确度的衡量模型的好坏,因为自变量的增多会导致未知参数的增多,而参数越多,参数估计的难度就越大,估计的精度也越差。因此,应该寻求在拟合优度和参数个数之间的一个平衡,AIC达到最小时的模型被认为是最优的模型。
这就是说,我们所建立的预测模型,经过Ljung-Box检验,表明是优良的模型。但是,如果有好多模型通过检验,证明优良呢?这时,就可以比较AIC的大小,达到优中选优的目的。
统计界的经验表明,ARMA模型最常见的4阶之内。这样会产生24个ARMA模型。分别是AR(1)、AR(2)、AR(3)、AR(4)、MA(1)、MA(2)、MA(3) 、MA(4)、ARMA(1,1) 、ARMA(2,1) 、ARMA3,1) 、ARMA(4,1) 、ARMA(1,2) 、ARMA(2,2) 、ARMA(3,2) 、ARMA(4,2) 、ARMA(1,3) 、ARMA(2,3) 、ARMA(3,3) 、ARMA(4,3) 、ARMA(1,4) 、ARMA(2,4) 、ARMA(3,4) 、ARMA(4,4)。
R代码:
fit=arima(x,c(1,0,0));fit #ar(1)
fit=arima(x,c(2,0,0));fit #ar(2)
fit=arima(x,c(3,0,0));fit #ar(3)
fit=arima(x,c(4,0,0));fit #ar(4)
fit=arima(x,c(0,0,1));fit #ma(1)
fit=arima(x,c(0,0,2));fit #ma(2)
fit=arima(x,c(0,0,3));fit #ma(3)
fit=arima(x,c(0,0,4));fit #ma(4)
fit=arima(x,c(1,0,1));fit #arma(1,1)
fit=arima(x,c(2,0,1));fit #arma(2,1)
fit=arima(x,c(3,0,1));fit #arma(3,1)
fit=arima(x,c(4,0,1));fit #arma(4,1)
fit=arima(x,c(1,0,2));fit #arma(1,2)
fit=arima(x,c(2,0,2));fit #arma(2,2)
fit=arima(x,c(3,0,2));fit #arma(3,2)
fit=arima(x,c(4,0,2));fit #arma(4,2)
fit=arima(x,c(1,0,3));fit #arma(1,3)
fit=arima(x,c(2,0,3));fit #arma(2,3)
fit=arima(x,c(3,0,3));fit #arma(3,3)
fit=arima(x,c(4,0,3));fit #arma(4,3)
fit=arima(x,c(1,0,4));fit #arma(1,4)
fit=arima(x,c(2,0,4));fit #arma(2,4)
fit=arima(x,c(3,0,4));fit #arma(3,4)
fit=arima(x,c(4,0,4));fit #arma(4,4)
结果计算出每个模型的AIC值,如下:
AR(4):aic = 1151.31
AR(1):aic = 1159.14
AR(2):aic = 1161.08
AR(3):aic = 1160.73
MA(1): aic = 1159.13
MA(2): aic = 1161.05
MA(3): aic = 1160.06
MA(4): aic = 1151.49
ARMA(1,1): aic = 1155.99
ARMA(2,1): aic = 1157.59
ARMA(3,1): aic = 1154.97
ARMA(4,1): aic = 1152.97
ARMA(1,2): aic = 1156.66
ARMA(2,2): aic = 1156.67
ARMA(3,2): aic = 1155.4
ARMA(4,2): aic = 1154.38
ARMA(1,3): aic = 1155.68
ARMA(2,3): aic = 1157.67
ARMA(3,3): aic = 1156.19
ARMA(4,3): aic = 1153.55
ARMA(1,4): aic = 1153.09
ARMA(2,4): aic = 1155.29
ARMA(3,4): aic = 1152.25
ARMA(4,4): aic = 1153.63
第一行是我们前面建立的四阶自回归模型AR(4)的AIC值,为1151.31。经一一对比可以发现,所有其它模型的AIC值都大于115.31。就是说,我们前面建立的模型是所有可能模型中的最优模型。
三、GM(1,1)预测
(一)方法简介
灰色系统理论是由华中理工大学邓聚龙教授于1982年提出并加以发展的。二十几年来,引起了不少国内外学者的关注,得到了长足的发展。目前,在我国已经成为社会、经济、科学技术在等诸多领域进行预测、决策、评估、规划控制、系统分析与建模的重要方法之一。而其精华在于GM(1,1)模型,GM(1,1)被广泛应用于预测,并且预测效果很好,其使用限制条件是:原始数据单调,预测背景呈现稳定发展趋势;其优势是:适用于观测数据较少的预测问题,算法简单易行,预测精度相对较高。
鉴于GM(1,1)预测适合于数据较少情况,我们选择20##-20##年的近期数据,进行预测尝试。
(二)R软件操作
1、把脚本文件GM11.R和data2.txt复制到“我的文档”;
2、R窗口输入命令:
source("GM11.R")
data2=read.table("data2.txt",header=T)
x=data2$x
x
GM11(x,length(x)+1) #预测后1期值
预测结果:20##年销售量分别为28385.3。在R显示结果中,是x(0)的模拟值的最后1个数。
(三)模型检验
利用R软件进行操作处理结果显示如下:
平均相对误差= 22.11903% 相对精度= 77.88097%
可见,GM(1,1)模型预测的误差较大,相对精度不高。
再进行后验差比值检验。
原始序列的方差:
残差序列e的方差:
后验差比值为:
C值=S2/S1= 0.7108341
按照灰色预测理论,C值大于0.65,表明GM(1,1)预测精度等级为:不合格(标准见下表)。说明该模型的预测结果不太可靠。
小误差概率检验:
R软件给出了小误差概率值,p= 4 / 6 = 0.6666667。属于(0.7,0.8],GM(1,1)模型预测精度等级为:勉强合格(标准见上表)。
综合来看,对于我公司的数据,GM(1,1)模型效果并不理想。
四 简要结论
前面用ARIMA模型和GM(1,1)模型,对我公司的销售量进行了预测。检验表明,GM(1,1)模型的精度较低,而ARIMA模型则通过Ljung-Box检验,表明模型优良。而且,我们进行了全方位的24个模型的一一比对,发现我们建立的模型在所有可能模型中最优。因而,建立重点参照ARIMA模型的预测结果。
作为统计人员,基于对统计工作的经验认识,明白任何预测,都是根据过往的历史信息进行的。如果历史条件不变,预测结果可靠。一旦历史条件改变,则预测结果不一定准确。
而且,只要是预测,无论方法多么科学,分析多么严谨,都没有百分百的准确,都会有预测误差。
五 进一步建议
单变量时间预测,是依据单一变量—销售量的历史信息进行预测,并没有考虑其它因素。结果仅具有参考意义。
建议领导层根据自己的经验、销售部门根据其经验,尤其是对未来经济形势的变化特点,修正前面的预测结果,使预测结果更加完善。
附录:GM(1,1)基本理论
G表示Grey(灰),M表示Model(模型),前一个“1”表示一阶,后一个“1”表示一个变量,GM(1, 1)则是一阶,一个变量的微分方程模型。
给定等时间间隔的数据列,且设数据列单调:
k表示时刻,表示t=k时刻某量的观测值,不妨设,,将数据列记成:
表示原始数据序列。比如:
。
对原始数据作一次累加生成:即令
得一次累加生成数序列为:
在此,={2.874, 6.152, 9.489, 12.879, 16.558}
给定的原始数据序列已经是单增序列,经一次累加后生成的累加数序列具有更强烈的单调性。我们知道指数序列是单调的,但是,单调序列却不一定是指数型的,不过强烈的单调序列可近似看做是指数的,即可用指数型曲线进行弥合。如果用指数曲线来弥合一次累加生成序列,那么,这条指数曲线一定是某个一阶线性常系数微分方程
(6)
的满足某个初始条件的一条积分曲线:
即
(7)
其中a,u是待确定的未知参数,该微分方程中的导数可用差商近似表示。
为时间间隔,将时间间隔看做是单位时间间隔,并且认为时间被充分细化(秒,毫秒。微秒……事实上只要单位时间内函数的增量相对很小,这个单位时间间隔也可以是日,月,年等。)
此时有
注意到一次累加生成数在时刻t=k+1与t=k时的差为:
而是在[k, k+1]上某一点取值,既然是近似,索性将的值取在点k+1,即
于是,一阶线性常系数微分方程
可近似化为:
注意到函数(t)在区间[k, k+1]上取值,当以中值近似时有:
则微分方程近似转化为:
这是一个关于参数a与u的线性近似表达式。与数据点近似满足
比较知,按最小二乘原理,线性回归系数a,b满足:
其中
,
具体到上面给定的数据且用替代,则上式化作:
,
由此看出,若原始数据有n个,则一次累加生成的数据有n-1个。
计算
由
得 ,
计算得
即a=–0.03720,u=3.06536
这样,所求的微分方程模型为:
(10)
其解为:
即解可表示为:
(11)
(11)式就是最后得到的预测模型,该模型称作GM(1, 1)预测模型。
由(11)式可求,即为t=6时的预测值,也可求,等等。
即用观测值去检验由模型(11)算出的模型值。
[①]我的文档是默认的工作目录,也可以修改自定义工作目录。
[②] #后的提示语句是给自己看的,并不影响R运行
[③] PP检验的原假设是不平稳,P值=0.01,小于0.05,拒绝原假设,表明序列是平稳的。
[④] KPSS检验与PP检验和ADF检验不同,它的原假设是平稳的。P值=0.1,大于0.05,接受原假设,表明序列是平稳序列。