时间序列简介
时间序列是时间间隔不变的情况下收集的时间点集合,没有其他数据辅助。这些集合被分析用来了解长期发展趋势,为了预测未来或者表现分析的其他形式。
最近完成一个基于时间序列ARIMA预测的项目,为了处理非平稳化的数据,需要将数据分解成长期趋势项、季节性周期项以及残差项几部分,然后分别“对症下药”。以下写写数据的具体分解函数代码及原理。
decompose数据分解
python代码
数据分解的代码可直接调用python的statsmodels库,如下,就分解成了三部分数据。
from statsmodels.tsa.seasonal import seasonal_decompose
decomposition = seasonal_decompose(timeseries) #timeseries时间序列数据
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid
但到底是如何分解成这三部分呢,还是值得探究一下。以下写写数据的具体分解过程。
数据分解原理
decompose数据分解模型主要有两类:相加模型(additive)和相乘模型(multiplicative)。
官方解释是:
The additive model is Y[t] = T[t] + S[t] + e[t]
The multiplicative model is Y[t] = T[t] * S[t] * e[t]
其中,T[t]是趋势项,S[t]是季节性周期项,e[t]是残值项。一般的,理想的分解模型中残值项应该是一个均值为0的随机变量。
两种模型的分解思路一致,这里以相加模型(additive)为例介绍。
-
step1:分解趋势项,采用中心化移动均值的方法。
-
step2:分解季节性周期项。
step3:计算残值项。
e[t] = Y[t] - T[t] - S[t]
以下是一个数据分解后的结果图。
最后,针对对数据分解结果的分析,我们可采取移动均值、差分等方式对数据进行平稳化处理,用于时间序列预测。