อย่าเพิ่งเก็บเสื้อกันหนาวเข้าตู้
ในขั้นตอนสุดท้าย จะพยากรณ์อุณหภูมิในช่วง 30 ปีข้างหน้าโดยใช้โมเดล ARMA(1,1) พร้อมแสดงช่วงความเชื่อมั่นรอบค่าประมาณด้วย ควรทราบว่าค่าประมาณของ drift จะมีผลต่อการพยากรณ์ระยะยาวมากกว่าพารามิเตอร์ ARMA
ก่อนหน้านี้ได้พิจารณาแล้วว่าข้อมูลอุณหภูมิเป็นไปตาม random walk และได้ลองใช้ first differencing กับข้อมูล ในแบบฝึกหัดนี้จะใช้โมดูล ARIMA กับข้อมูลอุณหภูมิดั้งเดิม (ก่อน differencing) ซึ่งให้ผลเทียบเท่ากับการใช้โมดูล ARMA กับ การเปลี่ยนแปลง ของอุณหภูมิ แล้วจึงนำผลบวกสะสม (cumulative sum) ของการเปลี่ยนแปลงเหล่านั้นมาใช้พยากรณ์อุณหภูมิ
เนื่องจากอุณหภูมิมีแนวโน้มสูงขึ้นตามเวลา จึงต้องเพิ่มองค์ประกอบ trend เมื่อกำหนดโมเดล ARIMA ด้วย ในแบบฝึกหัดนี้จะใช้ linear trend โดยกำหนด argument trend='t' นอกจากนี้ยังลองใช้โมเดล trend แบบอื่นเพื่อดูว่าการพยากรณ์เปลี่ยนแปลงอย่างไรได้ด้วย เช่น สำหรับ quadratic trend \(\small a+ bt + ct^2\) ให้กำหนด trend=[0,1,1] เพื่อรวมทั้ง linear term \(\small bt\) และ quadratic term \(\small ct^2\) ไว้ในโมเดล
ข้อมูลถูกโหลดไว้ล่วงหน้าใน DataFrame ชื่อ temp_NY
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาด้วย Python
คำแนะนำการฝึกหัด
- สร้าง instance ของคลาส
ARIMAชื่อmodสำหรับโมเดล ARMA(1,1) แบบ integrated หรือโมเดล ARIMA(1,1,1)- ค่า
dในorder(p,d,q)เท่ากับ 1 เนื่องจากผ่านการ first differencing มาแล้วหนึ่งครั้ง - Fit
modโดยใช้เมธอด.fit()แล้วเก็บผลลัพธ์ไว้ในตัวแปรres
- ค่า
- พยากรณ์อนุกรมเวลาโดยใช้เมธอด
plot_predict()กับres- กำหนดวันที่เริ่มต้นเป็น
1872และวันที่สิ้นสุดเป็น2046
- กำหนดวันที่เริ่มต้นเป็น
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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()