精华内容
下载资源
问答
  • 利用ARIMA季节模型预测
    2022-04-04 15:28:51

    利用ARIMA季节模型预测

    目的:某公司业务具有明显的季节性波动,为了提前做好假日部署,需根据历史数据预测未来留存用户数量

    1、数据准备

    import pmdarima as pm
    import pandas as pd
    import matplotlib.pyplot as plt
    
    #导入数据
    data=pd.read_excel(r"C:\Users\csdn\Desktop\test.xlsx",sheet_name="OG",index_col = u'month')['liucun']
    data=pd.DataFrame(data)
    
    #查看原始数据时序图
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
    data.plot()
    plt.show()
    

    2、查看数据基本情况

    #查看原始数据自相关系数
    from statsmodels.graphics.tsaplots import plot_acf
    plot_acf(data).show()
    
    #定义ADF输出格式化函数,结果中Test Statistic大于1%置信水平值,P>0.05,liucun存在单位根,序列不平稳
    from statsmodels.tsa.stattools import adfuller
    def adf_test(timeseries):
        print ('ADF检验结果:')
        dftest = adfuller(timeseries, autolag='AIC')
        dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','Number of Lags Used','Number of Observations Used'])
        for key,value in dftest[4].items():
           dfoutput['Critical Value (%s)'%key] = value
        print (dfoutput)
    
    #对数据集使用ADF检验
    adf_test(data[u'liucun'])
    
    

    3、如果时间序列不平稳,需进行差分转换,得到差分之后的平稳序列再进行预测
    (1)如果明确需一阶差分的话

    #ADF检验结果说明原始序列不平稳,需进行差分,一阶 差分
    D_data = data.diff(1).dropna()
    D_data.columns = [u'liucun差分']
    D_data.plot() #时序图
    plt.show()
    plot_acf(D_data).show() #自相关图
    
    #对一阶差分后的序列进行单位根检验,P值小于0.05,一阶差分后的序列平稳
    from statsmodels.graphics.tsaplots import plot_pacf
    plot_pacf(D_data).show() #偏自相关图
    adf_test(D_data[u'liucun差分'])
    

    (2)如果不明确需进一步定阶

    #定好差分阶数后,对模型p,q定阶,可用aic或bic指标,ARIMA(data, (0, 0, 1)).fit().bic
    from statsmodels.tsa.arima_model import ARIMA
    pmax =int(len(data) / 5)    #一般阶数不超过 length /10
    qmax = int(len(data) / 5)
    aic_matrix = []
    for p in range(pmax +1):
        temp= []
        for q in range(qmax+1):
            try:
                temp.append(ARIMA(data, (p, 1, q)).fit().aic)
            except:
                temp.append(None)
        aic_matrix.append(temp)
    
    aic_matrix = pd.DataFrame(aic_matrix)   #将其转换成Dataframe 数据结构
    print(aic_matrix)
    
    p,q = aic_matrix.stack().idxmin()   #先使用stack 展平, 然后使用 idxmin 找出最小值的位置
    print(u'AIC 最小的p值 和 q 值:%s,%s' %(p,q))
    

    4、定好阶后可带入ARIMA模型进行拟合

    #找到是AIC/BIC最小的p,q参数,代入ARIMA模型中,进行拟合
    from statsmodels.tsa.arima_model import ARIMA
    print(ARIMA(data, (5,1,0)).fit().bic)
    model=ARIMA(data, (5,1,0)).fit()
    model.summary2() 
    
    #model.fittedvalues
    fittedvalues = pd.Series(model.fittedvalues, copy=True)
    plt.figure(figsize=(10, 6))
    plt.plot(fittedvalues,label="forecast")
    plt.plot(data,label="real")
    plt.plot(D_data,label="diff")
    plt.xlabel('month',fontsize=12,verticalalignment='top')
    plt.ylabel('avgdau',fontsize=14,horizontalalignment='center')
    plt.legend()
    plt.show()
    
    

    5、对拟合的模型效果进行评价

    # 计算R平方值
    import numpy as np
    yhat =model.fittedvalues                        # or [p(z) for z in x]
    ybar = np.sum(D_data[u'liucun差分'])/len(D_data[u'liucun差分'])          # or sum(y)/len(y)
    ssreg = np.sum((D_data[u'liucun差分']-ybar)**2)   # or sum([ (yihat - ybar)**2 for yihat in yhat])
    sstot = np.sum((D_data[u'liucun差分'] -yhat)**2)    # or sum([ (yi - ybar)**2 for yi in y])
    R =1- (sstot/ssreg)
    R
    

    6、利用拟合出来的模型进行预测

    #利用模型进行预测
    model.forecast(7)   #为未来8个月进行预测, 返回预测结果, 标准误差, 和置信区间
    
    更多相关内容
  • ARIMA乘积季节模型及其在月径流预测中的应用,卢艳,,本文研究了应用ARIMA乘积季节模型在月径流预测中的可行性。以1985年1月至2001年12月汀江观音桥站月流量资料建立模型,以2002年的资料作�
  • 基于ARIMA季节乘积模型,提出一种新的矿井涌水量的预测方法,通过普通差分和季节差分保证矿井涌水量时间序列的平稳化,以模型定阶、参数估计和假设检验等过程建立合适的乘积季节模型ARIMA(2,1,1)(1,1,1)12。...
  • ARIMA乘积季节模型理论及其在煤炭出口量,周丽莉,,本文研究ARIMA乘积季节模型及其在煤炭出口量预测中的应用。运用SPSS软件中时间序列模块中的建模方法建立了我国煤炭出口模型。文章首
  • 本文研究乘积季节模型在我校图书借阅预测中的应用,通过对我校2007年1月到2009年12月的月度图书借阅数据来进行实证分析,采用差分方法对序列资料进行平稳化,然后进行模型定阶并估计其参数,建立了我校图书借阅的乘积...
  • 本文研究乘积季节模型在我国煤矿事故总数预测中的应用,通过对我国2006年1月到2010年12月煤矿事故总数数据来进行实证分析,采用差分方法对序列资料进行平稳化,然后进行模型定阶并估计其参数,建立了合适的乘积季节预测...
  • 本文研究乘积季节模型在我校图书借阅预测中的应用,通过对我校2007年1月到2009年12月的月度图书借阅数据来进行实证分析,采用差分方法对序列资料进行平稳化,然后进行模型定阶并估计其参数,建立了我校图书借阅的乘积...
  • 提出了应用ARIMA乘积季节模型对大坝位移监测数据进行分析和预报的新方法,并给出了基于开源R语言建立乘积季节模型的方法步骤和关键技术。结合某大坝径向位移监测数据进行计算分析,结果表明:ARIMA乘积季节模型能较...
  • 季节性时间序列模型.pptx
  • 数学建模学习方法-ARIMA乘积季节模型及其在传染病发病预测中的应用
  • 运用SPSS软件和SAS软件系统中的时间序列建模方法建立了我国城乡居民储蓄存款模型,并认为用最大似然估计法(ML)对结果进行短期预测,用无约束最小二乘估计法(ULS)对结果进行中长期预测,可得到较高的预测精度.
  • ARIMA模型的季节模型

    万次阅读 多人点赞 2017-06-26 20:02:10
    ARIMA模型可以对具有季节效应的序列建模,根据季节效应提取的难易程度可以分为简单季节模型与乘积季节模型

    ARIMA模型可以对具有季节效应的序列建模,根据季节效应提取的难易程度可以分为简单季节模型与乘积季节模型。

    简单季节模型

    简单季节模型是指序列中的季节效应和其效应之间是加法关系
    各种效应信息的提取都非常容易,通常简单的周期步长差分即可将序列中的季节信息提取充分,简单的低阶差分即可趋势信息提取充分,提取完季节信息和趋势信息之后的残差序列就是一个平稳序列,可以用ARMA模型拟合。
    R语言中用arima函数中的seasonal选项拟合季节模型,相关命令如下 :
    arima(x,order=,include.mean=,method=,transform.pars=,fixed=,seasonal=)

    -x:要进行模型拟合的序列命。
    -order:指定模型阶数。
    -include.mean:指定是否需要拟合常数项。
    -method:指定参数估计方法。
    -transform.pars:指定是否需要人为干预参数。
    -fixed:对疏系数模型指定疏系数的位置。
    -seasonal:指定季节模型的阶数与季节周期,该选项的命令格式为:
    seasonal = list(order=c(P,D,Q),period = pi)
    (1)加法模型:P=0,Q=0
    (2)乘法模型:P,Q不全为零

    拟合1962-1991年德国工人季度失业率序列

    f<-read.table("D:/R-TT/book4/4R/data/file19.csv",sep=",",header = T)
    x<-ts(f$unemployment_rate,start = c(1962,1),frequency = 4)
    plot(x)

    德国工人季节失业率序列时序图
    德国工人季节失业率序列时序图

    #1阶4步差分,并绘制出差分后序列的时序图
    x.dif<-diff(diff(x),4)
    plot(x.dif)

    1阶4步差分后序列时序图
    差分后序列自相关图与偏自相关图

    #绘制差分后序列自相关图和偏自相关图
    acf(x.dif)
    pacf(x.dif)

    1阶4步差分后序列自相关图
    阶4步差分后序列自相关图
    1阶4步差分后序列偏自相关图
    1阶4步差分后序列偏自相关图
    自相关系数拖尾,而偏自相关系数1阶,4阶显著非零,4阶之后截尾。综合差分与自相关信息。拟合加法模型ARIMA((1,4)(1,4),0)

    #拟合加法季节模型ARIMA((1,4),(1,4),0)
    x.fit<-arima(x,order = c(4,1,0),seasonal = list(order=c(0,1,0),period=4,transform.par=F,fixed = c(NA,0,0,NA)))
    x.fit
    Call:
    arima(x = x, order = c(4, 1, 0), seasonal = list(order = c(0, 1, 0), period = 4, 
    transform.par = F, fixed = c(NA, 0, 0, NA)))
    
    Coefficients:
             ar1     ar2     ar3      ar4
          0.4143  0.0294  0.1257  -0.3300
    s.e.  0.0879  0.0961  0.0952   0.0881
    
    sigma^2 estimated as 0.09072:  log likelihood = -25.51,  aic = 61.02
    #残差白噪声检验
    for(i in 1:2) print(Box.test(x.fit$residual,lag=6*i))
    Box-Pierce test
    
    data:  x.fit$residual
    X-squared = 0.54159, df = 6, p-value = 0.9973
    
    
        Box-Pierce test
    
    data:  x.fit$residual
    X-squared = 6.9427, df = 12, p-value = 0.8614

    做3年期预测

    > library(forecast)
    > x.fore<-forecast(x.fit,h=12)
    > x.fore
            Point Forecast    Lo 80    Hi 80      Lo 95     Hi 95
    1992 Q1       6.660195 6.274201 7.046189  6.0698679  7.250522
    1992 Q2       5.961087 5.292490 6.629683  4.9385564  6.983617
    1992 Q3       6.116229 5.202010 7.030448  4.7180513  7.514406
    1992 Q4       6.034304 4.877448 7.191161  4.2650446  7.803564
    1993 Q1       6.386049 4.840267 7.931831  4.0219788  8.750119
    1993 Q2       5.600664 3.694241 7.507088  2.6850413  8.516287
    1993 Q3       5.721381 3.496132 7.946631  2.3181560  9.124607
    1993 Q4       5.636065 3.119547 8.152583  1.7873832  9.484747
    1994 Q1       6.010340 3.090620 8.930060  1.5450137 10.475666
    1994 Q2       5.258337 1.937603 8.579071  0.1797120 10.336962
    1994 Q3       5.404481 1.707100 9.101863 -0.2501751 11.059138
    1994 Q4       5.334632 1.274994 9.394270 -0.8740483 11.543313

    绘图

    plot(x.fore)

    3年期12季度预测图
    3年期12季度预测图

    乘积季节模型

    序列的季节效应、长期趋势效应和随机波动之间存在复杂的交互影响关系,简单的ARIMA模型不足以提取其中的相关关系,这时通常需要采用乘积季节模型。
    拟合1948-1981年美国女性月度失业率序列

    #读入数据,并绘制时序图
    g<-read.table("D:/R-TT/book4/4R/data/file20.csv",sep=",",header = T)
    x<-ts(g$unemployment_rate,start = c(1948,1),frequency = 12)
    plot(x)

    美国女性月度失业率时序图
    美国女性月度失业率时序图

    #作1阶12步差分,并绘制出差分后序列的时序图
    x.dif<-diff(diff(x),12)
    plot(x.dif)

    1阶12步差分时序图
    1阶12步差分时序图

    #绘制差分后序列自相关图和偏自相关图
    acf(x.dif)
    pacf(x.dif)

    1阶12步差分自相关图
    1阶12步差分自相关图
    1阶12步差分偏自相关图
    1阶12步差分偏自相关图
    差分后序列的自相关图与偏自相关图都显示出拖尾属性,首先尝试拟合加法季节模型ARIMA(1,(1,12),1)。然后进行残差序列的白噪声检测。

    #拟合ARIMA(1,(1,12),1)模型
    x.fit<-arima(x,order = c(1,1,1),seasonal = list(order=c(0,1,0),period=12))
    for(i in 1:2) print(Box.test(x.fit$residual,lag=6*i))
    Box-Pierce test
    
    data:  x.fit$residual
    X-squared = 11.204, df = 6, p-value = 0.08228
    
    
        Box-Pierce test
    
    data:  x.fit$residual
    X-squared = 105.78, df = 12, p-value < 2.2e-16

    残差序列非白噪声,故模型拟合不正确

    自相关系数延迟24阶后,截尾。
    偏自相关系数延迟24阶后,仍拖尾。
    这时以12步为周期的ARMA(0,1)12模型提取差分后序列季节自相关信息。
    我们要拟合的乘积模型为 ARIMA(1,1,1)*(0,1,1)12

    > #拟合ARIMA(1,1,1)*ARIMA(0,1,1)12模型
    > x.fit<-arima(x,order = c(1,1,1),seasonal = list(order=c(0,1,1),period=12))
    > x.fit
    
    Call:
    arima(x = x, order = c(1, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
    
    Coefficients:
              ar1     ma1     sma1
          -0.7290  0.6059  -0.7918
    s.e.   0.1497  0.1728   0.0337
    
    sigma^2 estimated as 7444:  log likelihood = -2327.14,  aic = 
    4662.28

    残差序列白噪声检验

     for(i in 1:2) print(Box.test(x.fit$residual,lag=6*i))
    
        Box-Pierce test
    
    data:  x.fit$residual
    X-squared = 4.5564, df = 6, p-value = 0.6018
    
    
        Box-Pierce test
    
    data:  x.fit$residual
    X-squared = 9.6288, df = 12, p-value = 0.6485
    

    残差序列白噪声检验显示,该拟合模型显著成立。

    展开全文
  • 时间序列分析-------乘法季节模型 实验 名称 乘法季节模型 实验 内容 乘法季节模型 实验 目的 2、熟练建立乘法季节模型 乘法季节...

    时间序列分析-------乘法季节模型

    实验

    名称

    乘法季节模型

    实验

    内容

    乘法季节模型

    实验

    目的

    2、熟练建立乘法季节模型

    推荐阅读

    1. 使用Python完成时间序列分析基础
    2. SPSS建立时间序列乘法季节模型实战案例
    3. SPSS建立时间序列加法季节模型实战案例
    4. Python建立时间序列ARIMA模型实战案例
    • 乘法季节模型结构

     

    乘法季节模型建立

    绘制时序图

     

     

    时序图显示该序列具有长期增长性趋势和以年为周期的季节效应

    差分平稳化

            对原序列做1阶12步差分,希望提取原序列的趋势效应和季节效应,差分后的时序图如下所示: 

    易得模型平稳

    白噪声检验

           

     

     

     P<α,故拒绝原假设,即差分后的序列属于非白噪声序列

     综上:差分后的序列是平稳非白噪声序列,需要对差分后的序列进一步拟合ARMA模型

    时序图定阶

     

    自相关图显示延迟12阶自相关系数大于两倍标准差,这说明差分后序列中仍然蕴含非常显著的季节效应,延迟1阶的自相关系数也大于2倍标准差,这说明差分后序列还具有短期相关性。     

    1. 短期相关特征:自相关图和偏自相关图显示12阶以内的自相关系数,ARMA(1,1),ARMA(1,0),ARMA(0,1)提取差分后序列的短期自相关信息
    2. 季节自相关特征:季节自相关特征时自相关系数截尾,偏自相关系数拖尾,这里可以永12步为周期的ARMA(0,1)12模型来提取差分后序列的季节自相关信息。

    参数估计和模型检验

    综合前面的差分信息,我们要建立ARIMA(1,1,1)*(0,1,1)12、ARIMA(1,1,0)*(0,1,1)12、ARIMA(0,1,1)*(0,1,1)12模型

     

    • ARIMA(1,1,1)*(0,1,1)12

     

              

     P<α,参数的显著性不通过检验

    • ARIMA(0,1,1)*(0,1,1)12

     

    模型的显著性检验:

     

    建立模型:

    • ARIMA(1,1,0)*(0,1,1)12

                                                                                                                          参数的显著性检验通过

     

    模型的显著性检验

     

    建立模型:

     

    模型预测

     

     

     

     

     

    > 到这里就结束了,如果对你有帮助你,欢迎点赞关注,你的点赞对我很重要

     

     

    展开全文
  • 第一次尝试使用Python创建季节性ARIMA模型

    千次阅读 多人点赞 2019-04-25 21:26:48
    时间序列之ARIMA模型前言ARIMA模型简介Python实现ARIMA模型预测数据的获取与准备绘制1995-2002年时间序列趋势图去均值化后ADF平稳性检验以及差分绘制自相关函数以及偏相关函数图生成一个适合你的列表创建一个表格...

    前言

    时间:19/04/25,天气晴,心情愉悦。
    大学生活不知不觉已经快要结束了,我才第一次认真的开始检查、审视自己过去两年中究竟学到了些什么?仔细回想,学的东西好像还蛮多的,从我开始懵懂学习C语言后入坑编程系列学习以来,自己慢慢的喜欢上这一领域,开始用C实现一些小小的功能,例如12306抢票、一些经典的小游戏等。后续除了掌握一些基本数据库知识之外我又接触了Java这种oo语言,并且我在自己的课程设计里面独立编写了基于MINA框架的商城Shopping微信小程序,虽然写的有点烂,但是也基本实现了商城的大部分功能(对自己要求有点低)。再后来一次侥幸的机会跟着导师做了一个项目,是基于计算机视觉的智能小车导航避障的,为此,我专门去学习了在MFC框架下用opencv实现图像处理,嗯,opencv图像处理是我学了最长时间也是最系统的学习,从简单的图像形态学处理、图像去燥、图像分割到复杂颇具挑战的模式识别我都有了解过研究过,在做图像处理的过程中,我慢慢的发现自己对图像数据(数据)的各式各样处理计算颇感兴趣。那时候正值大数据的热潮,我从网上找了一些大数据的视频学习了Hadoop、Spark等,掌握了大批量数据下并行处理的方式,但是自己并不知道用什么方法去处理数据,于是,18年的下半年,我开始正式接触机器学习领域,至今学习机器学习时常也有半年的时间了,在这半年里也学习了很多公式推导也有很多算法流程,如今让我回忆一下自己曾经学的这些机器学习的东西,自己的印象其实已经没有那么深刻了,即使在学习当下对算法推导以及应用非常的熟悉,但是没有把自己学的内容整理下来,即使学过随着时间推移也差不多把大部分细节给忘记了。我挺后悔自己当初学习的时候没有做笔记,不过悔在过去、行在当下,从此刻开始记录我的学习,我相信我可以坚持记录下去。

    ARIMA模型简介

    具有如下结构的模型称为求和自回归移动平均(Autoregressive Integrated Moving Average),简记为ARIMA(p,d,q)模型:

    模型
    式中:
    模型解释
    ARIMA模型的数学原理和公式我就不一一解释了,如果有不懂的地方可以参考ARIMA模型,在本篇中我们主要探讨如何用Python对时序进行分析建模。

    Python实现ARIMA模型预测

    数据的获取与准备

    如某市1995-2003年各月的工业生产总值如下表所示,试对1995-2002年数据建模,2003年的数据留做检验模型的预测结果。
    某市1995-2003年各月的工业生产总值
    我们在获取数据时,可能会因为一些客观因素(比如一些表格编辑软件的自动将编码转换UTF-8,默认的时间格式规范不一致,例如19/04/25可能会转换成04/25/19,还有就是本身数据就存在缺失、不合理等问题)导致了数据的异常或缺失,然而在机器学习里,数据的好坏直接决定了模型结果的好坏,所以对数据的预处理必不可少。在我们这个实验数据中,数据并没有出现缺失以及不符逻辑的情况,所以我们可以直接将其作为ARIMA模型的输入数据。(如果数据出现缺失不合理等现象,可以选择性参考 https://blog.csdn.net/zhangyonggang886/article/details/80901290

    Python3:

    import csv
    data_files = csv.reader(open('data.csv','r'))
    dataSet = [] # 训练数据集
    dateSet = [] # 训练年份集
    for data in data_files:
    	if data[0] == '200301': # 将csv文件中验证数据去除
            break
        if data[0] != 'date':
            dateSet.append(data[0])
            dataSet.append(float(data[1]))
    

    绘制1995-2002年时间序列趋势图

    显示一行一行的数据是难以观察数据的趋势走向,这样不利于我们观测数据之间的相互联系,因此画出趋势图有利于数据分析。

    Python3:

    # 利用Pandas库来绘制时间序列趋势图
    import matplotlib.pyplot as plt
    import pandas as pd
    df = pd.DataFrame(dataSet,index=dateSet,columns=['real value'])
    df.plot()
    plt.show()
    

    result:
    时间序列趋势图

    去均值化后ADF平稳性检验以及差分

    ①为什么要去均值化?做数据的去均值化其实就是对数据进行标准化,在很多情况下,我们对数据本身大小并不感兴趣,我们感兴趣的是数据之间的联系,去均值化并不会影响这种联系,因为去均值化后得到的时间序列趋势和没有去均值化得到的时间序列趋势是一样的。
    Python3:

    # 对时间序列进行去均值化
    mean = sum(dataSet)/len(dataSet) # 计算均值
    dataSet_kill_mean = [data - mean for data in dataSet] # 得到去均值后的序列
    

    ②序列平稳是做ARIMA回归的前提条件,所以我们得到的序列必须是平稳的。观测上面的序列趋势图,我们可以很明显的发现数据有逐渐上升的趋势,因此我们判断该段时间序列为非平稳序列。为了得到平稳的时间序列,我们要做差分,因为差分目的是使变量序列平稳。
    Python3:

    # 进行一阶差分并绘制趋势图
    df_kill_mean = pd.DataFrame(dataSet_kill_mean,index=dateSet,columns=['kill mean value'])
    df_kill_mean_1 = dataSet_kill_mean.diff(1).dropna()
    df_kill_mean_1.plot()
    plt.show()
    

    result:
    一阶差分后的趋势图
    ③ADF检验可以让我们判断某段时间序列是否为平稳序列(具体ADF统计学原理可以选择性参考http://www.tinysoft.com.cn/TSDN/HelpDoc/display.tsl?id=12889
    Python3:

    import statsmodels.tsa.stattools as ts
    adf_summary = ts.adfuller(np.array(df_kill_mean_1).reshape(-1)) # 进行ADF检验并打印结果
    print(adf_summary)
    >>> (-3.3635866783352, 0.012264631212932628, 12, 82, {'1%': -3.512738056978279, '5%': -2.8974898650628984, '10%': -2.585948732897085}, 237.8874357065477)
    

    如何观察上面的统计结果来判断序列是否为平稳呢?

    1. 1%、5%、10%不同程度拒绝原假设的统计值和ADF Test result的比较,ADF Test result同时小于1%、5%、10%即说明非常好地拒绝该假设,本数据中,adf结果为-3.3635866783352, 大于1% level的-3.512738056978279,但小于5% level的-2.8974898650628984,如果建模对序列平稳性有相当高的要求,则认为该序列不平稳,若要求并不严格也可认为该序列是平稳序列。如果一阶差分序列不平稳,则继续做二阶差分并检验。
    2. P-value是否非常接近0。本结果中,P-value 为 0.012264631212932628 < 0.05并接近0。

    由此,通过检验观测值,我们认为上述一阶差分后得到的数据满足平稳性检验要求。(一阶差分后的序列平稳性不太好,有可能通不过白噪声检验,在这里忽略白噪声检验环节,若白噪声检验得到的P值大于0.05,那么我们就得对时间序列进行二阶差分)

    绘制自相关函数以及偏相关函数图确定参数p、q

    参数确认规则:(已知序列为一阶差分)
    ① 当偏自相关函数呈现p阶拖尾,自相关函数呈现q阶拖尾时,我们可以选用模型ARIMA(p,1,q)
    ② 当偏自相关函数呈现拖尾,自相关函数呈现q阶截尾时,我们可以选用模型MA(q)
    ③ 当偏自相关函数呈现p阶截尾,自相关函数呈现拖尾时,我们可以选用模型AR(p)
    (备注:如果想要深入了解如何通过PACF和ACF函数图确定模型以及参数,可以参考《ARMA模型的自相关函数和偏自相关函数图谱》链接:https://pan.baidu.com/s/1JqkIIh1gdHqjp9uwwGC87A 提取码:1koe (如果链接失效,联系我重新发链接)

    Python3:

    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    # 绘制自相关图
    plot_acf(df_kill_mean_1,lags=24).show() # 其中lags参数是指横坐标最大取值
    # 绘制偏相关图
    plot_pacf(df_kill_mean_1,lags=24).show()
    plt.show()
    

    rusult:
    在这里插入图片描述
    在这里插入图片描述
    我们观测ACF函数图和PACF函数图,我们发现并没有呈现很好的拖尾或截尾情况。出现这个情况的原因有很多种情况,我们观测函数图发现,每隔一个周期,ACF和PACF都出现“尖峰“,例如上述图每隔12个月出现一个"尖峰",由此我们可以很容易的判断,该序列可能存在季节性影响的因素(其实由开始的序列趋势图我们也可以看出序列存在季节性影响)。
    我们可以通过分解的方式将时序数据分离成不同的成分,它主要将时序数据分离为Trend(成长趋势)、seasonal(季节性趋势)、Residuals(随机成分)。然后我们分别对这三个分离的序列进行ARIMA建模得到较好的模型,最后再将模型相加便可以得到最后的ARIMA模型。

    Python3:

    from statsmodels.tsa.seasonal import seasonal_decompose
    decomposition = seasonal_decompose(df_kill_mean_1, freq=12)
    trend = decomposition.trend   # 趋势部分
    seasonal = decomposition.seasonal # 季节性部分
    residual = decomposition.resid # 残留部分
    decomposition.plot()
    

    result:
    序列分解
    这种分解建模的方式有些复杂,接下来我们采用季节性时间序列来对上述具有明显季节性的序列进行建模。

    建立季节性时间序列模型ARIMA(k,D,m)S×(p,d,q)

    我们称ARIMA(k,D,m)S×(p,d,q)为乘积季节模型,也可以写成ARIMA(p,d,q)(k,D,m)S模型,其中S为季节性周期。如果将模型中的AR因子和MA因子分别展开,可以得到类似的ARMA(kS+p,mS+q)的模型。当我们考虑用ARIMA(p,d,q)(k,D,m)S模型的时候,我们需要优化感兴趣度量的是ARIMA(p,d,q)(k,D,m)s各个参数的值。接下来,我们将使用“网格搜索”来迭代地探索参数的不同组合。 对于参数的每个组合,我们使用statsmodels模块的SARIMAX()函数拟合一个新的季节性ARIMA模型,并评估其整体质量。

    Python3:

    # 这段代码借鉴了其他博文的做法
    import itertools
    p = q = range(0, 2) # p、q一般取值不超过2
    d = range(1,2)
    pdq = list(itertools.product(p, d, q))
    seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
    warnings.filterwarnings("ignore") # 忽略警告信息
    for param in pdq:
        for param_seasonal in seasonal_pdq:
            try:
                mod = sm.tsa.statespace.SARIMAX(df_mean_1,
                                                order=param,
                                                seasonal_order=param_seasonal,
                                                enforce_stationarity=False,
                                                enforce_invertibility=False)
    
                results = mod.fit()
                print('ARIMA{}x{} - AIC:{}'.format(param, param_seasonal, results.aic))
            except:
                continue
    >>> 
    ARIMA(0, 1, 0)x(0, 1, 0, 12) - AIC:322.6198841487564
    ARIMA(0, 1, 0)x(0, 1, 1, 12) - AIC:270.20449054798723
    ARIMA(0, 1, 0)x(1, 1, 0, 12) - AIC:279.7073077170952
    ARIMA(0, 1, 0)x(1, 1, 1, 12) - AIC:272.20429383065317
    ARIMA(0, 1, 1)x(0, 1, 0, 12) - AIC:248.2004574618413
    ARIMA(0, 1, 1)x(0, 1, 1, 12) - AIC:209.46795258585362
    ARIMA(0, 1, 1)x(1, 1, 0, 12) - AIC:219.76010995507397
    ARIMA(0, 1, 1)x(1, 1, 1, 12) - AIC:213.63266407486356
    ARIMA(1, 1, 0)x(0, 1, 0, 12) - AIC:292.5090537220262
    ARIMA(1, 1, 0)x(0, 1, 1, 12) - AIC:250.76816771015618
    ARIMA(1, 1, 0)x(1, 1, 0, 12) - AIC:251.43830162843227
    ARIMA(1, 1, 0)x(1, 1, 1, 12) - AIC:251.1402407735711
    ARIMA(1, 1, 1)x(0, 1, 0, 12) - AIC:243.34941237032209
    ARIMA(1, 1, 1)x(0, 1, 1, 12) - AIC:206.44248559031112
    ARIMA(1, 1, 1)x(1, 1, 0, 12) - AIC:211.64269806160195
    ARIMA(1, 1, 1)x(1, 1, 1, 12) - AIC:210.80404367428187
    

    在这里,我们是通过最佳准则函数法来确定具体的参数值的,模型选择的AIC准则越小,我们就大概可以认为该模型越优。通过上述结果我们可以容易得到ARIMA(0, 1, 1)(0, 1, 1,)12模型相对最优。因此我们选择ARIMA(0, 1, 1)(0, 1, 1,)12模型作为我们预测时间序列的最佳模型。

    模型预测

    我们使用我们选取的最佳模型进行预测。

    Python3:

    import statsmodels.api as sm
    df = pd.DataFrame(dataSet,index=dateSet,columns=['real value']) # 原始时间序列
    mod = sm.tsa.statespace.SARIMAX(df,order=(0,1,1),seasonal_order=(1, 1, 1, 12),enforce_stationarity=False,enforce_invertibility=False)
    result = mod.fit()
    predict_sunspots = result.forecast(12)
    forcast = np.array(predict_sunspots[:]).reshape(-1)
    print(forcast)
    >>>
    [19.42912085 17.40614606 21.53290186 22.27891    23.06918964 23.69105707
     22.54036142 23.49219397 24.56108863 24.69965562 26.02344756 26.41517033]
    

    模型指标MAPE

    MAPE
    计算预测值和真实值得MAPE指标,得到MAPE指标值为3.14%,通过这个指标我们可以认为该模型是一个好模型。

    预测值和真实值趋势对比图

    趋势对比图

    结尾

    这是我第一次建立季节性ARIMA模型,如果中间出现错误或者有不合理的地方,还望各位海涵并指正出来,大家一起学习就是要相互纠错,只有这样大家才可以在学习上相互收益、相互进步。同时我也希望这篇文章可以给苦恼于如何用Python建立时间序列模型的朋友指明一条明路。

    展开全文
  • 时间序列上机实验-ARIMA模型的建立(季节乘积模型)实用.pdf
  • 时间序列上机实验-ARIMA模型的建立(季节乘积模型)[归纳].pdf
  • 季节性ARIMA模型【R语言】

    万次阅读 多人点赞 2018-10-18 16:31:43
    季节性的ARIMA模型可以预测含有季节性,趋势性的时间序列。他的形式如下 这里m是每一季节的周期值。季节项与非季节项的模型非常相近。但是季节项中包含了季节周期性。例如对于ARIMA(1,1,1)(1,1,1)4模型能够写成: ...
  • S:季节变动 C:循环变动 I:不规则变动 乘法模型假定四个成分对现象发展的影响是相互的。长期趋势成分取与时间序列原始指标值Y相同计量单位的绝对量,以长期趋势为基础,其余成分均以比率表示。 加法模型假定四个...
  • 基于时间序列的加法季节模型和乘法季节模型以及两者之间的比较如下: 实验数据来源与1962年到1991年德国工人季度失业率序列: 一、加法季节模型 1、首先加载所需的包: 2、导入数据,并将数据转换为季节...
  • ARIMA季节乘积模型在肠道传染病预测中的应用_张翼飞.caj )
  • Eviews简记——时间序列建模

    千次阅读 多人点赞 2020-08-15 23:27:51
    2,2)ARIMA(2,2,2) 加一个对数处理 ls d(log(y),2) c ar(1) ar(2) ma(1) ma(2) 乘积季节ARIMA模型 ARIMA(1,1,1)×(1,1,1)12ARIMA\left( 1,1,1 \right) \times \left( 1,1,1 \right) ^{12}ARIMA(1,1,1)×(1,1,1)12 ls ...
  • 5.时间序列分析

    千次阅读 2020-08-26 13:12:27
    时间序列分析(Time-Series Analysis)是指将原来的数据分解为四部分来看——长期趋势(secular trend,T)、季节趋势(seasonal variation,S)、循环变动(cyclical variation,C)和不规则变动(irregular ...
  • 用自回归求和滑动平均(ARIMA)模型将湖北省发电量数据外推,应用中位移动平均法,将其分解成趋势项和周期项,提出了乘积模型.预测结果显示此方法简单有效,对于季节时间序列的辩识、预测有实用价值.
  • 由于温室效应,气温加速上升,我国西部干旱一半干旱盐湖区盐湖水位出现...本文用Winters线性和季节性指数平滑法、ARIMA乘积季节模型两种时间序列分析方法,根据西藏扎布耶盐湖1991年1月-2003年12月水位变化的时间序列数据,
  • 时间序列分析步骤及sas代码

    万次阅读 多人点赞 2015-07-13 20:59:50
    简单季节模型和乘积季节模型   一阶差分12步+乘积季节模型   data a;input x@@; dif1_12=dif12(dif(x)); time=intnx('quarter','1jan1948'd,_n_-1); format time year4.; cards; /*...
  • 主要运用时间序列分析的方法及EVicws与SPSS统计软件对时间序列建立乘积季节模型,并搜集了中国1993年1月~2000年12月的民航货运量数据,对其进行分析。根据Box-Jenkins的建模方法,建立了中国民航货运量的模型,并对...
  • 时间序列分析:指数平滑和ARIMA模型

    千次阅读 多人点赞 2020-08-26 01:35:48
    阻尼趋势模型模型五:简单季节模型模型六:温特加法模型模型七:温特乘法模型三、一元时间序列分析的模型1、基本的理解2、一元时间序列分析的模型:AR( P)模型3、一元时间序列分析的模型:MA(Q)模型4、ARMA(p.q)...
  • PGM:概率图模型Graphical Model

    万次阅读 多人点赞 2016-05-21 16:57:42
    http://blog.csdn.net/pipisorry/article/details/51461878概率图模型Graphical Models简介完全通过代数...这种概率分布的图形表示被称为概率图模型( probabilistic graphical models )。这些模型提供了几个有用的性质
  • 在真实世界季节性时间序列数据集的实验中,我们的模型始终优于传统的线性模型和 GRU 递归神经网络。 【本文剩余部分内容的组织】 本文的其余部分安排如下。第 2 节概述了相关背景,包括具有代表性的自回归方法和...
  • 本文介绍了生成模型和生成对抗网络(GAN)的工作原理和训练步骤。 概况 生成模型和GAN是计算机视觉应用领域中最新进展的核心内容。 本文将向您介绍GAN的世界及其不同组件。 现实世界中有一些令人兴奋的GAN实例在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 604
精华内容 241
关键字:

乘积季节模型