> For the complete documentation index, see [llms.txt](https://skywateryang.gitbook.io/timeseriesanalysis101/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://skywateryang.gitbook.io/timeseriesanalysis101/untitled-1/3.1-zhen-dui-shi-jian-xu-lie-de-te-shu-fang-fa/3.1.2-xun-zhao-zi-xiang-guan.md).

# 3.1.2 寻找自相关

自相关是时间序列的一个重要概念，指的是时间序列中某一个时刻的值和另一个时刻的值具有一定的相关性。举例来说，有一个每天更新的气温数据，你可能会发现每年5月15号和8月15号的气温存在某种关联，当年5月15号更热，则对应的8月15号也更热。当然还有一种可能性是这种关联性趋近于0， 知道5月15号的气温并不会给你任何关于8月15号气温的信息。

为了进一步探索自相关，需要引入两个函数，自相关函数和偏自相关函数来描述这一现象。

**The autocorrelation function**&#x20;

自相关（acf）函数描述的是一组时间序列和它前面间隔n个时刻的一组时间序列之前的相关性。

关于acf有一些重要的事实：

* 周期性序列的acf值和原始序列具有相同的周期性
* 对几个周期性序列的和计算acf，和分别计算每个周期性序列的acf再相加，结果是一样的
* 所有时间序列在间隔lag=0时的acf值都为1，也就是时间序列和它本身之前具有完全的正相关性
* 一个完全的白噪声序列，它在任何间隔处的acf都近似于0
* 对于任何一个时间序列，它在5%的置信度下的acf值不显著为0的置信区间临界值为$$± \frac{1.96} {\sqrt{T-d}}$$，其中T为样本量，d为时间间隔，从公式中可以得出，随着时间间隔d的增大，置信区间也是在不断增大的，也就是说距离越远的相关性越不可信。

**The partial autocorrelation function**&#x20;

偏自相关（pacf）函数描述的是一组时间序列和它前面间隔n个时刻的一组时间序列之前的偏相关性。这里的偏相关性可以从本质上理解为去除了样本之间的干涉，也就是更早时刻的相关性影响。

举例来说，计算时间间隔3的pacf是去除了时间间隔小于3的样本的影响，而只计算由于时间间隔为3时的时间序列之间的相关性，因为时间间隔为1和2的样本的影响已经在前面的pacf函数中计算过了。通过之后python实战的例子可以帮助我们理解这个概念。

关于pacf也有一些有趣的事实：

* 对于周期性时间序列，pacf会迅速趋近于0，而不像是acf一样呈现周期性，因此pacf没有太多冗余信息存在。这对于我们判断要收集多长的时间序列才能获取足够多的信息具有很大的帮助。
* pacf的置信区间临界值和acf相同

在下面的python实战部分，我们会看到一个平稳时间序列的例子和一个非平稳时间序列的例子。

**Python代码实现**

```python
# 导入气温数据
series = pd.read_csv('data/daily-min-temperatures.csv', header=0, index_col=0,
parse_dates=True, squeeze=True)
```

```python
# 画出最低气温时间序列
plt.plot(series)
```

![](https://3993849477-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mhv1ams1lvf_fMUn_is%2F-MiFR7EXWOKmUDP-2U9g%2F-MiFSk8PVJGAS1T9Uvwt%2F3_3.png?alt=media\&token=edebe308-48ae-4a39-838b-c436a2eea7ad)

```python
# 画出acf函数
# 蓝色底色区域内画出的是95%置信区间，数据落在蓝色区域内表示在统计学意义上在x轴的时间间隔下具有自相关性
plot_acf(series)
plt.show()
```

![](https://3993849477-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mhv1ams1lvf_fMUn_is%2F-MiFR7EXWOKmUDP-2U9g%2F-MiFSl5TXAVVJ8m0Z6T8%2F3_4.png?alt=media\&token=279b2f80-8ef5-4686-8cef-ecc276efa90f)

```python
# 画出pacf函数
plot_pacf(series)
plt.show()
```

![](https://3993849477-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mhv1ams1lvf_fMUn_is%2F-MiFR7EXWOKmUDP-2U9g%2F-MiFSmJMI_OYj8l7YLdE%2F3_5.png?alt=media\&token=4a3e393a-f9bc-4a82-92a2-188b3d0f73f0)

```python
# 构造一个非平稳线性增长时间序列
x= np.linspace(1,100,100)
plt.plot(x)

```

![](https://3993849477-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mhv1ams1lvf_fMUn_is%2F-MiFR7EXWOKmUDP-2U9g%2F-MiFSnKbWJ446M_Ve8B7%2F3_6.png?alt=media\&token=625d88ce-aff7-4e41-bb68-9f90813d9499)

```python
plot_acf(x)
plt.show()
```

![](https://3993849477-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mhv1ams1lvf_fMUn_is%2F-MiFR7EXWOKmUDP-2U9g%2F-MiFSoRCKa_RKbIaMYXO%2F3_7.png?alt=media\&token=25749c39-cc9c-4b16-b003-d1b2db7b0973)

```python
plot_pacf(x)
plt.show()
# 从这个例子可以看到，从lag>=2开始，pacf值几乎都等于0，而lag=1
```

![](https://3993849477-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mhv1ams1lvf_fMUn_is%2F-MiFR7EXWOKmUDP-2U9g%2F-MiFSp_JPk0YVrTghM6h%2F3_8.png?alt=media\&token=9813e99a-d94f-4a10-a38c-762ffb313cba)
