ARIMA Model ตอนที่ 3: หา AR (p) ด้วย Partial Autocorrelation Function

Sasiwut Chaiyadecha
2 min readApr 15, 2020

--

เออว่ะ เขียนได้มากกว่า 2 ตอนด้วย เอาล่ะ… ตอนนี้ตอนที่ 3 แล้ว อย่าลืมไปอ่าน 2 ตอนก่อนหน้านี้ด้วยเพื่อความไม่งง

Partial Autocorrelation

Components ใน Order(p,d,q) ต่อไปที่เราต้องทำการหาก็คือ “p” หรือมาจากตัว Auto Regressive (AR) นั่นเอง ซึ่งเจ้า AR คือ “lag time” ของตัวมันเอง ดังนั้นแปลความหมายอย่างง่ายก็คือ ค่า ณ วันนี้มีความสัมพันธ์กับค่าที่เกิดขึ้นมาแล้วจากอดีต ณ ช่วงเวลาใดเวลาหนึ่ง

This parameter says it’s likely to rain tomorrow if it has been raining for the last 5 days.

การหาค่า AR หรือ p ที่เหมาะสมกับ ARIMA Model สามารถใช้ Partial Autocorrelation Function หรือเรียกสั้น ๆ ว่า PACF โดยหลักการทำงานของมันคือ การหาค่า Correlation ของข้อมูลและ lag time ของตัวมันเอง แต่คำว่า Partial มันคือส่วนนึงเท่าในการคำนวณเท่านั้น หมายความว่า Analysis นี้ ไม่นำค่าที่คำนวณไปแล้วมารวมอยู่ด้วย ใน Python มี Packages ง่าย ๆ ที่ใช้การหาค่า PACF รวมไปถึง Plot ออกมากได้อย่างสวยงาม

Code

ใช้ตัว plot_pacf จาก statsmodels.graphics.tsaplots ในการ Plot กราฟ และตัว pacf จาก statsmodels.tsa.stattools จากนั้นเริ่มทำโมเดลได้เลย จำได้ไหมจากตอนที่ 2 ที่เราต้องหา ตัว “d” ออกมาก่อน เพื่อที่จะได้รู้ Formation ของตัวแปรที่ใช้ในการสร้างโมเดล ซึ่งเราแค่ทำ First difference ดังนั้นจึงสามารถใช้รูปแบบปกติทำโมเดลต่อได้เลย แต่เราห้ามลืม d แล้วกันนะ

อันดับแรกของลอง Plot PACF ออกมาดูหน้าตากันก่อน ซึ่ง Method ใช้เป็น method=’ols’

Partial Autocorrelation
และนี่คือกราฟ partial autocorrelation หน้าตามันก็ประมาณนี้

จากนั้นเราก็มาค่า PACF ด้วย pacf(df, method = ‘ols’) ยังคงใช้ method=’ols’ เหมือนเดิม ซึ่ง Method OLS ตาม Manual เขียนไว้ว่า

Based on simulation evidence across a range of low-order ARMA models, the best methods based on root MSE are Yule-Walker (MLW), Levinson-Durbin (MLE) and Burg, respectively. The estimators with the lowest bias included included these three in addition to OLS and OLS-unbiased.

ต่อมาเราจะมาทำการหาค่า p จริง ๆ กันแล้ว การคำนวณหาค่า p สามารถหาได้จากจุดตัวของกราฟ ซึ่งเราต้องหาจุดตัดหรือ Cut-off ตาม Confidence interval ที่ 95% ค่า z จะอยู่ที่ 1.96

เราสามารถเขียน loop ได้ง่าย ๆ คือ ให้เอาค่าในตำแหน่งของ array ไปเทียบกับ Cut-off ของเรา เมื่อไหร่ก็ตามที่ค่าน้อยกว่า Cut-off ให้หยุด และ i ก็คือจุด p ที่เราต้องการ

Result

p= 2

ตอนนี้เราได้ p ออกมาแล้วเท่ากับ 2 ตอนนี้รู้สึกว่าเขียนยาว แต่จริง ๆ แล้วมันไม่มีอะไรมาก หวังว่าตอนต่อไปคงสั้นกว่านี้ เพราะวิธีการเหมือนกันเลย

--

--