时间序列分析是针对时间序列数据进行预测分析的一门学科,其不考虑其他因素的影响,只考虑预测对象随时间的变化,并据此作出预测分析。相对应的随机过程理论考虑的是随时间变化的一族随机变量全体。在工程应用中由于难以收集到全部的随机变量,随机过程理论一般较难应用。时间序列分析由于其只考虑预测分析的对象,在工程实践中较常得到应用。不过当对观察对象有很大影响的外界因素发生变化时,时间序列分析的预测结果误差较大。
1. 时间序列数据的预处理
在建立时间序列模型之前,必须先对时间序列数据进行必要的预处理,以便剔除那些不符合统计规律的异常样本,并对这些样本数据的基本统计特性进行检验,以确保建立时间序列模型的可靠性和置信度,并满足一定的精度要求。
1.1 时间序列的平稳性
一般说来,某个实测过程如果它的系统参数和运行时周围的条件不改变,即可视为平稳的。对于时间序列的平稳性,必须考虑以下两个内容:一是序列的均值u和方差σ是否为常数,二是序列的自相关函数acf是否仅与时间间隔有关,而与此间隔端点位置无关。
ARIMA等自回归类型的时间序列模型对于时间序列数据的平稳性有一定要求。对于时间序列数据的平稳性检验,一般可以使用扩展迪基-福勒检验(Augmented Dickey-Fuller test),即单位根检验ADF。单位根检验的原假设是检验序列中存在单位根,若存在单位根则序列是非平稳时间序列。已有证明,序列中存在单位根程就不平稳,会使回归分析中存在伪回归。
statsmodels中有专门用于adf检验的方法,该adf检验提供统计量、拒绝域以及p值,为了方便直接通过p值来判断时间序列的平稳性。
from statsmodels.tsa.stattools import adfuller
adf = adfuller(metric) #if adf[1] < 0.05 then stationary
1.2 时间序列的趋势项与差分
时间序列不平稳的原因拆分开来其中一项就是因为时间序列包含趋势项。非平稳序列可以通过差分操作来消除趋势项,进而将非平稳序列转化为平稳序列。差分操作就是将每个时间点的值减去前一个时间点的值,需要注意的是每做一次差分,数据就会少一项。
差分: diff(x)=(x2-x1, x3-x2, …xn-xn-1)
metric = metric1.diff()
需要注意的是,在数据预处理过程中对数据进行了差分,需要在时间序列分析预测后进行逆差分还原。
在这里插入代码片
1.3 时间序列的季节项与季节差分
时间序列不平稳的原因拆分开来另一项就是因为时间序列包含季节项。非平稳序列可以通过季节差分操作来消除季节项,进而将非平稳序列转化为平稳序列。季节差分的季节周期较难确定,一般可以应用启发式方法来寻找。
季节差分: diff(x)=(xn+1-x1, xn+2-x2, …xn+m-xm)
df.diff(periods=n)