AIC và BIC

Mô hình ARIMA với Python

James Fulton

Climate informatics researcher

AIC - Akaike Information Criterion

  • AIC thấp hơn => mô hình tốt hơn
  • AIC thiên về mô hình đơn giản với bậc thấp
Mô hình ARIMA với Python

BIC - Bayesian Information Criterion

  • Rất giống AIC
  • BIC thấp hơn => mô hình tốt hơn
  • BIC thiên về mô hình đơn giản với bậc thấp
Mô hình ARIMA với Python

AIC so với BIC

  • BIC ưu tiên đơn giản hơn AIC
  • AIC chọn mô hình dự báo tốt hơn
  • BIC chọn mô hình giải thích tốt hơn
Mô hình ARIMA với Python

AIC và BIC trong statsmodels

# Tạo mô hình
model = ARIMA(df, order=(1,0,1))

# Fit mô hình results = model.fit()
# In tóm tắt kết quả print(results.summary())
                            Statespace Model Results                           
==============================================================================
Dep. Variable:                      y   No. Observations:                 1000
Model:               SARIMAX(2, 0, 0)   Log Likelihood               -1399.704
Date:                Fri, 10 May 2019   AIC                           2805.407
Time:                        01:06:11   BIC                           2820.131
Sample:                    01-01-2013   HQIC                          2811.003
                         - 09-27-2015                                         
Covariance Type:                  opg
Mô hình ARIMA với Python

AIC và BIC trong statsmodels

# Tạo mô hình
model = ARIMA(df, order=(1,0,1))

# Fit mô hình results = model.fit()
# In AIC và BIC print('AIC:', results.aic) print('BIC:', results.bic)
AIC: 2806.36 
BIC: 2821.09
Mô hình ARIMA với Python

Tìm kiếm theo AIC và BIC

# Lặp theo bậc AR
for p in range(3):
    # Lặp theo bậc MA
    for q in range(3):

# Fit mô hình model = ARIMA(df, order=(p,0,q)) results = model.fit()
# in bậc mô hình và giá trị AIC/BIC print(p, q, results.aic, results.bic)
0 0 2900.13 2905.04
0 1 2828.70 2838.52
0 2 2806.69 2821.42
1 0 2810.25 2820.06
1 1 2806.37 2821.09
1 2 2807.52 2827.15
...
Mô hình ARIMA với Python

Tìm kiếm theo AIC và BIC

order_aic_bic =[]
# Lặp theo bậc AR
for p in range(3):
    # Lặp theo bậc MA
    for q in range(3):

# Fit mô hình model = ARIMA(df, order=(p,0,q)) results = model.fit()
# Thêm bậc và điểm vào danh sách order_aic_bic.append((p, q, results.aic, results.bic))
# Tạo DataFrame chứa bậc mô hình và điểm AIC/BIC
order_df = pd.DataFrame(order_aic_bic, columns=['p','q', 'aic', 'bic'])
Mô hình ARIMA với Python

Tìm kiếm theo AIC và BIC

# Sắp xếp theo AIC
print(order_df.sort_values('aic'))
   p  q      aic      bic
7  2  1  2804.54  2824.17
6  2  0  2805.41  2820.13
4  1  1  2806.37  2821.09
2  0  2  2806.69  2821.42
...
# Sắp xếp theo BIC
print(order_df.sort_values('bic'))
   p  q      aic      bic
3  1  0  2810.25  2820.06
6  2  0  2805.41  2820.13
4  1  1  2806.37  2821.09
2  0  2  2806.69  2821.42
...
Mô hình ARIMA với Python

Bậc mô hình không dừng

# Fit mô hình
model = ARIMA(df, order=(2,0,1))
results = model.fit()
ValueError: Tham số tự hồi quy khởi tạo không dừng
được phát hiện khi `enforce_stationarity` đặt là True.
Mô hình ARIMA với Python

Khi một số bậc không chạy được

# Lặp theo bậc AR
for p in range(3):
    # Lặp theo bậc MA
    for q in range(3):

# Fit mô hình model = ARIMA(df, order=(p,0,q)) results = model.fit() # In bậc mô hình và giá trị AIC/BIC print(p, q, results.aic, results.bic)
Mô hình ARIMA với Python

Khi một số bậc không chạy được

# Lặp theo bậc AR
for p in range(3):
    # Lặp theo bậc MA
    for q in range(3):

try: # Fit mô hình model = ARIMA(df, order=(p,0,q)) results = model.fit() # In bậc mô hình và giá trị AIC/BIC print(p, q, results.aic, results.bic)
except: # In AIC và BIC là None khi lỗi print(p, q, None, None)
Mô hình ARIMA với Python

Ayo berlatih!

Mô hình ARIMA với Python

Preparing Video For Download...