精华内容
下载资源
问答
  • 希望我整理的内容对路过的你有所帮助,点赞或评论,都是相互的鼓励~ 【问题】根据下图中某啤酒生产企业2010-2015年各季度的销售量数据,预测2016年各季度产量 ...可以认定啤酒销售量序列是一个含有季节性成分和趋...

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

     

    【问题】根据下图中某啤酒生产企业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季度销售量(不含季节因素),再乘以对应的季度指数,就可以求得最终的销售量预测值。

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

     

    展开全文
  • 分解数据: 时间序列稳定化 测试方法: 测试序列稳定: 看以看到整体的序列并没有到达稳定要求,要将时间序列转为平稳序列,有如下几种方法:DeflationbyCPI Logarithmic(取对数)
  • SPSS-季节性分析

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

    做spss时间序列分析,首先要定义日期变量,只有用spss定义的日期才会被识别为时间序列,其他诸如手动输入日期都是不行的。在spss的data菜单中选择定义日期即可。
    来源于此

    展开全文
  • 利用SPSS 和Matlab 进行时间序列预测1.移动平均和滑动平均计算例1:下表给出了某地区1990~2004年粮食产量数据(表1)。试分别用Matlab 和SPSS 软件,对该地区的粮食产量进行移动平均和和滑动平均计算。表1 某地区1990...

    §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(表示进行三点滑动平均)。

    展开全文
  • 以时间序列含有季节性周期变动的特征,计算描述该变动的季节变动指数的方法。统计中的季节指数预测法就是根据时间序列中的数据资料所呈现的季节变动规律性,对预测目标未来状况作出预测的方法。
  • 利用季节预测法建立了三江平原井灌水稻区大气降雨预报模型,经与实测值比较,精度较高.可在灌区降雨预防及灌溉管理中应用.同时对于该地区推求水稻净灌溉需水量、灌溉定额、优化灌溉制度、节约地下水资源、实施节水灌溉...
  • 电力系统日负荷、月负荷和季度负荷变化具有明显的周期,根据日、月、季负荷变化特点,将季节周期预测法应用于电力系统季负荷预测中.计算结果表明,用该预测方法预测电力系统季负荷具有较高的预测精度.
  • 季节性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)的时间序列预测开源算法包里缺少比如稳定性检测、季节性差分和自动搜索参数空间的功能,需要自己依照数学公式实现。

    展开全文
  • 在我们的研究中,我们考虑了对印度旁遮普省降雨数据进行统计分析的季节性和周期性时间序列模型。 在本研究论文中,我们应用季节性自回归综合移动平均和周期自回归模型来分析旁遮普省的降雨数据。 为了评估模型识别...
  • 参考文献用NQT方法去除时间序列的季节性周期(譬如金融、流量等时间序列以一年为周期,当时间序列样本的采样点小于一年时,如日流量、月流量等,这个季节性周期是非常明显的)。该方法的基本思路是:1、给定一组时间...
  • 时间序列预测,非季节性ARIMA及季节性SARIMA

    万次阅读 多人点赞 2019-03-24 21:55:00
    我们将首先介绍和讨论自相关,平稳性和季节性的概念,并继续应用最常用的时间序列预测方法之一,称为ARIMA。 介绍 时间序列提供了预测未来价值的机会。基于以前的价值观,可以使用时间序列来预测经济,天气和...
  • importjava.util.ArrayList;.../***三次指数平滑预测,最多外推一个周期*@authorAdministrator**/publicclassHoltWintersTripleExponentialImpl{staticdouble[]alphas=newdouble[]{0.1,0.2,0.3,0.4,0.5,0...
  • 由于电力负荷以年为单位周期性波动,且呈现出逐年上升的趋势,因此,适合于用温斯特线性与季节性指数平滑进行预测.但由于此方法对于负荷数据中的异常值极其敏感,很有可能导致预测结果与实际电力负荷趋势相反....
  • 展开全部1、收集历年(通常至少有三年)各月或各季的统计资料(观察值)。62616964757a686964616fe59b9ee7ad...5、根据未来年度的全年趋势预测值,求出各月或各季度的平均趋势预测值,然后乘以相应季节指数,...
  • 时间序列平滑预测法

    2021-10-29 16:12:45
    时间序列分析预测法:将预测目标历史数据按时间顺序排列,按时间变化趋势外推预测目标未来值 时间序列有长期趋势、季节变动、循环变动、不规则变动。 移动平均法: T 期移动平均数: Mt = (y(t) + y(t-1) + ... ...
  • 指数平滑 概念:对过去的观察值得加权平均值进行预测的一种方法,适用于水平历史数据 一次指数平滑:Ft+1 =aYt+(1-a)Ft Ft表示t时预测值,Yt表示t时观察值。t取1时,F1=Y1。a为平滑系数,介于0到1之间。 最终的...
  • 第一次尝试使用Python创建季节性ARIMA模型

    千次阅读 多人点赞 2019-04-25 21:26:48
    时间序列之ARIMA模型前言ARIMA模型简介Python实现ARIMA模型预测数据的获取与准备绘制1995-2002年时间序列趋势图去均值化后ADF平稳检验以及差分绘制自相关函数以及偏相关函数图生成一个适合你的列表创建一个表格...
  • 本文介绍了布朗单一参数线性指数平滑、霍特双参数指数平滑、布朗三参数指数平滑及温特线性和季节性指数平滑四种时间序列平滑在产品产量预测中的应用,并对这四种方法的适用范围进行了总结。
  • 时间序列预测法

    千次阅读 2019-04-28 11:19:09
    转 时间序列预测法 一种历史资料延伸预测,也称历史引伸预测法。是以时间数列所能反映的社会经济现象的发展过程和规律,进行引伸外推,预测其发展趋势的方法。 时间序列,也叫时间数列、历史复数或动态数列。它...
  • 机器学习之时序预测问题简单原理及实战。
  • EXCEL篇—时间序列分析(季节指数

    万次阅读 多人点赞 2019-08-13 13:35:42
    之前跟大家一起分享了如何用EXCEL进行...时间序列分析的主要目的是根据已有的历史数据对未来进行预测。经济数据中大多数以时间序列的形式给出。根据观察时间的不同,时间序列中的时间可以是年份、季度、月份或其他任...
  • 时间序列指数平滑预测法重点(Top highlight)In time series forecasting, the presence of dirty and messy data can hurt the final predictions. This is true, especially in this domain, because the temporal ...
  • 季节性及其分离图.ppt

    2021-01-17 16:08:21
    未来是不可预测的,不管人们掌握 多少信息,都不可能存在能作出正 确决策的系统方法。... Rao 第 10 章 时间序列预测 10.1 时间序列及其分解 10.2 时间序列预测的程序 10.3 平滑法预测 10.4 趋势预测...
  • 3.2 时间序列的指数平滑预测法指数平滑法(Expinential smoothing method)的思想也是对时间序列进行修匀以消除不规则和随机的扰动。该方法是建立在如下基础上的加权平均法:即认为时间序列中的近期数据对未来值的影响...
  •  在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(Triple/Three Order Exponential Smoothing,Holt-Winters)算法可以很好的进行时间序列的预测。  时间序列数据一般有以.....
  • 3.3时间序列分析 3.3.1时间序列概述 1. 基本概念 1一般概念:系统...2研究实质:通过处理预测目标本身的时间序列数据,获得事物随时间过程的演变特性与规律,进而预测事物的未来发展。它不研究事物之间相互依存的因...
  • 我们的很多数据是具有季节性或者趋势性的,就是随着时间越来越久,数据随着一个趋势来变化,这种内在的趋势对数据的预测有一定的影响。那么怎么来消除这个影响呢? 我们可以使用差分,差分简单说就是在一系列...
  • [Python][pmdarima] 季节性ARIMA模型学习

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

空空如也

空空如也

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

季节性预测法