当前位置: 首页 > 科技观察

时间序列分解:将时间序列分解成基本的构建块

时间:2023-03-18 15:21:41 科技观察

大多数时间序列都可以分解成不同的组件,在本文中,我将讨论这些不同的组件是什么,如何获取它们以及如何使用Python进行时间序列序列分解。时间序列组件时间序列是(主要)三个组件的组合:趋势、季节性和残差/余数。让我们简单解释一下趋势的三个组成部分:它是序列的整体运动。它可能会不断增加,可能会不断减少,也可能会波动。季节性:系列中的任何常规季节性模式。例如,夏季的冰淇淋销量通常高于冬季。残差:这是我们考虑趋势和季节性后剩下的。它也可以被认为只是统计噪声,或者临时事件的影响,这个剩余量也有一个单独的周期成分,但它通常被包含在趋势成分中。加法与乘法模型这些组件的组合方式取决于时间序列的性质。对于加法模型:对于乘法模型:其中Y是序列,T是趋势,S是季节性,R是残差分量。当序列变异的尺度一致时,加性模型最合适。当序列的波动在相对和比例范围内时,乘法模型更为合适。例如,如果夏季冰淇淋销量每年增加1,000,则该模型是可加的。如果每年夏天销售额继续增长20%,但绝对销售额在变化,则该模型是乘法的。稍后我们将讨论一个可以使这个理论更具体的例子。为了计算和可视化梯度,可以通过对数变换或Box-Cox变换将乘法模型转换为加法模型:分解的工作原理有多种算法和方法可以将时间序列分解为三个部分。下面这个经典方法经常用到,非常直观。使用移动/滚动平均值计算趋势分量T。去除序列的趋势,加法模型的Y-T和乘法模型的Y/T。通过取每个季节的去趋势序列的平均值来计算季节性分量S。残差分量R对于加法模型计算为R=Y-T-R,对于乘法模型计算为R=Y/(TR)。还有其他几种方法可用于分解,例如STL、X11和SEATS。这些都是对经典方法的基本方法进行补充并改进其缺点的先进方法。如果你想了解这些最新的方法,可以留言,我们将单独开篇介绍。Python中的时间序列分解让我们使用1948年至1961年的美国航空旅客数据集:#https://www.kaggle.com/datasets/ashfakyeafi/air-passenger-data-for-time-series-analysisimportplotly.expressaspximportpandasaspd#读入数据data=pd.read_csv('AirPassengers.csv',index_col=0)data.index=pd.to_datetime(data.index)#绘制数据fig=px.line(data,x=data.index,y='#Passengers',fig.update_layout(template="simple_white",fnotallow=dict(size=18),fig.show())从图中我们观察到趋势是增加的,而且每年都有季节性,波动的大小会随着时间的推移而增加,所以我们可以说这是一个乘法模型。statmodels中包含了seasonal_decomposition函数来帮助我们对时间序列进行分解,当我们要调用Function时当指定这是一个“乘法”模型时:fromstatsmodels.tsa.seasonalimportseasonal_decomposeimportmatplotlib.pyplotasplt#绘制multi的分解图折叠序列data.rename(columns={'#Passengers':'MultiplicativeDecomposition'},inplace=True)decomposition_plot_multi=seasonal_decompose(data['MultiplicativeDecomposition'],decomposition_plot_multi.plot()plt.show()如你所见从上图中,该函数确实成功捕获了三个组件。Box-Cox变换可用于通过应用Scipy的函数boxcox来稳定方差,该函数将序列转换为加法模型:应用boxcox获取加法模型数据['AdditiveDecomposition'],lam=boxcox(data['#Passengers'])#绘制加法序列的分解图decomposition_plot_add=seasonal_decompose(data['AdditiveDecomposition'],decomposition_plot_add.plot()plt.show()函数也很好的捕捉到了这三个分量。但是我们看到残差在前期和后期的波动性比较大。所以在建立这个时间序列的预测模型的时候,需要考虑到这一点一点。总结在这篇文章中,我们展示了如何将时间序列分解为三个基本组成部分:趋势、季节性和残差。这三个组成部分的组合产生了实际的时间序列ries及其组合可以是加法或乘法。有几种执行分解的更新技术,例如STL、SEAL和X11,但经典方法简单直观。最后,它通过分解时间序列来帮助建立对数据的理解,从而更容易做出未来的预测。