时间序列预测_时间序列预测模型 - CSDN
精华内容
参与话题
  • 时间序列分析和预测(含实例及代码)

    万次阅读 多人点赞 2020-07-10 10:54:48
    时间序列预测关键:确定已有的时间序列的变化模式,并假定这种模式会延续到未来。 时间序列预测法的基本特点 假设事物发展趋势会延伸到未来 预测所依据的数据具有不规则性 不考虑事物发展之间的因果...

    导论

    研究时间序列主要目的:进行预测,根据已有的时间序列数据预测未来的变化。

    时间序列预测关键:确定已有的时间序列的变化模式,并假定这种模式会延续到未来。

    时间序列预测法的基本特点
    • 假设事物发展趋势会延伸到未来
    • 预测所依据的数据具有不规则性
    • 不考虑事物发展之间的因果关系

    时间序列数据用于描述现象随时间发展变化的特征

    时间序列分析就其发展历史阶段和所使用的统计分析方法看:传统的时间序列分析和现代时间序列分析

    一、时间序列及其分解

    时间序列(time series)是同一现象在不同时间上的相继观察值排列而成的序列。根据观察时间的不同,时间序列中的时间可以是可以是年份、季度、月份或其他任何时间形式。

    时间序列:

    (1)平稳序列(stationary series)

    是基本上不存在趋势的序列,序列中的各观察值基本上在某个固定的水平上波动,在不同时间段波动程度不同,但不存在某种规律,随机波动

    (2)非平稳序列(non-stationary series)

    是包含趋势、季节性或周期性的序列,只含有其中一种成分,也可能是几种成分的组合。可分为:有趋势序列、有趋势和季节性序列、几种成分混合而成的复合型序列。

    趋势(trend):时间序列在长时期内呈现出来的某种持续上升或持续下降的变动,也称长期趋势。时间序列中的趋势可以是线性和非线性。

    季节性(seasonality):季节变动(seasonal fluctuation),是时间序列在一年内重复出现的周期波动。销售旺季,销售淡季,旅游旺季、旅游淡季,因季节不同而发生变化。季节,不仅指一年中的四季,其实是指任何一种周期性的变化。含有季节成分的序列可能含有趋势,也可能不含有趋势。

    周期性(cyclicity):循环波动(cyclical fluctuation),是时间序列中呈现出来的围绕长期趋势的一种波浪形或振荡式波动。周期性是由商业和经济活动引起的,不同于趋势变动,不是朝着单一方向的持续运动,而是涨落相间的交替波动;不同于季节变动,季节变动有比较固定的规律,且变动周期大多为一年,循环波动则无固定规律,变动周期多在一年以上,且周期长短不一。周期性通常是由经济环境的变化引起。

    除此之外,还有偶然性因素对时间序列产生影响,致使时间序列呈现出某种随机波动。时间序列除去趋势、周期性和季节性后的偶然性波动,称为随机性(random),也称不规则波动(irregular variations)。

    时间序列的成分可分为4种:趋势(T)、季节性或季节变动(S)、周期性或循环波动(C)、随机性或不规则波动(I)。传统时间序列分析的一项主要内容就是把这些成分从时间序列中分离出来,并将它们之间的关系用一定的数学关系式予以表达,而后分别进行分析。按4种成分对时间序列的影响方式不同,时间序列可分解为多种模型:加法模型(additive model),乘法模型(multiplicative model)。乘法模型:Y_t=T_t\times S_t\times C_t\times I_t

    二、描述性分析

    1、图形描述

    2、增长率分析

    是对现象在不同时间的变化状况所做的描述。由于对比的基期不同,增长率有不同的计算方法。

    (1)增长率(growth rate):增长速度,是时间序列中报告期观察值与基期观察值之比减1后的结果,用%表示。由于对比的基期不同,可分为环比增长率和定基增长率。

    环比增长率:是报告期观察值与前一时期观察值之比减1,说明现象逐期增长变化的程度;

    定基增长率是报告期观察值与某一固定时期观察值之比减1,说明现象在整个观察期内总的增长变化程度。

    设增长率为G:          环比增长率 :G_i=\frac{Y_i-Y_{i-1}}{Y_{i-1}}=\frac{Y_i}{Y_{i-1}}-1,i=1,2...,n

                                           定基增长率 :G_i=\frac{Y_i-Y_{0}}{Y_{0}}=\frac{Y_i}{Y_{0}}-1,i=1,2...,n

    (2)平均增长率(average rate of increase):平均增长速度,是时间序列中逐期环比值(环比发展速度)的几何平均数减1的结果:\bar{G}=\sqrt[n]{\frac{Y_1}{Y_{0}}\times \frac{Y_2}{Y_{1}}...\times \frac{Y_n-Y_{n-1}}{Y_{i-1}}}-1=\sqrt[n]{\frac{Y_n}{Y_{0}}}-1   n:环比值的个数

    (3)增长率分析中应注意的问题

    i:    当时间序列中的观察出现0或负数时,不宜计算增长率。这种序列计算增长率,要么不符合数学公理,要么无法解释其实际意义。可用绝对数进行分析。

    ii:    有些情况下,不能单纯就增长率论增长率,注意增长率与绝对水平结合起来。增长率是一个相对值,与对比的基数值的大小有关。这种情况,计算增长1%的绝对值来克服增长率分析的局限性:

    增长1%的绝对值表示增长率每增长一个百分点而增加的绝对数量:增长1%的绝对值=前期水平/100

    三、时间序列预测的程序

    时间序列分析的主要目的之一是根据已有的历史数据对未来进行预测。时间序列含有不同的成分,如趋势、季节性、周期性和随机性。对于一个具体的时间序列,它可能含有一种成分,也可能同时含有几种成分,含有不同成分的时间序列所用的预测方法是不同的。预测步骤:

    第一步:确定时间序列所包含的成分,确定时间序列的类型

    第二步:找出适合此类时间序列的预测方法

    第三步:对可能的预测方法进行评估,以确定最佳预测方案

    第四步:利用最佳预测方案进行预测

    1、确定时间序列成分

    (1)确定趋势成分

    确定趋势成分是否存在,可绘制时间序列的线图,看时间序列是否存在趋势,以及存在趋势是线性还是非线性。

    利用回归分析拟合一条趋势线,对回归系数进行显著性检验。回归系数显著,可得出线性趋势显著的结论。

    (2)确定季节成分

    确定季节成分是否存在,至少需要两年数据,且数据需要按季度、月份、周或天来记录。可绘图,年度折叠时间序列图(folded annual time series plot),需要将每年的数据分开画在图上,横轴只有一年的长度,每年的数据分别对应纵轴。如果时间序列只存在季节成分,年度折叠时间序列图中的折线将会有交叉;如果时间序列既含有季节成分又含有趋势,则年度折叠时间序列图中的折线将不会有交叉,若趋势上升,后面年度的折线将会高于前面年度的折线,若下降,则后面年度的折线将会低于前面年度的折线。

    2、选择预测方法

    确定时间序列类型后,选择适当的预测方法。利用时间数据进行预测,通常假定过去的变化趋势会延续到未来,这样就可以根据过去已有的形态或模式进行预测。时间序列的预测方法:传统方法:简单平均法、移动平均法、指数平滑法等,现代方法:Box-Jenkins 的自回归模型(ARMA)。

    一般来说,任何时间序列都会有不规则成分存在,在商务和管理数据中通常不考虑周期性,只考虑趋势成分和季节成分。

    不含趋势和季节成分的时间序列,即平稳时间序列只含随机成分,只要通过平滑可消除随机波动。因此,这类预测方法也称平滑预测方法。

    3、预测方法的评估

    在选择某种特定的方法进行预测时,需要评价该方法的预测效果或准确性。评价方法是找出预测值与实际值的差距,即预测误差。最优的预测方法就是预测误差达到最小的方法。

    预测误差计算方法:平均误差,平均绝对误差、均方误差、平均百分比误差、平均绝对百分比误差。方法的选择取决于预测者的目标、对方法的熟悉程度。

    (1)平均误差(mean error):Y:观测值,F:预测值,n预测值个数

                   ME=\frac{\sum_{i=1}^{n}(Y_i-F_i)}{n}     

    由于预测误差的数值可能有正有负,求和的结果就会相互抵消,这种情况下,平均误差可能会低估误差。

    (2)平均绝对误差(mean absolute deviation)是将预测误差取绝对值后计算的平均无擦,MAD:

                  MAD=\frac{\sum_{i=1}^{n}|Y_i-F_i|}{n}

    平均绝对误差可避免误差相互抵消的问题,因而可以准确反映实际预测误差的大小。

    (3)均方误差(mean square error):通过平方消去误差的正负号后计算的平均误差,MSE:

                MSE=\frac{\sum_{i=1}^{n}(Y_i-F_i)^2}{n}

    (4)平均百分比误差和平均绝对百分比误差

    ME,MAD,MSE的大小受时间序列数据的水平和计量单位的影响,有时并不能真正反映预测模型的好坏,只有在比较不同模型对同一数据的预测时才有意义。平均百分比误差(mean percentage error,MPE)和平均绝对百分比误差(mean absolute percentage error,MAPE)则不同,它们消除了时间序列数据的水平和计量单位的影响,是反映误差大小的相对值。

    MPE=\frac{\sum_{i=1}^{n}(\frac{Y_i-F_i}{Y_i}\times 100)}{n} 

    MAPE=\frac{\sum_{i=1}^{n}(\frac{|Y_i-F_i|}{Y_i}\times 100)}{n}

    4、平稳序列的预测

    平稳时间序列只含有随机成分,预测方法:简单平均法、移动平均法、指数平滑法。主要通过对时间序列进行平滑以消除随机波动,又称平滑法。平滑法可用于对时间序列进行短期预测,也可对时间序列进行平滑以描述序列的趋势(线性趋势和非线性趋势)。

    (1)简单平均法:根据已有的t期观察值通过简单平均法来预测下一期的数值。设时间序列已有的t期观察值为Y_1,Y_2,...,Y_t,则t+1期的预测值F_{t+1}为:F_{t+1}=\frac{1}{t}(Y_1+Y_2+...+Y_t)=\frac{1}{t}\sum_{i=1}^{t} Y_i

    到了t+1期后,有了t+1期的实际值,t+1期的预测误差e_{t+1}为:e_{t+1}=Y_{t+1}-F_{t+1}

    t+2期预测值:F_{t+2}=\frac{1}{t+1}(Y_1+Y_2+...+Y_t+Y_{t+1})=\frac{1}{t+1}\sum_{i=1}^{t+1} Y_i

    简单平均法适合对较为平稳的时间序列进行预测,即当时间序列没有趋势时,用该方法比较好。但如果时间序列有趋势或季节成分,该方法的预测则不够准确。简单平均法将远期的数值和近期的数值看作对未来同等重要。从预测角度,近期的数值比远期的数值对未来有更大的作用,因此简单平均法预测的结果不够准确。

    (2)移动平均法(moving average):通过对时间序列逐期递移求得平均数作为预测值的一种预测方法,有简单移动平均法(simple moving average)和加权移动平均法(weighted moving average).

    简单移动平均将最近k期数据加以平均,作为下一期的预测值。设移动平均间隔为k(1<k<t),则t期的移动平均值为:

    \bar{Y}_{t}=\frac{Y_{t-k+1}+Y_{t-k+2}+...+Y_{t-1}+Y_{t}}{k}  是对时间序列的平滑结果,通过这些平滑值可描述出时间序列的变化形态或趋势。也可以用来预测。

    t+1期的简单移动平均预测值为:F_{t+1}=\bar{Y}_{t}=\frac{Y_{t-k+1}+Y_{t-k+2}+...+Y_{t-1}+Y_{t}}{k}

    t+2期的简单移动平均预测值为:F_{t+2}=\bar{Y}_{t+1}=\frac{Y_{t-k+2}+Y_{t-k+3}+...+Y_{t}+Y_{t+1}}{k}

    移动平均法只使用最近k期的数据,在每次计算移动平均值时,移动的间隔都为k,也适合对较为平稳的时间序列进行预测。应用关键是确定合理的移动平均间隔k。对于同一个时间序列,采用不同的移动间隔,预测的准确性是不同的。可通过试验的方法,选择一个使均方误差达到最小的移动间隔。移动间隔小,能快速反映变化,但不能反映变化趋势;移动间隔大,能反映变化趋势,但预测值带有明显的滞后偏差。

    移动平均法的基本思想:移动平均可以消除或减少时间序列数据受偶然性因素干扰而产生的随机变动影响,适合短期预测。

    (3)指数平滑法(exponential smoothing)是通过对过去的观察值加权平均进行预测,使t+1期的预测值等t期的实际观察值与t期的预测值的加权的平均值。指数平滑法是从移动平均法发展而来,是一种改良的加权平均法,在不舍弃历史数据的前提下,对离预测期较近的历史数据给予较大权数,权数由近到远按指数规律递减,因此称指数平滑。指数平滑有一次指数平滑法、二次指数平滑法、三次指数平滑法等。

    一次指数平滑法也称单一指数平滑法(single exponential smoothing),只有一个平滑系数,且观察值离预测时期越久远,权数变得越小。一次指数平滑是将一段时期的预测值与观察值的线性组合作为t+1时期的预测值,预测模型为:

    F_{t+1}=\alpha Y_t+(1-\alpha )F_t      \alpha:平滑系数(0\leq \alpha\leq 1

    t+1期的数据是t期的实际观察值与t期的预测值的加权平均。1期的预测值=1期的观察值

    2期预测值:F_{2}=\alpha Y_1+(1-\alpha )F_1=\alpha Y_1+(1-\alpha )Y_1=Y_1

    3期预测值:F_{3}=\alpha Y_2+(1-\alpha )F_2=\alpha Y_2+(1-\alpha )Y_1

    4期预测值:F_{4}=\alpha Y_3+(1-\alpha )F_3=\alpha Y_3+\alpha (1-\alpha )Y_2+ (1-\alpha )^2Y_1

    对指数平滑法的预测精度,用均方误差来=衡量:

    F_{t+1}=\alpha Y_t+(1-\alpha )F_t

              =F_t+\alpha (Y_t-F_t)

    F_{t+1}是t期的预测值F_{t}加上用\alpha调整的t期预测误差(Y_t-F_t)。

    使用指数平滑法时, 关键问题是确定一个合适的平滑系数\alpha,不同的\alpha对预测结果产生不同的影响。

    \alpha=0,预测值仅仅是重复上一期的预测结果;\alpha=1,预测值就是上一期的实际值;

    \alpha越接近1,模型对时间序列变化的反应就越及时,因为它给当前的实际值赋予了比预测值更大的权数;

    \alpha越接近0,给当前的预测值赋予了更大的权数,模型对时间序列变化的反应就越慢。

    当时间序列有较大随机波动时,选较大\alpha,以便能很快跟上近期的变化;当时间序列比较平稳时,选较小\alpha

    实际应用中,需考虑预测误差,用均方误差衡量预测误差大小。确定\alpha时,可选择几个\alpha进行预测,然后找出预测误差最小的作为最后的\alpha值。

    与移动平均法一样,一次指数平滑法可用于对时间序列进行修匀,以消除随机波动,找出序列的变化趋势。

    用一次指数平滑法进行预测时,一般\alpha取值不大于0.5,若大于0.5,才能接近实际值,说明序列有某种趋势或波动过大。

    阻尼系数  \beta=1-\alpha ,阻尼系数越小,近期实际值对预测结果的影响越大,反之,越小。阻尼系数是根据时间序列的变化特性来选取。

    5、趋势型序列的预测

    时间序列的趋势可分为线性趋势和非线性趋势,若这种趋势能够延续到未来,就可利用趋势进行外推预测。有趋势序列的预测方法主要有线性趋势预测、非线性趋势预测和自回归模型预测。

    (1) 线性趋势预测

    线性趋势(linear trend)是指现象随着时间的推移而呈现稳定增长或下降的线性变化规律。

    趋势方程:\hat{Y}_t=b_0+b_1t     \hat{Y}_t:时间序列Y_t的预测值;b_1是趋势线斜率,表示时间t 变动一个单位,观察值的平均变动数量

    (2) 非线性趋势预测

    序列中的趋势通常可认为是由于某种固定因素作用同一方向所形成的。若这种因素随时间推移按线性变化,则可对时间序列拟合趋势直线;若呈现出某种非线性趋势(non-linear trend),则需要拟合适当的趋势曲线。

    i:   指数曲线(exponential curve):用于描述以几何级数递增或递减的现象,即时间序列的观察值Y_t按指数规律变化,或者时间序列的逐期观察值按一定的增长率增长或衰减。一般的自然增长及大多数经济序列都有指数变化趋势。

    趋势方程:\hat{Y}_t=b_0b_1^{t}     b_0,b_1为待定系数

    b_1>1,则增长率随着时间t的增加而增加;若b_1<1,则增长率随着时间t的增加而降低;若b_0>0,b_1<1,则预测值\hat{Y}_t逐渐降低以到0为极限。

    为确定b_0,b_1,可采用线性化手段将其化为对数直线形式,两端取对数:lg\hat{Y}_t=lgb_0+tlgb_1

    根据最小二乘原理,按直线形式的常数确定方法求得 lgb_0,lgb_1,求出 lgb_0,lgb_1后,再取其反对数,即可得到b_0,b_1

    \left\{\begin{matrix}\sum lgY=nlgb_0+lgb_1\sum t\\\sum t lgY_t=lgb_0\sum t+lgb_1\sum t^2\end{matrix}\right.

    ii:   多阶曲线:

    有些现象变化形态复杂,不是按照某种固定的形态变化,而是有升有降,在变化过程中可能有几个拐点。这时就需要拟合多项式函数。当只有一个拐点时,可拟合二项曲线,即抛物线;当有两个拐点时,需要拟合三阶曲线;有k-1个拐点时,需要拟合k阶曲线。

    6、复合型序列的分解预测

    复合型序列是指含有趋势、季节、周期和随机成分的序列。对这类序列的预测方法是将时间序列的各个因素依次分解出来,然后进行预测。由于周期成分的分析需要有多年的数据,实际中很难得到多年的数据,因此采用的分解模型为:Y_t=T_t\times S_t\times I_t

    预测方法有:季节性多元回归模型、季节自回归模型和时间序列分解法预测。

    分解法预测步骤:

    第一步:确定并分离季节成分。计算季节指数,以确定时间序列中的季节成分。然后将季节成分从时间序列中分离出去,即用每一个时间序列观察值除以相应的季节指数,以消除季节性。

    第二步:建立预测模型并进行预测。对消除了季节成分的时间序列建立适当的预测模型,并根据这一模型进行预测。

    第三步:计算最后的预测值。用预测值乘以相应的季节指数,得到最终的预测值。

    (1)确定并分离季节成分

    季节性因素分析是通过季节指数来表示各年的季节成分,以此描述各年的季节变动模式。

    i:  计算季节指数(seasonal index)

    季节指数刻画了序列在一个年度内各月或各季度的典型季节特征。在乘法模型中,季节指数以其平均数等于100%为条件而构成的,反映了某一月份或季度的数值占全年平均值的大小。若现象的发展没有季节变动,则各期的季节指数应等于100%;若某一月份或季度有明显的季节变化,则各期的季节指数应大于或小于100%。因此,季节变动的程度是根据各季节指数与其平均数(100%)的偏差程度来测定的。

    季节指数计算方法较多,移动平均趋势剔除法步骤:

    第一步:计算移动平均值(若是季节数据,采用4项移动平均,月份数据则采用12项移动平均),并对其结果进行中心化处理,即将移动平均的结果再进行一次二项移动平均,即得出中心化移动平均值(CMA)。

    第二步:计算移动平均的比值,即季节比率,即将序列的各观察值除以相应的中心化移动平均值,然后计算出各比值的季度或月份平均值。

    第三步:季节指数调整。由于各季节指数的平均数应应等于1或100%,若根据第二步计算的季节比率的平均值不等于1,则需要进行调整。具体方法:将第二步计算的每个季节比率的平均值除以它们的总平均值。

    ii:  分离季节成分

    计算出季节指数后,可将各实际观察值分别除以相应的季节指数,将季节成分从时间序列中分离出去:\frac{Y}{S}=\frac{T*S*I}{S}=T*I

    结果即为季节成分分离后的序列,反映了在没有季节因素影响下时间序列的变化形态。

    iii: 建立预测模型并进行预测

    7、时序案例分析

    https://blog.csdn.net/mengjizhiyou/article/details/104765862

    展开全文
  • 时间序列的7种预测模型

    万次阅读 多人点赞 2020-10-06 09:15:50
    时间序列问题比较常见,比如股市,工业生产指标等。 1 朴素估计 使用最后一个时间点的值估测后面一段时间段的值。 2 简单平均 4 滑动窗平均 使用之前一定大小时间段的平均值作为这个时间点的值。 ...

    背景

    时间序列问题比较常见,比如股市,工业生产指标等。

    导入必要的包:

    from statsmodels.tsa.api import ExponentialSmoothing, \
    SimpleExpSmoothing, Holt
    
    import statsmodels.api as sm
    

    1 朴素估计

    y^t+1=yt \hat{y}_{\mathrm{t}+1}=\mathrm{y}_{\mathrm{t}}

    使用最后一个时间点的值估测后面一段时间段的值。

    dd= np.asarray(train.Count)
    y_hat = test.copy()
    y_hat['naive'] = dd[len(dd)-1]
    

    在这里插入图片描述

    2 简单平均

    在这里插入图片描述

    y_hat_avg = test.copy()
    y_hat_avg['avg_forecast'] = train['Count'].mean()
    

    在这里插入图片描述

    4 滑动窗平均

    在这里插入图片描述
    使用之前一定大小时间段的平均值作为这个时间点的值。
    或者使用加权的滑动窗平均:
    在这里插入图片描述

    y_hat_avg = test.copy()
    y_hat_avg['moving_avg_forecast'] = train['Count'].rolling(60).mean().iloc[-1]
    

    在这里插入图片描述

    5 简单指数平滑

    在这里插入图片描述
    where 0≤ α ≤1 is the smoothing parameter.
    如果时间序列很长,可以看作:
    在这里插入图片描述

    from statsmodels.tsa.api import ExponentialSmoothing, \
    SimpleExpSmoothing, Holt
    y_hat_avg = test.copy()
    fit2 = SimpleExpSmoothing(np.asarray(train['Count'])).fit(
    smoothing_level=0.6,optimized=False)
    y_hat_avg['SES'] = fit2.forecast(len(test))
    

    5 Holt’s线性趋势方法

    在这里插入图片描述

    主要考虑趋势。

    import statsmodels.api as sm
    sm.tsa.seasonal_decompose(train.Count).plot()
    result = sm.tsa.stattools.adfuller(train.Count)
    

    7 Holt-winters 方法

    在这里插入图片描述

    这种思想比较简单有效,假设数据服从两点,

    1.数据是呈递增、递减趋势的;
    2.数据服从一个周期变化。

    然后,对残差,再进行其他方式的拟合,比如三次样条曲线。

    y_hat_avg = test.copy()
    fit1 = ExponentialSmoothing(np.asarray(train['Count']) ,
    seasonal_periods=7 ,trend='add', seasonal='add',).fit()
    y_hat_avg['Holt_Winter'] = fit1.forecast(len(test))
    

    8 Arima方法

    ARIMA模型(Autoregressive Integrated Moving Average model)整合移动平均自回归模型。

    ARIMA(p,d,q)模型:

    在这里插入图片描述

    ARIMA(p, d, q) 由三个部分组成:

    • AR§:AR是autoregressive的缩写,表示自回归模型,含义是当前时间点的值等于过去若干个时间点的值的回归——因为不依赖于别的解释变量,只依赖于自己过去的历史值,故称为自回归;如果依赖过去最近的p个历史值,称阶数为p,记为AR(p)模型。
    • I(d):I是integrated的缩写,含义是模型对时间序列进行了差分;因为时间序列分析要求平稳性,不平稳的序列需要通过一定手段转化为平稳序列,一般采用的手段是差分;d表示差分的阶数,t时刻的值减去t-1时刻的值,得到新的时间序列称为1阶差分序列;1阶差分序列的1阶差分序列称为2阶差分序列,以此类推;另外,还有一种特殊的差分是季节性差分S,即一些时间序列反应出一定的周期T,让t时刻的值减去t-T时刻的值得到季节性差分序列。
    • MA(q):MA是moving average的缩写,表示移动平均模型,含义是当前时间点的值等于过去若干个时间点的预测误差的回归;预测误差=模型预测值-真实值;如果序列依赖过去最近的q个历史预测误差值,称阶数为q,记为MA(q)模型。
    y_hat_avg = test.copy()
    fit1 = sm.tsa.statespace.SARIMAX(train.Count, order=(2, 1, 
    4),seasonal_order=(0,1,1,7)).fit()
    y_hat_avg['SARIMA'] = fit1.predict(start="2013-11-1", 
    end="2013-12-31", dynamic=True)
    

    9. PROPHET 方法

    Facebook提出的一种方法,与Holt-winters类似,主要想法是"
    时间序列的分解(Decomposition of Time Series),它把时间序列 分成几个部分,分别是季节项 ,趋势项 ,剩余项,与Holt-winters方法类似 。

    fbprophet的安装依赖Pystan.


    最近开通了个公众号,主要分享python原理与应用,推荐系统,风控等算法相关的内容,感兴趣的伙伴可以关注下。
    在这里插入图片描述
    公众号相关的学习资料会上传到QQ群596506387,欢迎关注。


    reference:

    1. analytics : Time-series forecast
    2. 知乎 arima详解
    3. Forecasting at Scale Facebook
    4. Wiki Arima;
    5. ARIMA模型详解;
    6. Fbprophet 使用官网;
    展开全文
  • 时间序列预测算法总结

    万次阅读 2020-08-24 17:34:12
    时间序列算法 time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来...时间序列预测 常用的思路: 1、计算平均值 2、exponential smoothing指数衰减 ...

    时间序列算法

    time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来的值),classification(对有序数据序列的feature提取与分类),clustering(相似数列聚类)等。

    时间序列的预测

    常用的思路:

    1、计算平均值https://images0.cnblogs.com/blog2015/380470/201503/111044446527918.jpg

    2、exponential smoothing指数衰减https://images0.cnblogs.com/blog2015/380470/201503/111044446527918.jpg

       不同的时间点,赋予不同的权重,越接近权重越高

    3、snaive:假设已知数据的周期,上一个周期对应的值作为下一个周期的预测值

    4、drift:飘移,即用最后一个点的值加上数据的平均趋势

    https://images0.cnblogs.com/blog2015/380470/201503/111057599021339.jpg

    5、Holt-Winters:  三阶指数平滑

     Holt-Winters的思想是把数据分解成三个成分:平均水平(level),趋势(trend),周期性(seasonality)。R里面一个简单的函数stl就可以把原始数据进行分解:

    https://images0.cnblogs.com/blog2015/380470/201503/111102553559201.jpg

    一阶Holt—Winters假设数据是stationary的(静态分布),即是普通的指数平滑。

    二阶算法假设数据有一个趋势,这个趋势可以是加性的(additive,线性趋势),也可以是乘性的(multiplicative,非线性趋势),只是公式里面一个小小的不同而已。 

    三阶算法在二阶的假设基础上,多了一个周期性的成分。同样这个周期性成分可以是additive和multiplicative的。 举个例子,如果每个二月的人数都比往年增加1000人,这就是additive;如果每个二月的人数都比往年增加120%,那么就是multiplicative。

    性能衡量采用的是RMSE当然也可以采用别的metrics

    https://images0.cnblogs.com/blog2015/380470/201503/111113115892330.png

    6、ARIMA: AutoRegressive Integrated Moving Average,ARIMA是两个算法的结合:AR和MA。在ARMA模型中,AR代表自回归,MA代表移动平均。其公式如下:

    https://images0.cnblogs.com/blog2015/380470/201503/111116217458557.jpg

    • 是白噪声,均值为0, C是常数。  ARIMA的前半部分就是Autoregressive:https://images0.cnblogs.com/blog2015/380470/201503/111118174178729.jpg, 后半部分是moving average: https://images0.cnblogs.com/blog2015/380470/201503/111119099337241.jpg。  AR实际上就是一个无限脉冲响应滤波器(infinite impulse resopnse), MA是一个有限脉冲响应(finite impulse resopnse),输入是白噪声。

    ARIMA里面的I指Integrated(差分)。 ARIMA(p,d,q)就表示p阶AR,d次差分,q阶MA。

    为什么要进行差分呢? ARIMA的前提是数据是stationary的,也就是说统计特性(mean,variance,correlation等)不会随着时间窗口的不同而变化。用数学表示就是联合分布相同。

    当然很多时候并不符合这个要求,例如这里的airline passenger数据。有很多方式对原始数据进行变换可以使之stationary:

    (1) 差分,即Integrated。 例如一阶差分是把原数列每一项减去前一项的值。二阶差分是一阶差分基础上再来一次差分。这是最推荐的做法。

    (2)先用某种函数大致拟合原始数据,再用ARIMA处理剩余量。例如,先用一条直线拟合airline passenger的趋势,于是原始数据就变成了每个数据点离这条直线的偏移。再用ARIMA去拟合这些偏移量。

    (3)对原始数据取log或者开根号。这对variance不是常数的很有效。

    如何看数据是不是stationary呢?这里就要用到两个很常用的量了: ACF(auto correlation function)和PACF(patial auto correlation function)。对于non-stationary的数据,ACF图不会趋向于0,或者趋向0的速度很慢。

    acf(train)                                ——原始数据

    acf(diff(train,lag=1))                    ——一阶差分

    acf(diff(diff(train,lag=7)))              ——去除周期性的一阶差分

    确保stationary之后,下面就要确定p和q的值了。定这两个值还是要看ACF和PACF:

    https://images0.cnblogs.com/blog2015/380470/201503/111144188395319.jpg

    AR(p)模型,PACF会在lag=p时截尾,也就是,PACF图中的值落入宽带区域中。

    MA(q)模型,ACF会在lag=q时截尾,同理,ACF图中的值落入宽带区域中。

    确定好p和q之后,就可以调用R里面的arime函数了。

    ARIMA更多表示为  ARIMA(p,d,q)(P,D,Q)[m] 的形式,其中m指周期(例如7表示按周),p,d,q就是前面提的内容,P,D,Q是在周期性方面对应的p,d,q含义。

    R里面有两个很强大的函数: ets 和 auto.arima。 用户什么都不需要做,这两个函数会自动挑选一个最恰当的算法去分析数据。

    在R中各个算法的效果如下:

    https://images0.cnblogs.com/blog2015/380470/201503/111148182457526.jpg

    预测效果评价:accuracy()函数包含了很多评价指标,也可以自定义。

    模拟了两个模型后,可以用AIC(mod1)来检验与比较,值越小越好。

    7、ARFIMA(p,d,q):分数积分自回归移动平均模型,时间序列长期记忆

          关键步骤在于对序列进行分数阶差分,得到满足零均值ARMA过程的序列,再进行参数估计。

     

    案例:

    我们有一个时间序列的数据 "D1_data.txt"

    1.拿到这个时间序列你先目测,上图通过目测可以认为是一个平稳的时间序列。

     

    R步骤

    a <- read.csv(“D:/D1_data.txt”) #括号中的东西取决于你的数据在电脑上存放的路径

    aa <-ts(a)  #命名该事件序列为aa

    plot(aa)  #画出时间序列aa如上图

     

    2、通过ACF和PACF也就是自相关系数和偏自相关系数来判断是否稳定

    由于ACF在lag=1之后便落入置信区间,PACF在lag=3之后落入置信区间,我们认为该时间序列稳定。

    R步骤

    layout(1:2)  #一次显示两张图

    acf(aa)  #显示自相关系数

    pacf(aa)  #显示偏自相关系数

     

    3、模型拟合

    选择ma(1)或者arma(3,1)

    用arima命令来拟合,并用AIC来看哪个模型更适合,AIC数值越小越好。

    R步骤

    ma1 <- arima(aa,order = c(0,0,1))

    arma13 <- arima(aa,order = c(3,0,1))

    AIC(ma1)

    AIC(arma13)

    #AIC结果:

    AIC(ma1) [1] 939.6636

    AIC(arma13) [1] 943.8848

    可以看出ma1优于arma13.

     

    4、看拟合好的模型的残差是否为白噪声

    R步骤

    acf(resid(ma1))   #ma1的残差的自相关系数

    注意事项:

    对于这几个模型的选择绝对不是IC谁高就选谁。

    正确的流程:1)根据acf和pacf的特点进行选择。比如题主的图acf缓慢下行,而pacf只有一个lag significant,这样对应的model是AR,相反如果pacf decays而acf cuts off,你就该去选MA。每个model都有对应的acf,pacf的特点,根据对应的特点细节去选model,选lag,增加sessional ar ma,验证残差等等。

    2)在1)的基础上选出的可能性的model中,用IC和残差的表现来选一个最好的,这时候才用到IC。不谈1)来谈IC没有意义。其中还有很多需要注意的点建议题主自己搜索学习一下。

    有trend代表一定不stationary,但这并不影响模型,在去除趋势项后,一个时间序列依然可以稳态,这个叫做trend stationary,因此即使有trend,依然可以使用ar等模型来model。

    存在趋势的序列都是非平稳的,AR等一系列模型是必须建立在平稳的基础上才有意义…一般时间序列建模的流程是:去除确定性因素(趋势还有季节性),然后对剩下的随机因素进行平稳性检验,检验通过之后进行arima建模,具体的阶数你可以用acf,pacf来确定,比较方便的是R里面的auto.arima直接定阶…然后进行模型的拟合与预测…最后就是对残差进行arch效应检验,如果有arch效应,就进一步用波动率模型进行建模…总的来说就是确定性因素的分解—随机因素的均值建模—波动率建模。

    疑问:

    如何判断一个序列是否平稳?

    1、均值 ,是与时间t 无关的常数。

    2、方差 ,是与时间t 无关的常数。这个特性叫做方差齐性。

    3、协方差 ,只与时期间隔k有关,与时间t 无关的常数。

    如果一个序列不平稳,就要用方法使它变平稳:如消除长期趋势、差分化

    检查平稳性的公式,

    1、引入Rho系数:X(t) = Rho * X(t-1) + Er(t)

    2、Dickey-Fuller检验是测试一个自回归模型是否存在单位根。X(t) - X(t-1) = (Rho - 1) X(t - 1) + Er(t),要测试如果Rho–1=0是否差异显著。如果零假设不成立,我们将得到一个平稳时间序列。

     

    如何判断一个序列符合AR还是MA?

    自回归AR案例:

    例如,x(t)代表一个城市在某一天的果汁的销售量。在冬天,极少的供应商进果汁。突然有一天,温度上升了,果汁的需求猛增到1000.然而过了几天,气温有下降了。但是众所周知,人们在热天会喝果汁,这些人会有50%在冷天仍然喝果汁。在接下来的几天,这个比例降到了25%(50%的50%),然后几天后逐渐降到一个很小的数。

    移动平均MA案例:

    一个公司生成某种类型的包,这个很容易理解。作为一个竞争的市场,包的销售量从零开始增加的。所以,有一天他做了一个实验,设计并制作了不同的包,这种包并不会被随时购买。因此,假设市场上总需求是1000个这种包。在某一天,这个包的需求特别高,很快库存快要完了。这天结束了还有100个包没卖掉。我们把这个误差成为时间点误差。接下来的几天仍有几个客户购买这种包。

    AR模型与MA模型的不同

    AR与MA模型的主要不同在于时间序列对象在不同时间点的相关性。

    MA模型用过去各个时期的随机干扰或预测误差的线性组合来表达当前预测值。n>某一个值时,x(t)与x(t-n)的相关性总为0.

    AM模型仅通过时间序列变量的自身历史观测值来反映有关因素对预测目标的影响和作用,步骤模型变量相对独立的假设条件约束,所构成的模型可以消除普通回退预测方法中由于自变量选择、多重共线性等造成的困难。即AM模型中x(t)与x(t-1)的相关性随着时间的推移变得越来越小。

    用ACF和PACF来区分AR与MA

    时间序列x(t)滞后k阶的样本自相关系数(ACF)和滞后k期的情况下样本偏自相关系数(PACF)。

    AR模型的ACF和PACF:

    通过计算证明可知:

    - AR的ACF为拖尾序列,即无论滞后期k取多大,ACF的计算值均与其1到p阶滞后的自相关函数有关。

    - AR的PACF为截尾序列,即当滞后期k>p时PACF=0的现象。

    http://i1.wp.com/www.analyticsvidhya.com/wp-content/uploads/2015/02/Gradual-decline.gif http://i1.wp.com/www.analyticsvidhya.com/wp-content/uploads/2015/02/cut-off.gif?resize=318%2C284

    上图蓝线显示值与0具有显著的差异。很显然上面PACF图显示截尾于第二个滞后,这意味这是一个AR(2)过程。

    MA模型的ACF和PACF:

    - MA的ACF为截尾序列,即当滞后期k>p时PACF=0的现象。

    - AR的PACF为拖尾序列,即无论滞后期k取多大,ACF的计算值均与其1到p阶滞后的自相关函数有关。

    http://i1.wp.com/www.analyticsvidhya.com/wp-content/uploads/2015/02/cut-off.gif?resize=318%2C284 http://i1.wp.com/www.analyticsvidhya.com/wp-content/uploads/2015/02/Gradual-decline.gif?resize=318%2C284

    很显然,上面ACF图截尾于第二个滞后,这以为这是一个MA(2)过程

     

    如何让时间序列变得平稳?

    1 消除趋势:这里我们简单的删除时间序列中的趋势成分

    2 差分:这个技术常常用来消除非平稳性。这里我们是对序列的差分的结果建立模型而不是真正的序列。

    x(t) – x(t-1) = ARMA (p , q)

    差分后,ARIMA对应为:p:AR    d:I     q:MA

    3 季节性:季节性直接被纳入ARIMA模型中。

    如何确定pdq的值?

    1、参数p,q可以使用ACF和PACF图发现。

    2、如果相关系数ACF和偏相关系数PACF逐渐减小,这表明我们需要进行时间序列平稳并引入d参数。

    选择模型时,选择AIC和BIC最小的(p,d,q)组合。

    进行时间序列预测的步骤

     

    展开全文
  • 数学建模常用模型06 :时间序列预测

    万次阅读 多人点赞 2020-08-18 10:59:05
    时间序列预测与马尔科夫链预测互补,至少有2个点需要信息的传递,ARMA模型,周期模型,季节模型等 ARMA模型的全称是自回归移动平均(auto regression moving average)模型,它是目前最常用的拟合平稳序列的模型,它...

    给大家安利一款朋友开发的自研国产数据分析基础工具,一键式自动分析,自动生成分析模板,5分钟掌握主流61个统计类数学模型(几乎涵盖SPSS绝大部分功能),以及23个有监督机器学习(包括随机森林,SVM,XGBoost等)

    PS:巨方便简单上手,貌似现在是免费

    官网:www.mpaidata.com   mpai数据科学平台

     

    时间序列预测与马尔科夫链预测互补,至少有2个点需要信息的传递,ARMA模型,周期模型,季节模型等

    ARMA模型的全称是自回归移动平均(auto regression moving average)模型,它是目前最常用的拟合平稳序列的模型,它又可细分为AR模型(auto regression model)、MA模型(moving average model)和ARMA模型(auto regression moving average model)三大类。

    例 税收作为政府财政收入的主要来源,是地方政府实行宏观调控、保证地区经济稳定增长的重要因素。各级政府每年均需预测来年的税收收入以安排财政预算。什么方法能够帮助地方政府有效地预测税收收入?下表是某地历年税收数据(单位:亿元)

    表1 各年度的税收数据

    年份

    1

    2

    3

    4

    5

    6

    7

    税收

    15.2

    15.9

    18.7

    22.4

    26.9

    28.3

    30.5

    年份

    8

    9

    10

    11

    12

    13

    14

    税收

    33.8

    40.4

    50.7

    58

    66.7

    81.2

    83.4

    利用以下程序:

    clc, clear
    a=[15.2	 15.9	18.7	22.4	26.9	28.3	30.5  33.8	 40.4	50.7	58	    66.7	81.2	83.4];
    m=input('请输入需要预测的个数:');
    ahat=a;
    for i=1:m   %m=需要预测值的数量
        fprintf('现在开始预测第%d个值。',i);
        a=ahat;
        a=a'; a=a(:); a=a'; %把原始数据按照时间顺序展开成一个行向量
        Rt=tiedrank(a);  %求原始时间序列的秩28.3
        n=length(a); t=1:n; 
        Qs=1-6/(n*(n^2-1))*sum((t-Rt).^2)   %计算Qs的值
        T=Qs*sqrt(n-2)/sqrt(1-Qs^2)   %计算T统计量的值
        t_0=tinv(0.975,n-2)     %计算上alpha/2分位数
    

    作下列假设检验

    {H_0}:序列平稳;

    {H_1}:序列非平稳(存在上升或者下降趋势)。

    Daniel检验方法:对于显著水平,由时间序列计算,的Spearman秩相关系数Qs,若>t_0,则拒绝,认为序列非平稳。并且Qs>0时,认为序列由上升趋势;Qs<0时,认为序列有下降趋势。又当t_0时,接受,可以认为是平稳序列。

    本题中,,上alpha/2的值t_0=2.1788,所以>t_0,故认为序列是非平稳的;因为Qs>0,所以序列有上升趋势。为了构造平稳序列,对于作一阶差分运算,得到序列。从时间序列散点图来看,时间序列是平稳的。

    实现代码如下:

     if(T>t_0)
            b=diff(a);   %求原始时间序列的一阶差分
            c=ar(b,2,'ls');  %利用最小二乘法估计模型的参数
            bhat=predict(c,b') %求原始数据的预测值,第二个参数必须为列向量
            bhat(end+1)=forecast(c,b',1); %计算1个预测值,第二个参数必须为列向量
            fprintf('第%d个值预测后的全部数据ahat:',i);
            ahat=[a(1), a+bhat']  %求原始数据的预测值,并计算t=15的预测值
            delta=abs((ahat(1:end-1)-a)./a)  %计算原始数据预测的相对误差
        else
            c=ar(a,2,'ls');  %利用最小二乘法估计模型的参数
            bhat=predict(c,a')  %求原始数据的预测值,第二个参数必须为列向量
            bhat(end+1)=forecast(c,a',1); %计算1个预测值,第二个参数必须为列向量
            fprintf('第%d个值预测后的全部数据ahat:',i);
            ahat=bhat'%求原始数据的预测值,并计算t=15的预测值
            delta=abs((ahat(1:end-1)-a)./a)  %计算原始数据预测的相对误差
        end
    end
    

    最终算得结果如下:

    年份

    1

    2

    3

    4

    5

    6

    7

    税收

    15.2

    15.9

    18.7

    22.4

    26.9

    28.3

    30.5

    预测值

    15.2

    15.9

    18.7

    19.9651

    25.3715

    30.7182

    31.8093

    相对误差

    0

    0

    0

    0.1087

    0.0568

    0.0854

    0.0429

    年份

    8

    9

    10

    11

    12

    13

    14

    税收

    33.8

    40.4

    50.7

    58

    66.7

    81.2

    83.4

    预测值

    32.0832

    36.2442

    44.5258

    58.1439

    67.1731

    74.1835

    91.2694

    相对误差

    0.0508

    0.1029

    0.1218

    0.0025

    0.0071

    0.0864

    0.0944

    注:在使用该程序时,只需要把矩阵a换成自己的数据就行

     

    一般推荐使用SPSS,具体步骤如下:

    SPSS进行时间序列预测:

    1. 把数据输入到SPSS中;

    2.定义日期和时间;

    3.选择日期:选择“年”,第一个个案是:选择2000,然后点击“确定”;

    4.转换→创建时间序列

     

     

    5.把“税收”移到“变量”里,“名称”默认即可,“函数”中选择“平滑”,然后点击“确定”,即可得到预测结果;

    为了和用MATLAB求解的结果作比较,这里也求出了其相对应的相对误差:

     

     

     

     

     

    展开全文
  • python--时间序列预测(time series prediction)

    万次阅读 热门讨论 2020-03-24 10:28:14
    题外话:前段时间做了一点时间序列预测,积累了一点经验,写出来与大家分享一下。能力有限,若是有错误,请指正。本文理论内容不会特别多。 1.时间序列预测 时间序列预测,主要就是依靠过去和现在的数据,分析两者...
  • 时间序列预测的基本原理

    千次阅读 2019-08-26 21:40:06
    时间序列预测的基本原理 1,时间序列分类: 平稳时间序列 随时间相对稳定的序列(均值、方差、自相关系数) 均值:使用常数均值才能用来较好的进行预测(常数均值即在平稳时间序列下的均值,这样才能保证...
  • 统计学——时间序列预测

    千次阅读 2019-02-15 10:43:12
    第13章 时间序列分析和预测 时间序列是同一现象在不同时间上的相继观测值排列而成的序列。本书中用t表示所观察的时间,Y表示观察值,则Yi( i =1, 2, …, n)为时间ti上的观察值。 时间序列可以分为平稳序列和非平稳...
  • 本文通过论文、实战教程等45篇博文,梳理总结了一套系统化的时间序列预测和时间序列分类任务的入门指南。文中提及的博客、论文和教程全部内容的总字数大约在50万字到100万字之间。
  • 时间序列预测模型方法

    万次阅读 2016-04-21 13:46:36
    时间序列预测法是一种历史资料延伸预测,也称历史引伸预测法。是以时间数列所能反映的社会经济现象的发展过程和规律性,进行引伸外推,预测其发展趋势的方法。 时间序列,也叫时间数列、历史复数或动态数列。它是将...
  • 场景:节日客流量预测季节销量预测实时股价预测案例:客流量预测解读:通过实际值和预测值的对比可直观看出预测的准确程度原理:时间序列回归(TSR)是一种动态数据处理的统计方法,研究随机时间序列数据遵循的统计...
  • Pytorch实现CNN时间序列预测

    万次阅读 2018-03-04 13:05:26
    曾经推出过PyTorch实现的LSTM时间序列预测,并开源了其源码。细心的童鞋可能发现了,我之前使用的LSTM是生成式模型,而不是使用判别式进行预测。换言之,就是将序列本身作为输入,下一时刻作为输出,模型表达的是...
  • 在MATLAB 2018中用深度学习进行时间序列预测

    万次阅读 多人点赞 2019-04-16 09:30:15
    本例展示了如何用LSTM网络预测时间序列数据。为了预测一个序列的未来时间步长值,你可以训练一个sequence-to-sequence LSTM回归网络,其中[2]网络的响应是训练序列值移动了一个时间步长。也就是说,在输入序列的每个...
  • spss时间序列预测销量

    万次阅读 多人点赞 2018-06-02 02:28:27
    首先,对时间序列概念有一个大致的了解,即根据变量过去的观测值来预测同一变量的未来值,就是根据已有的历史数据预测未来。时间序列的特点:1、现实的、真实的一组数据,而不是数理统计中做实验得到的。既然是真实...
  • 时间序列之灰色预测

    千次阅读 2020-06-05 15:51:16
    灰色预测是针对灰色系统所做的预测。控制论中,信息的多少常以颜色的深浅来表示,信息充足、确定为白色;信息缺乏、不确定为黑色;部分确定部分不确定为灰色。灰色系统指信息不完全的系统,信息的不完全可能是系统...
  • 推荐lstm时间序列预测论文和资料

    千次阅读 2016-11-07 11:15:52
    这个讲LSTM的PPT作为入门不错:On the use of ‘Long-Short Term Memory’ neural networks for time series prediction 一篇详细介绍LSTM的论文PDF:Long Short-Term Memory in Recurrent Neural Networks ...
  • 时间序列建模的基本步骤 时间序列建模的基本步骤 习题 ...时间序列模型 (五): 趋势外推预测方法 时间序列模型 (六):平稳时间序列模型 :自回归AR 、移动平均 MA 、ARMA 模型 时间序列模...
  • 时间序列模型 (一):模型概述

    万次阅读 多人点赞 2019-05-03 20:18:37
    时间序列模型 (五): 趋势外推预测方法 时间序列模型 (六):平稳时间序列模型 :自回归AR 、移动平均 MA 、ARMA 模型 时间序列模型 (七): 时间序列建模的基本步骤 目录 时间序列的不同...
  • 时间序列预测方法总结

    万次阅读 2019-06-05 19:33:26
    这本来是我回答的一个问题:有什么好的模型可以做高精度的时间序列预测呢? - BINGO Hong的回答 - 知乎 https://www.zhihu.com/question/21229371/answer/533770345 但觉得在那个答案下一直更新好麻烦,干脆就移到...
  • R语言实现金融数据的时间序列分析及建模

    万次阅读 多人点赞 2017-08-03 12:17:31
    本实验主要探讨了几种时间序列预测模型,首先带领大家对时间序列有一个初步的认识再在这个基础之上,向读者介绍当下最常用的 ARIMA 模型来预测时间序列,接着为读者展示几种指数平滑的方法来预测,最后通过几种...
  • 第十三章 时间序列分析和预测

    万次阅读 2015-09-01 21:11:32
    下文主要介绍传统的时间序列的分析方法,内容包括时间序列数据的统计和预测方法。1 时间序列及其分解时间序列是同一现象在不同时间上的相继观察值排列而成的序列,可以分为平稳序列和非平稳序列。 平稳序列...
1 2 3 4 5 ... 20
收藏数 75,865
精华内容 30,346
关键字:

时间序列预测