精华内容
下载资源
问答
  • 利用SPSS和Matlab进行时间序列预测
    2021-04-18 17:33:05

    §7.利用SPSS 和Matlab 进行时间序列预测

    1.移动平均和滑动平均计算

    例1:下表给出了某地区1990~2004年粮食产量数据(表1)。试分别用Matlab 和SPSS 软件,对该地区的粮食产量进行移动平均和和滑动平均计算。

    表1 某地区1990~2004年粮食产量及其平滑结果

    移动平均

    滑动平均 年份 自然序号

    粮食产量y (单位:104 t )三点移动 五点移动

    三点滑动

    五点滑动

    1990 1 3149.44 1991 2 3303.66 3154.47 1992 3 3010.30 3010.30 3141.19 3242.44 1993 4 3109.61 3154.47 3253.04 3263.32 1994 5 3639.21 3141.19 3334.21 3295.88 1995 6 3253.80 3253.04 3242.44 3453.17 3461.80 1996 7 3466.50 3334.21 3263.32 3520.07 3618.81 1997 8 3839.90 3453.17 3295.88 3733.69 3692.89 1998 9 3894.66 3520.07 3461.80 3914.72 3892.78 1999 10 4009.61 3733.69 3618.81 4052.51 4019.78 2000 11 4253.25 3914.72 3692.89 4121.45 4075.78 2001 12 4101.50 4052.51 3892.78 4158.21 4148.58 2002 13 4119.88 4121.45 4019.78 4160.01 4227.01

    2003 14 4258.65 4158.21 4075.78 4260.11

    2004

    15 4401.79 4160.01

    4148.58

    利用spss 进行移动平均计算主要有以下步骤:

    (1) 在菜单中依次选择transform->Create time series…,在弹出的对话框中

    的单击function 下面的下拉条,选择Prior moving average 方法,span 框中输入数值为3(表示进行三点滑动平均)。

    更多相关内容
  • 季节变动预测法课件.pptx
  • 市场调查季节变动预测PPT课件.pptx
  • 市场调查季节变动预测学习教案.pptx
  • [精选]经济预测季节变动预测法(1).pptx
  • [精选]经济预测季节变动预测法(ppt 37).pptx
  • 市场调查季节变动预测PPT学习教案.pptx
  • 预测与决策课件:第七讲-季节变动预测法.ppt
  • 定性预测、回归预测、时间序列平滑预测、趋势曲线模型预测、季节变动预测、马尔科夫预测、确定型决策、非确定型决策、风险型决策、贝叶斯决策、多目标决策等。通过学习,使学生掌握基本预测理论与方法,培养学生根据...
  • 假期收到导师布置的作业,用时间序列季节指数的方法预测虫情,由于数据量比较少,用python的话有点杀鸡用牛刀了,用Excle简单、方便、又快捷,直接起飞。 时间序列 时间序列(或称动态数列)是指将同一统计指标的...

    用Excle做数据分析与预测

    假期收到导师布置的作业,用时间序列季节指数的方法预测虫情,由于数据量比较少,用python的话有点杀鸡用牛刀了,用Excle简单、方便、又快捷,直接起飞。

    时间序列

    时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。经济数据中大多数以时间序列的形式给出。根据观察时间的不同,时间序列中的时间可以是年份、季度、月份或其他任何时间形式。

    模型建立

    获取数据

    选取2017年—2019年某地各月份的昆虫种类及数量(导师瞎给的数据)
    昆虫数据

    数据处理

    在时间序列的模型中:

    Y=T(长期趋势)*S(季节指数)CI

    首先对数据中的昆虫数量Y进行四项平均
    四项平均

    做完四项平均后还要对所得到的数据进行中心平均得到TC的值

    中心平均

    求出TC以后我们根据公式就能得出带不规则变动的季节指数SI(SI=Y/TC):

    算出季节指数

    当我们求出SI以后,因为我们是需要得到季节指数S,所以我们需要把里面的不规则变动I去掉,所以我们还需要对SI进行处理:
    处理SI

    求出各年同季观察值平均值A
    求出历年总季度平均值B
    季节指数C=A/B
    最后我们就能够得出我们所需要的去除不规则变动I的季节指数S
    放入图表中

    算出季节指数

    进行数据分析

    点击Excle上方的数据
    excle
    找到右边的数据分析
    在这里插入图片描述
    选择回归分析
    在这里插入图片描述
    把需要进行分析的数据范围填好,置信度一般选择%95残差项根据自己的需求选择
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    对未来进行预测

    方差分析表,在这里面一共有五个数,分别是df(自由度)、SS(样本数据平方和)、MS(样本数据平均平方和)、F(F统计量的值)、Significance
    F(P值)

    从图中我们就可以得出我们所计算出来的回归方程,在这个里面的t值和P值也都能够直接看到,最后我们得出回归方程它的表达式为:

    Y=-4.43706x+1037.758

    由上公式把长期趋势T求出:
    在这里插入图片描述

    当把表格完成以后,我们需要的预测值就等于2019年各个季度的季节指数S*长期趋势T:
    在这里插入图片描述
    分析与预测就做完了

    展开全文
  • 【问题】根据下图中某啤酒生产企业2010-2015年各季度的销售量数据,预测2016年各季度产量 1. 绘制时间序列图,观察啤酒销售量的构成要素 从上图可以明显看出,啤酒销售量具有明显季节成分,而且后面年份销量比...

    希望我整理的内容对路过的你有所帮助,点赞或评论,都是相互的鼓励~

     

    【问题】根据下图中某啤酒生产企业2010-2015年各季度的销售量数据,预测2016年各季度产量

    1. 绘制时间序列图,观察啤酒销售量的构成要素

     从上图可以明显看出,啤酒销售量具有明显季节成分,而且后面年份销量比前面年份高,因此其中含有趋势成分,但其周期性难以判断。可以认定啤酒销售量序列是一个含有季节性成分和趋势成分的时间序列。

    2. 确定季节成分,计算季节指数

    2.1 计算移动平均值

    -- 对于季节数据,从2010年1季度开始,每4个季度计算4项移动平均,如:

    年份/季度4项移动平均计算4项移动平均值

    4项移动平均

       对应季度

    2010/1, 2010/2,2010/3, 2010/4(25.0+32.0+37.0+26.0) / 430.002.50
    2010/2,2010/3, 2010/4, 2011/1(32.0+37.0+26.0+30.0) / 431.253.50
    2010/3, 2010/4, 2011/1, 2011/2(37.0+26.0+30.0+38.0) / 432.754.50

    这里出现的问题是,计算出的4项移动平均,没有对应着具体的某个季度,而是在季度之间!

    为了解决这个问题,需要进行中心化处理。

    -- 对计算结果进行中心化处理,也就是再进行一次二项移动平均,得出中心化移动平均值CMA。

    这样处理之后,移动平均值便对应具体季度。思路如下(给我自己做的图点赞❤):

    按照上述思路,计算出的中心化移动平均值CMA情况如下:

    年份时间代码销售量4项移动平均中心化移动平均值
    CMA
    2010/1125.0  
     1.5   
    2232.0  
     2.5 30.000 
    3337.0 30.625
     3.5 31.250 
    4426.0 32.000
     4.5 32.750 
    2011/1530.0 33.375
     5.5 34.000 
    2638.0 34.500
     6.5 35.000 
    3742.0 34.875
     7.5 34.750 
    4830.0 34.875
     8.5 35.000 
    2012/1929.0 36.000
     9.5 37.000 
    21039.0 37.625
     10.5 38.250 
    31150.0 38.375
     11.5 38.500 
    41235.0 38.500
     12.5 38.500 
    2013/11330.0 38.625
     13.5 38.750 
    21439.0 39
     14.5 39.250 
    31551.0 39.125
     15.5 39.000 
    41637.0 39.375
     16.5 39.750 
    2014/11729.0 40.250
     17.5 40.750 
    21842.0 40.875
     18.5 41.000 
    31955.0 41.250
     19.5 41.500 
    42038.0 41.625
     20.5 41.750 
    2015/12131.0 41.625
     21.5 41.500 
    22243.0 41.875
     22.5 42.250 
    32354.0  
     23.5   
    42441.0  

    2.2 计算季节比率

    销售量 同 中心化移动平均值CMA 的比值 = 季节比率

    在乘法模型中,季节指数是以其平均数等于100%为条件而构成的,它反映了某一季度的数值占全年平均数值的大小。

    这里,我们计算出的四个季节比率的平均数为0.9963,不等于1,需进行调整。

    2.3 季节指数调整

    将每个季节比率的平均值除以四个季节比率的总平均值,得到季节指数

    从季节指数变动图可以看出,啤酒销售量的旺季是3季度,淡季是1季度。

    3. 分离季节成分

    将实际销售量分别除以相应的季节指数,将季节成分从时间序列中分离出去,得到分离季节成分的序列。

    4. 建立预测模型

    剔除季节成分后,可以观察到啤酒销量有明显的线性增长趋势。用一元线性模型进行回归分析,得到分离季节因素后的序列对应的线性趋势方程为:\widehat{Y_{t}} = 30.6067 + 0.5592 * t

    5. 预测2016年度销量

    根据趋势方程,带入t=25,可以求得2016年1季度销售量(不含季节因素),再乘以对应的季度指数,就可以求得最终的销售量预测值。

    将实际销售量和最终预测值进行做图比对,可以看出,预测效果非常好。

     

    展开全文
  • 以时间序列含有季节性周期变动的特征,计算描述该变动的季节变动指数的方法。统计中的季节指数预测法就是根据时间序列中的数据资料所呈现的季节变动规律性,对预测目标未来状况作出预测的方法。
  • 案例五季节ARIMA模型建模与预测实验指导 一实验目的 学会识别时间序列的季节变动 能看出其季节波动趋势 学会剔除季节因素的方法 了 解ARIMA模型的特点和建模过程掌握利用最小二乘法等方法对 ARIMA模型进行估计 利用...
  • 季节性ARIMA:时间序列预测

    万次阅读 2019-02-17 15:22:36
    SARIMAX (seasonal autoregressive integrated moving average with exogenous regressor)是一种常见的时间序列预测方法,可以分为趋势部分和周期性部分;每个部分又可以分为自回归、差分和平滑部分。 趋势稳定性...

    SARIMAX (seasonal autoregressive integrated moving average with exogenous regressor)是一种常见的时间序列预测方法,可以分为趋势部分和周期性部分;每个部分又可以分为自回归、差分和平滑部分。

    趋势稳定性检测Kwiatkowski–Phillips–Schmidt–Shin (KPSS) test

    null-hypothesis: 时间序列趋势稳定。significance: 0.05. 选择KPSS和不是Dickey Fuller由于KPSS的null-hypothesis是趋势稳定,所以接受条件相对于Dickey Fuller更宽松,差分阶数更少。
    y t = β ′ D t + μ t + u t y_t = \beta^{\prime} D_t + \mu_t + u_t yt=βDt+μt+ut
    μ t = μ t − 1 + ϵ t , \mu_t = \mu_{t-1} + \epsilon_t, μt=μt1+ϵt,
    ϵ t ∼ W N ( 0 , σ ϵ 2 ) \epsilon_t \sim WN(0, \sigma^2_\epsilon) ϵtWN(0,σϵ2)

    其中D为确定时间序列趋势/常数。u为随机漫步。epsilon为残差。

    LM statistic:
    K P S S = ( T − 2 ∑ t = 1 T S ^ t 2 ) / λ ^ 2 KPSS = (T^-2 \sum_{t=1}^{T} \hat S_t^2) / \hat\lambda^2 KPSS=(T2t=1TS^t2)/λ^2
    其中 S ^ t = ∑ j = 1 t u ^ j \hat S_t = \sum_{j=1}^{t} \hat u_j S^t=j=1tu^j
    u ^ \hat{u} u^ 是yt 拟合Dt的残差,$ \hat \lambda^2$ 是var(ut)的预估值。问题归结为拉格朗日乘数法证明 σ ϵ 2 = 0 \sigma^2_\epsilon = 0 σϵ2=0

    季节稳定性检测Canova-Hansen方法
    null-hypothesis: 时间序列季节稳定性。significance: 0.05

    测试频率:给定待测最大频率m以下所有 2pi/m整数倍。

    时间序列yi的拟合:
    y i = μ + x i ′ β + S i + e i y_i = \mu + x^{\prime}_i \beta + S_i + e_i yi=μ+xiβ+Si+ei
    S i = ∑ j = 1 m / 2 f j i ′ γ j S_i = \sum_{j=1}^{m/2} f^{\prime}_{ji} \gamma_j Si=j=1m/2fjiγj
    其中
    f j i ′ = ( c o s ( ( j / q ) π i ) , s i n ( ( j / q ) π i ) ) f^{\prime}_{ji} = (cos((j/q) \pi i), sin((j/q) \pi i)) fji=(cos((j/q)πi),sin((j/q)πi))

    LM statistic:
    L M = 1 n 2 t r a c e ( ( Ω ^ f ) − 1 ∑ i = 1 n F ^ i F ^ i ′ ) LM = \frac{1}{n^2} trace( (\hat \Omega ^f)^-1 \sum_{i=1}^{n} \hat F_i \hat F^{\prime}_i) LM=n21trace((Ω^f)1i=1nF^iF^i)

    其中
    F ^ i = ∑ t = 1 i f t e ^ t \hat F_i = \sum_{t=1}^{i}f_t \hat e_t F^i=t=1ifte^t
    Ω ^ f = ∑ k = − m m w ( k m ) 1 n ∑ i f i + k e ^ i + k f i ′ e ^ i \hat \Omega^f = \sum_{k=-m}^{m} w (\frac{k}{m}) \frac{1}{n} \sum_{i} f_{i+k} \hat e_{i+k} f^{\prime}_i \hat e_i Ω^f=k=mmw(mk)n1ifi+ke^i+kfie^i

    用根据待检测频率m计算f’ji向量:用sample data示例代码如下:

    import numpy as np
    import pandas as pd
    
    def seasonalDummy(tsArray, frequency):
        n = len(tsArray)
        m = frequency
        #if m == 1: tsArray.reshape([n, m])
        tt = np.arange(1, n + 1, 1)
        mat = np.zeros([n, 2 * m], dtype = float)
        for i in np.arange(0, m):
            mat[:, 2 * i] = np.cos(2.0 * np.pi * (i + 1) * tt / m)
            mat[:, 2 * i + 1] = np.sin(2.0 * np.pi * (i + 1) *tt / m)
        return mat[:, 0:(m-1)]
    
    tsArray = np.array([  4.00195672,   4.99944175,   5.99861146,   7.00000213,
             8.00124207,   9.00059539,  10.00029542,  10.99871969,
            11.99728933,  12.99965231,  14.00148869,  15.0006378 ,
            16.00117112,  17.00159081,  17.99848509,  18.99957668,
            20.00066721,  20.99932292,  21.99992471,  23.00099164,
            24.00127222,  25.00014385,  26.00014191,  27.00037435,
            27.9985619 ,  28.99949718,  29.99844772,  30.99911627,
            31.99965086,  33.00211019,  34.00240288,  34.99889972,
            36.00240406,  37.0002379 ,  37.99958145,  38.99825111,
            39.99932529,  40.9998374 ,  42.00034236,  43.00206289,
            43.9994545 ,  45.00141283,  46.00041818,  47.00132581,
            48.00216031,  48.99812424,  50.00060522,  51.00049892,
            51.99817633,  52.9997362 ])
    frequency = 6
    pd.DataFrame(seasonalDummy(tsArray, frequency)).head(2)
    

    Canova-Hansen用sample data示例代码如下:

    from numpy.linalg import lstsq as lsq
    
    n = len(tsArray)
    frec = np.ones(int((frequency + 1) / 2), dtype = int)
    ltrunc = int(np.round(frequency * np.power(n / 100.0, 0.25)))
    

    y i = μ + x i ′ β + S i + e i y_i = \mu + x^{\prime}_i \beta + S_i + e_i yi=μ+xiβ+Si+ei
    S i = ∑ j = 1 m / 2 f j i ′ γ j S_i = \sum_{j=1}^{m/2} f^{\prime}_{ji} \gamma_j Si=j=1m/2fjiγj

    其中 f j i ′ = ( c o s ( ( j / q ) π i ) , s i n ( ( j / q ) π i ) ) f^{\prime}_{ji} = (cos((j/q) \pi i), sin((j/q) \pi i)) fji=(cos((j/q)πi),sin((j/q)πi))

    # create dummy column f'ji
    r1 = seasonalDummy(tsArray, frequency)
    #create intercept column for regression
    r1wInterceptCol = np.column_stack([np.ones(r1.shape[0], dtype = float), r1])
    
    # residual ei:
    result = lsq(a = r1wInterceptCol, b = tsArray)
    residual = tsArray - np.matmul(r1wInterceptCol, result[0])
    

    long-run covariance matrix: Ω = l i m n → ∞ 1 n E ( F n F n ′ ) \Omega = lim_{n \to \infty}\frac{1}{n}E(F_n F_n^{\prime}) Ω=limnn1E(FnFn)
    在ei可能有serial correlation的情况下可以用estimate
    Ω ^ = ∑ k = − m m w ( k m ) 1 n ∑ i F i + k F i ′ \hat{\Omega} = \sum_{k=-m}^{m}w(\frac{k}{m})\frac{1}{n}\sum_{i}F_{i+k}F_i^{\prime} Ω^=k=mmw(mk)n1iFi+kFi

    fhat = np.zeros([n, frequency - 1], dtype = float)
    fhataux = np.zeros([n, frequency - 1], dtype = float)
    
    for i in np.arange(0, frequency - 1):
        fhataux[:, i] = r1[:, i] * residual
    
    for i in np.arange(0, n):
        for j in np.arange(0, frequency - 1):
            mySum = sum(fhataux[0:(i + 1), j])
            fhat[i, j] = mySum
    

    w ( ⋅ ) w(\cdot) w() 是kernel function,来自rob j. Hyndman的forecast包:

    wnw = np.ones(ltrunc, dtype = float) - np.arange(1, ltrunc + 1, 1) / (ltrunc + 1)
    

    Ω ^ f \hat{\Omega}^f Ω^f的计算:

    Ne = fhataux.shape[0]
    omnw = np.zeros([fhataux.shape[1], fhataux.shape[1]], dtype = float)
    for k in np.arange(0, ltrunc):
        omnw = omnw + np.matmul(fhataux.T[:, (k+1):Ne], fhataux[0:(Ne-(k+1)), :]) * float(wnw[k])
    cross = np.matmul(fhataux.T, fhataux)
    omnwplusTranspose = omnw + omnw.T
    omfhat = (cross + omnwplusTranspose) / float(Ne)
    

    Generalized Hannan’s model:通过设置矩阵A选择需要测试的频率的子集。在程序中用的A = eye:

    sq = np.arange(0, frequency - 1, 2)
    frecob = np.zeros(frequency - 1, dtype = int)    
    for i in np.arange(0, len(frec)):
        if (frec[i] == 1) & (i + 1 == int(frequency / 2.0)):
            frecob[sq[i]] = 1
        if (frec[i] == 1) & (i + 1 < int(frequency / 2.0)):
            frecob[sq[i]] = 1
            frecob[sq[i] + 1] = 1
    
    a = frecob.tolist().count(1)  # find nr of 1's in frecob
    A = np.zeros([frequency - 1, a], dtype = float)
    j = 0
    for i in np.arange(0, frequency - 1):
        if frecob[i] == 1:
            A[i, j] = 1
            j = j + 1
    

    LM statistic的计算 (Nyblom(1989), Hansen(1990)):当LM statistic值超过对应自由度的critical value时,拒绝 (null hypothesis = 没有单位根):
    L M s t a t i s t i c = 1 n 2 t r a c e ( ( A ′ Ω ^ f A ) − 1 A ′ ∑ i = 1 n F i ^ F i ^ ′ A ) LM statistic = \frac{1}{n^2} trace((A&#x27; \hat{\Omega}^f A)^{-1} A&#x27; \sum_{i=1}^{n}\hat{F_i} \hat{F_i}^{\prime}A) LMstatistic=n21trace((AΩ^fA)1Ai=1nFi^Fi^A)

    其中 ∑ i = 1 n F i ^ \sum_{i=1}^{n}\hat{F_i} i=1nFi^ ∑ i = 1 n F i ^ ′ \sum_{i=1}^{n} \hat{F_i}^{\prime} i=1nFi^由前面步骤中的 f ^ \hat{f} f^ 给出:

    from numpy.linalg import svd
    
    aTomfhat = np.matmul(A.T, omfhat)
    tmp = np.matmul(aTomfhat, A)
    
    machineDoubleEps = 2.220446e-16
    
    problems = min(svd(tmp)[1]) < machineDoubleEps # svd[1] are the singular values
    if problems:
        stL = 0.0
    else:
        solved = np.linalg.solve(tmp, np.eye(tmp.shape[1], dtype = float))
        step1 = np.matmul(solved, A.T)
        step2 = np.matmul(step1, fhat.T)
        step3 = np.matmul(step2, fhat)
        step4 = np.matmul(step3, A)
        stL = (1.0 / np.power(n, 2.0)) * sum(np.diag(step4))
    

    在Canova-Hansen test接受alternative hypothesis的情况下对时间序列进行lag = 待测频率的差分(季节差分)。

    季节性检测
    在进行季节性时间序列稳定性检测之前,首先判断a.时间序列是否有季节性,和b.时间序列在什么频率上有季节性。结果会作为时间序列稳定性检测的参数输入。

    季节性检测根据离散傅里叶变换和自相关函数的“与”关系得出结论(只有两个method都返回真值,才会判定时间序列有季节性)。

    离散傅里叶变换吧时间序列从时域变为频域。变换后频域的新序列为:

    X k = ∑ n = 0 N − 1 x n ⋅ [ c o s ( 2 π k n / N ) − i ⋅ s i n ( 2 π k n / N ) ] X_k = \sum_{n=0}^{N-1}x_n \cdot [cos(2 \pi kn/N) - i \cdot sin(2 \pi kn/N)] Xk=n=0N1xn[cos(2πkn/N)isin(2πkn/N)]

    在待检测频率上如果能量为最大值,则返回真值。

    自相关函数检测最大lag = 待检频率各阶上的correlation coefficient。时间点t和s之间的自相关性R的定义为:

    R ( s , t ) = E [ ( X t − μ t ) ( X s − μ s ) σ t σ s R(s, t) = \frac{E[(X_t - \mu_t)(X_s - \mu_s)}{\sigma_t \sigma_s} R(s,t)=σtσsE[(Xtμt)(Xsμs)

    如果在待检频率上的相关系数超过双边confidence interval在0.05的临界值

    clim = norm.ppf((1 + ci) / 2) / np.sqrt(n)
    

    则method返回真值。

    DFT调用了numpy.fft.fft方法。ACF调用了statsmodels.tsa.stattools.acf方法。

    测量函数:根据不同情况采用不同模型测量方法。算法使用了Rob J. Hyndman的 MASE (mean absolute scaled error)。与其他测量方法的优劣对比。

    定义:
    R-squared:
    S S t o t = ∑ i ( y i − y ˉ ) 2 SS_{tot} = \sum_{i}(y_i - \bar{y})^2 SStot=i(yiyˉ)2
    S S r e s = ∑ i ( y i − y ^ i ) 2 SS_{res} = \sum_{i}(y_i - \hat{y}_i)^2 SSres=i(yiy^i)2
    R 2 = 1 − S S r e s S S t o t R^2 = 1 - \frac{SS_{res}}{SS_{tot}} R2=1SStotSSres

    RMSE:
    R M S E = ∑ t = 1 n ( y ^ t − y t ) 2 n RMSE = \sqrt{\frac{\sum_{t=1}^{n} (\hat{y}_t - y_t)^2}{n}} RMSE=nt=1n(y^tyt)2

    MAE:
    M A E = ∑ t = 1 n ∣ y ^ t − y t ∣ n MAE = \frac{\sum_{t=1}^{n} |\hat{y}_t - y_t|}{n} MAE=nt=1ny^tyt

    MAPE:
    M A P E = 100 n ∑ t = 1 n ∣ y ^ t − y t y t ∣ MAPE = \frac{100}{n} \sum_{t=1}^{n} | \frac{\hat{y}_t - y_t}{y_t} | MAPE=n100t=1nyty^tyt

    sMAPE:
    S M A P E = 100 n ∑ t = 1 n ∣ y ^ t − y t ∣ ( ∣ y ^ t ∣ + ∣ y t ∣ ) / 2 SMAPE = \frac{100}{n} \sum_{t=1}^{n} \frac{|\hat{y}_t - y_t|}{(|\hat{y}_t| + |y_t|)/2} SMAPE=n100t=1n(y^t+yt)/2y^tyt

    MASE without seasonality:
    M A S E = ∑ t = 1 n ∣ y ^ t − y t ∣ n n − 1 ∑ t = 2 n ∣ y t − y t − 1 ∣ MASE = \frac{\sum_{t = 1}^{n} |\hat{y}_t - y_t|}{\frac{n}{n-1} \sum_{t=2}^{n} |y_t - y_{t-1}|} MASE=n1nt=2nytyt1t=1ny^tyt

    MASE with seasonality:
    M A S E = ∑ t = 1 n ∣ y ^ t − y t ∣ n n − m ∑ t = m + 1 n ∣ y t − y t − m ∣ MASE = \frac{\sum_{t = 1}^{n} |\hat{y}_t - y_t|}{\frac{n}{n-m} \sum_{t=m+1}^{n} |y_t - y_{t-m}|} MASE=nmnt=m+1nytytmt=1ny^tyt

    趋势平滑:在SARIMA模型中引入时间序列的趋势作为exogenous regressor(X),有几种算法可以选择:

    Lowess (locally weighted scatterplot smoothing): 基于KNN的非参数拟合方法。代码调用了 statsmodels.api.nonparametric.lowess

    RANSAC
    Random sample consensus,一种robust regression方法,可以探测异常值并使拟合对于异常值的敏感度降低。代码调用sklearn.linear_model.RANSACRegressor

    Weighted moving average:

    指数平滑递归表达:
    W n = ( 1 − α ) ∗ W n − 1 + α ∗ y n W_n = (1-\alpha) * W_{n-1} + \alpha * y_n Wn=(1α)Wn1+αyn
    W 0 = y 0 W_0 = y_0 W0=y0
    α = 2 / ( s p a n + 1 ) \alpha = 2 / (span + 1) α=2/(span+1)

    调用了 pandas.ewma

    关于脉冲响应

    如果有另外的(多维)exogenous regressor Xi 影响预测模型,比如类似离散脉冲波形的机会点数据:假设各个脉冲regressor之间是独立的,并不受时间序列本身的影响:可以用多元线性回归首先发现Xi 和时间序列趋势yhat的关系。

    考虑到历史上时间序列对于脉冲输入的响应不同,在算法中会测试三种不同脉冲响应与时间序列的相关性,并挑选相关性最强的脉冲响应作为Xi向量。这三种分别是a. 原始脉冲,b. 经指数平滑的脉冲,c. 经指数平滑并累加的脉冲(cumulative)。

    示例:

    %matplotlib inline
    import numpy as np
    import pandas as pd
    import warnings
    warnings.filterwarnings('ignore')
    
    def myEwma(x, histPeriod = 6, fcstPeriod = 18):    
        from pandas import ewma
        xfit = ewma(x, span = histPeriod)
        xpred = np.zeros(fcstPeriod)
        tmp = np.zeros(histPeriod + 1)
        tmp[:histPeriod] = x[-histPeriod:].copy()
        tmp[histPeriod] = xfit[-1]
        for i in np.arange(0, fcstPeriod):
            xpred[i] = ewma(tmp, span = histPeriod)[-1]
            tmp = shiftLeft(tmp)
            tmp[-1] = xpred[i]
        return xfit, xpred
    
    def shiftLeft(_ar, step = 1):
        if step == 0:
            return _ar
        ar = _ar.copy()
        ar[0:-step] = ar[step:]
        ar[-step:] = 0
        return ar
    
    original = np.array([3000,0,0,0,0,0,0,0,0,0,1000,0,0,0,0,0,0,0,0,1000,0,0,0,0,0,0,0,0,0,0])
    pd.DataFrame(original).plot(title = 'original')
    movingAverage = myEwma(original)[0]
    pd.DataFrame(movingAverage).plot(title = 'moving average')
    cumulative = movingAverage.cumsum()
    pd.DataFrame(cumulative).plot(title = 'cumulative')
    

    检测相加性:时间序列拆分成趋势,季节性和残差的方式有相加和相乘两种。

    y = Trend + Seasonality + Residual, 或者

    y = Trend * Seasonality * Residual

    如果是相乘的情况,残差的分布是不稳定的。所以如果时间序列没有通过相加性检测,会对时间序列做对数处理,变为相加:

    y n e w = l o g ( y ) = l o g ( T r e n d ∗ S e a s o n a l i t y ∗ R e s i d u a l ) = l o g ( T r e n d ) + l o g ( S e a s o n a l i t y ) + l o g ( R e s i d u a l ) ynew = log(y) = log(Trend * Seasonality * Residual) = log(Trend) + log(Seasonality) + log(Residual) ynew=log(y)=log(TrendSeasonalityResidual)=log(Trend)+log(Seasonality)+log(Residual)

    自动搜索SARIMA参数空间 Auto ARIMA:搜索差分阶数,检测季节性的存在,并搜索能给出Akaike Information Criterion最小值的ARMA模型维度 ARMA(p, q, P, Q)

    ARMA模型范式:

    X t − α 1 X t − 1 − ⋯ − α p ′ X t − p ′ = ϵ t + θ 1 ϵ t − 1 + ⋯ + θ q ϵ t − q X_t - \alpha_1 X_{t-1} - \dots - \alpha_{p^{\prime}} X_{t-p^{\prime}} = \epsilon_t + \theta_1 \epsilon_{t-1} + \dots + \theta_q \epsilon_{t-q} Xtα1Xt1αpXtp=ϵt+θ1ϵt1++θqϵtq

    自动搜索参数空间返回的结果是p和q的个数。作为输入给SARIMAX核心算法

    搜索参数空间的初始值来自Rob J. Hyndman的paper section3.2.

    SARIMAX 带外部变量的季节性自回归差分平滑算法:预测是基于SARIMAX的state-space representation。 核心算法调用了statsmodels.api.tsa.statespace.SARIMAX.

    总结

    以上是SARIMAX各个功能模块的详细数学方法和编程实现。由于一些语言(包括python)的时间序列预测开源算法包里缺少比如稳定性检测、季节性差分和自动搜索参数空间的功能,需要自己依照数学公式实现。

    展开全文
  • 从题目问题入手,对于数据的预测必须考虑时间数据、温度因素和价格因素对预测数据的影响,提取每年1月的数据进行预测,数据表的时间序列关系从横向可利用趋势向外延伸预测,纵向可利用季节变动预测,温度与待预测...
  • 长期趋势消除法利用移动平均法来测定长期趋势,然后根据时间序列乘法模型来测定季节变动。 解答: 说明: D3383为前面数据的一元线性回归的结果。(快捷方法:选中前面的所有...
  • R语言时间序列之数据平滑及预测

    万次阅读 2017-07-27 11:15:41
    一 移动平均   移动平均能消除数据中的季节变动和不规则变动。若序列中存在周期变动,则通常以周期为移动平均项数。移动平均法可以通过数据显示出数据长期趋势的变动规律。    R可用filter()函数做移动平均。...
  • 可以大致判断该数据存在着序列相关性,以及季节性的变动,同时没有缺失值以及明显异常的点。 数据初步分析和预处理 (1)正态性 时间序列模型的建立和预测通常是在假设数据是正态分布的情况下进行的。通过对序列的...
  • 《统计预测:方法与应用》比较详尽地介绍了用于预测的定量分析方法:因果回归分析法和... 第六章 季节变动预测法  第七章 马尔可夫法  第八章 博克斯——詹金斯法  第九章 ECM模型和ARCH模型的应用  参考书目
  • 时序分析-季节因素

    千次阅读 2020-03-22 16:31:38
    目录 1时序分析的基础 1.1 简介 1.2 分类 2 分析套路 ...4.2 季节序列分析 4.1 同期平均法 4.1.1 简单季节指数法 4.1.2 趋势季节指数法 4.2 长期趋势剔除法 4.2.1 长期趋势剔除法+简单移动平...
  • 内部描述 7.1时间序列预测法 7.2平均数预测法 7.3指数平滑法 7.4季节变动预测法 7.5趋势外推预测法
  • SPSS-季节性分析

    千次阅读 2020-10-30 14:31:53
    用SPSS做一个季节性分析,可是输入数据后点“分析→预测季节性分解”,老是会出现周期性分解要求指定至少一个周期日期组件请问这是什么原因呢? 我是不是没有指定周期是多少,请问如何指定呢? 做spss时间序列...
  • 季节性及其分离图.ppt

    2021-01-17 16:08:21
    未来是不可预测的,不管人们掌握 多少信息,都不可能存在能作出正 确决策的系统方法。 ——C. R. Rao 第 10 章 时间序列预测 10.1 时间序列及其分解 10.2 时间序列预测的程序 10.3 平滑法预测 10.4 趋势预测...
  • 在此基础上,基于时间序列加法分解原理,分离提取涌水量时间序列中的长期趋势、季节指数、循环因子和随机变动参数,并应用熵权法确定各参数权重,建立工作面涌水量预测的非线性回归修正模型,并将模拟预测结果与忽略...
  • 时间序列预测方法最全总结!

    万次阅读 多人点赞 2021-03-12 00:15:38
    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。需要明确一点的是,与回归分析预测模型...
  • 《统计学(第六版)》贾俊平 第13章 时间序列分析和预测 时间序列 times series 时间序列是同一现象在不同时间上的相继观察值排列而成的序列。经济数据大多数以时间序列的形式给出。根据时间的不同,时间序列中的事件...
  • 利用深度学习来预测股票价格变动

    万次阅读 多人点赞 2019-09-10 20:52:12
    在这篇文章中,我将创建一个预测股票价格变动的完整过程。我们将使用生成对抗网络(GAN)与LSTM(一种循环神经网络)作为生成器,使用卷积神经网络CNN作为鉴别器。我们使用LSTM的原因很明显,我们正在尝试预测时间...
  • S:季节变动 C:循环变动 I:不规则变动 乘法模型假定四个成分对现象发展的影响是相互的。长期趋势成分取与时间序列原始指标值Y相同计量单位的绝对量,以长期趋势为基础,其余成分均以比率表示。 加法模型假定四个...
  • 指数平滑法——趋势平滑预测方法

    万次阅读 2019-07-09 09:08:09
    原文地址:... 指数平滑法(Exponential Smoothing,ES) 目录 1什么是指数平滑法 2指数平滑法的基本公式 3指数平滑的预测公式 3.1(一) 一次指数平滑预测 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,732
精华内容 692
关键字:

季节变动预测

友情链接: stc_led.rar