## 01 数据来源

19591977163505501749.42.39570274.741.65NaN
1960197814020597.21495.41.7361040.26.592.870.07
196119799490500.61782.82.23468285.982.95-0.233
1962198024510472.11911.52.12333288.411.14-0.288
1963198129340507.11958.71.672592810.810.95-0.222

## 03 时间序列预测高考录取率

```import matplotlib.pyplot as plt
# 确定目标数据
tag = data['高考录取率']
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf
fig = plt.figure(figsize=(12,4))
tag.plot()
plt.title('Sequence diagram')
plot_acf(tag,ax=ax2) # 自相关图
plt.show()```

```# 平稳性检测

```(-0.5482617125015317,
0.882249553115714,
0,
44,
{
'1%': -3.5885733964124715,
'5%': -2.929885661157025,
'10%': -2.6031845661157025},
203.98252176030874)```

### 3.3 差分处理

```tag_diff = tag.diff().dropna()
tag_diff.plot()
plt.title('First order sequence diagram')
plt.show()```

```## 二阶
tag_diff2 = tag_diff.diff().dropna()
tag_diff2.plot()
plt.title('Second order sequence diagram')
plt.show()```

```# 偏自相关
fig = plt.figure(figsize=(12,4))
plot_acf(tag_diff,ax=ax1)
plot_pacf(tag_diff,ax=ax2)
plt.show()```

`ADF(tag_diff2)`

```(-7.7836768644929695,
8.2881029271227e-12,
1,
41,
{
'1%': -3.60098336718852,
'5%': -2.9351348158036012,
'10%': -2.6059629803688282},
202.9415785772855)```

，显着小于0.05，所以二阶差分后的序列是平稳序列。

### 3.4 白噪声检验

```# 白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox
acorr_ljungbox(tag_diff2,lags=[6,12,24])```

```(array([14.16785, 16.24145, 22.69118]),
array([0.02781, 0.18042, 0.53808]))```

```lbvalue: QLB检验统计量
pvalue: QLB检验统计量下对应的P值```

`lags=6`

，此时可判断该序列为非白噪声序列，具有观测价值。

### 3.5 应用ARIMA模型

```from statsmodels.tsa.arima_model import ARIMA
# 一般阶数不超过length/10
pmax = int(len(tag_diff)/10)
qmax = int(len(tag_diff)/10)
bic_matrix = []
for p in range(pmax+1):
tmp = []
for q in range(qmax+1):
try:
tmp.append(ARIMA(tag, (p,1,q)).fit().bic)
except:
tmp.append(None)
bic_matrix.append(tmp)
bic_matrix = pd.DataFrame(bic_matrix)
p,q = bic_matrix.stack().idxmin()  ## 得到最小p、q值
## 由于对原视数据进行了二阶差分，所以此处的d值为 2
model = ARIMA(tag, (p,2,q)).fit()
model.summary2()```

### 预测2030年的高考录取率

```print('预测2030年的高考录取率为 ' +
str(model.forecast(9)[0][-1]) + '%')```

`预测2030年的高考录取率为 95.79511627906977%`

```print('预测2030年的高考录取率为 ' +
str(model.forecast(9)[0][-1]) + '%')```

`预测2050年的高考录取率为 98.79511627906977%`

## 04 结论

ARIMA是一种非常流行的时间序列统计方法，它是差分整合移动平均自回归模型，分别是自回归（AR）项指的是差分序列的滞后，移动平均（MA）项是指误差的滞后，而I是用于使时间序列平稳的差分数，描述了数据点的相关性，并考虑数值之间的差异。