如何用Python检查时间序列数据是否是静止的
时间序列数据通常具有时间性的特点。这种时间性给数据增加了一种趋势或季节性,使其符合时间序列分析和预测的要求。如果时间序列数据不随时间变化或没有时间结构,则被称为静止的。因此,非常有必要检查数据是否是静止的。在时间序列预测中,如果数据是静止的,我们就不能从数据中获得有价值的见解。
静止数据的示例图:
静止性的类型:
当涉及到识别数据是否静止时,意味着要识别数据中细微的静止性概念。在时间序列数据中观察到的静止性类型包括
1.趋势静止 – 不显示趋势的时间序列。
2.季节性静止 – 一个不显示季节性变化的时间序列。
3.严格静止 – 观察值的联合分布不受时间转移的影响。
分步实现
下面的步骤将让用户容易理解检查给定时间序列数据是否静止的方法。
第1步:绘制时间序列数据
点击这里下载实践数据集daily-female-births-IN.csv。
输出:
第2步:评估描述性统计数字
这通常是通过将数据分成两个或更多的分区并计算每组的平均数和方差来实现的。如果这些一阶矩在这些分区中是一致的,那么我们可以假设数据是静止的。让我们使用1949-1960年间的航空公司乘客数量数据集。
输出:
现在,让我们把这些数据划分为不同的组,并计算不同组的平均数和方差,检查其一致性。
输出:
输出结果清楚地表明,三组的平均数和方差相差很大,说明数据是非平稳的。例如,如果均值1=150,均值2=160,均值3=155,方差1=33,方差2=35,方差3=37,那么我们可以得出结论,数据是静止的。有时这种方法对某些分布会失效,如对数正态分布。
让我们试试上面的例子,但用NumPy的log()函数对乘客人数进行记录,并检查结果。
输出:
输出表明有一些趋势,但不像前面的情况那样非常陡峭,现在我们来计算分区的平均值和方差。
输出:
理想情况下,我们会预期平均数和方差会有很大的不同,但它们是一样的,在这种情况下,这种方法会非常失败。为了避免这种情况,我们有另一种统计测试,下面将讨论。
第3步:增强的迪克-富勒检验
这是一个专门用来测试单变量时间序列数据是否静止的统计测试。这个测试是基于一个假设,可以告诉我们它被接受的概率程度。它通常被归类为单位根检验之一,它决定了单变量时间序列数据遵循趋势的程度。让我们定义一下无效假设和备用假设。
- 何(无假设):时间序列数据是非平稳的
- H1(备用假设):时间序列数据是静止的
假设α=0.05,意味着(95%的置信度)。如果p>0.05不能拒绝无效假设,则用p值来解释测试结果,否则如果p<=0.05则拒绝无效假设。现在,让我们使用同样的航空乘客数据集,用stats模型包提供的adfuller()统计函数进行检验,以检查数据是否静止。
输出:
根据我们的假设,ADF统计量在不同的水平上都远远大于临界值,而且P值也大于0.05,这意味着,我们在90%、95%和99%的置信度下都无法拒绝无效假设,这意味着时间序列数据是强烈的非平稳的。
现在,让我们试着对对数规范化的数值进行ADF检验,并交叉检查我们的结果。
输出:
正如你所看到的,ADF检验再一次表明,ADF统计量在不同的水平上都远远大于临界值,而且P值也远远大于0.05,这标志着,我们可以在90%、95%和99%的置信水平下拒绝无效假设,这意味着时间序列数据是强烈的非平稳的。
因此,ADF单位根检验是检查时间序列数据是否静止的一种稳健检验。