Đừng Vội C cất Áo Khoác Mùa Đông
Cuối cùng, bạn sẽ dự báo nhiệt độ trong 30 năm tới bằng mô hình ARMA(1,1), kèm theo các dải tin cậy quanh ước lượng đó. Hãy nhớ rằng ước lượng của xu hướng trôi (drift) sẽ ảnh hưởng lớn hơn nhiều đến các dự báo dài hạn so với các tham số ARMA.
Trước đó, bạn đã xác định dữ liệu nhiệt độ đi theo quy luật random walk và đã xét việc sai phân bậc một. Trong bài này, bạn sẽ dùng module ARIMA trên dữ liệu nhiệt độ (trước khi sai phân), điều này tương đương với việc dùng module ARMA trên các thay đổi của nhiệt độ, rồi lấy tổng tích lũy của các thay đổi này để thu được dự báo nhiệt độ.
Vì nhiệt độ có xu hướng tăng theo thời gian, bạn cũng cần thêm thành phần xu hướng khi định nghĩa mô hình ARIMA. Trong bài tập, bạn sẽ dùng xu hướng tuyến tính theo thời gian bằng cách đặt đối số trend='t'. Bạn cũng có thể thử các mô hình xu hướng khác để xem dự báo thay đổi ra sao. Ví dụ, với xu hướng bậc hai \(\small a+ bt + ct^2\), đặt trend=[0,1,1] để bao gồm cả hạng tuyến tính, \(\small bt\), và hạng bậc hai, \(\small ct^2\), trong mô hình.
Dữ liệu đã được nạp sẵn trong DataFrame tên là temp_NY.
Bài tập này là một phần của khóa học
Phân tích chuỗi thời gian với Python
Hướng dẫn bài tập
- Tạo một instance của lớp
ARIMAtênmodcho mô hình ARMA tích phân (integrated) (1,1), tức mô hình ARIMA(1,1,1)- Tham số
dtrongorder(p,d,q)là một, vì ta đã sai phân bậc một - Fit
modbằng phương thức.fit()và gọi kết quả làres
- Tham số
- Dự báo chuỗi bằng phương thức
plot_predict()trênres- Chọn ngày bắt đầu là
1872và ngày kết thúc là2046
- Chọn ngày bắt đầu là
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Import the ARIMA module from statsmodels
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_predict
# Forecast temperatures using an ARIMA(1,1,1) model
mod = ARIMA(temp_NY, trend='t', order=(1,1,1))
___ = ___.fit()
# Plot the original series and the forecasted series
fig, ax = plt.subplots()
temp_NY.plot(ax=ax)
plot_predict(___, start='1872', end='2046', ax=ax)
plt.show()