Jansen 2020 Machine Learning for Al Chapter 9代码复现(三)

八、模型定阶

图解法识别

绘制差分后序列的自相关和偏自相关图,通过观察自相关和偏自相关图找出模型的最优参数

fig = plt.figure(figsize=(12,8))
ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(data_seasonal_first_difference.iloc[13:], lags=40, ax=ax1)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(data_seasonal_first_difference.iloc[13:], lags=40, ax=ax2)
plt.show()

Jansen 2020 Machine Learning for Al Chapter 9代码复现(三)

 网格搜寻

p = d = q = range(0, 2) 
pdq = list(itertools.product(p, d, q)) 
pdq_x_PDQs = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))] 
a=[]
b=[]
c=[]
wf=pd.DataFrame()
for param in pdq:
    for seasonal_param in pdq_x_PDQs:
        try:
            mod = sm.tsa.statespace.SARIMAX(data_seasonal_first_difference,order=param,seasonal_order=seasonal_param,enforce_stationarity=False,enforce_invertibility=False)
            results = mod.fit()
            print('ARIMA{}x{} - AIC:{}'.format(param, seasonal_param, results.aic))
            a.append(param)
            b.append(seasonal_param)
            c.append(results.aic)
        except:
            continue
wf['pdq']=a
wf['pdq_x_PDQs']=b
wf['aic']=c
print(wf[wf['aic']==wf['aic'].min()])

Jansen 2020 Machine Learning for Al Chapter 9代码复现(三)

九、模型的建立

       通过网格搜索,得到了一组最优的参数组合SARIMAX(0,0,1)x(1,0,1,12),通过Python用SARIMAX(0,0,1)x(1,0,1,12)模型拟合天然气二氧化碳排放量的时间序列,即对原序列建立SARIMAX(0,0,1)x(1,0,1,12)模型

mod = sm.tsa.statespace.SARIMAX(data_seasonal_first_difference, 
                                order=(0,0,1), 
                                seasonal_order=(1,0,1,12),   
                                enforce_stationarity=False,
                                enforce_invertibility=False)
results = mod.fit()
print(results.summary())

Jansen 2020 Machine Learning for Al Chapter 9代码复现(三)

 十、模型的检验

        在拟合SARIMA模型时,模型诊断是非常重要的一步,通过模型诊断以确保模型所做的任何假设都没有被违反。模型检验中主要关心的问题是模型的残差是否相关,并且是否是零均值的正态分布。如果SARIMA模型残差是相关的,且不是零均值正态分布,则表明模型可以进一步改进,反之,模型拟合效果很好,可以认为模型充分提取了序列的信息。

#模型检验
#模型诊断
results.plot_diagnostics(figsize=(15, 12))
plt.show()
#LB检验
r,q,p = sm.tsa.acf(results.resid.values.squeeze(), qstat=True) 
data = np.c_[range(1,41), r[1:], q, p] 
table = pd.DataFrame(data, columns=['lag', "AC", "Q", "Prob(>Q)"]) 
print(table.set_index('lag'))

得到:

            AC          Q  Prob(>Q)
lag                                
1.0   0.013837   0.034081  0.853534
2.0  -0.032016   0.217610  0.896905
3.0  -0.099138   1.987580  0.574989
4.0   0.019510   2.056526  0.725363
5.0  -0.061315   2.741537  0.739759
6.0  -0.030645   2.913659  0.819603
7.0  -0.049047   3.357193  0.850112
8.0  -0.112013   5.684391  0.682536
9.0   0.053955   6.227601  0.716941
10.0  0.017386   6.284345  0.790835
11.0  0.090168   7.819933  0.729337
12.0 -0.035384   8.057852  0.780593
13.0 -0.035316   8.296319  0.823774
14.0 -0.021137   8.382277  0.868475
15.0 -0.022020   8.476147  0.903279
16.0  0.092001  10.125063  0.860016
17.0 -0.025731  10.254862  0.892584
18.0  0.056418  10.882849  0.899262
19.0  0.029080  11.050753  0.922119
20.0 -0.051838  11.587760  0.929535
21.0  0.072889  12.656370  0.920183
22.0 -0.011745  12.684298  0.941594
23.0 -0.043936  13.077667  0.950286
24.0 -0.190534  20.524621  0.666585
25.0  0.053909  21.124741  0.685634
26.0  0.047988  21.603475  0.710184
27.0 -0.020272  21.689481  0.752984
28.0 -0.024637  21.817379  0.789675
29.0 -0.003402  21.819835  0.827572
30.0  0.048951  22.331703  0.841707
31.0 -0.012347  22.364498  0.871232
32.0  0.046704  22.836985  0.883369
33.0 -0.033564  23.082721  0.900752
34.0  0.074991  24.318115  0.889844
35.0 -0.059557  25.102892  0.891698
36.0 -0.043354  25.521739  0.903126
37.0 -0.082670  27.055752  0.884957
38.0  0.019746  27.143909  0.904919
39.0 -0.017990  27.217620  0.922332
40.0  0.032648  27.462185  0.933957

        残差序列延迟1-12阶时,Q统计量的P值均大于0.05,所以在0.05的显著性水平下,不拒绝原假设,即残差为白噪声序列,说明残差序列的波动已经没有任何统计规律。因此,可以认为拟合的模型已经充分提取了时间序列中的信息。

Jansen 2020 Machine Learning for Al Chapter 9代码复现(三)

残差的的时序图基本稳定,残差随着时间的波动并没有很大的波动。由右上角的正态分布图可知,模型的残差是正态分布的。红色的KDE线紧随着N(0,1)线。其中,N(0,1)是均值为0,标准差为1的标准正态分布。这很好地说明了残差是正态分布的。而图中左下角的正太Q—Q图也说明了残差服从正态分布。图中右下角残差的自相关图显示残差不存在自相关,说明残差序列是白噪声序列。到此模型建立完毕。

上一篇:Chapter 2 - 利用DFT求函数导数


下一篇:21个项目玩转深度学习实践笔记Deep-Learning-21-Examples/chapter_1/download.py