ARIMA Model ตอนที่ 4: หา MA (q) ด้วย Autocorrelation Function

Sasiwut Chaiyadecha
2 min readApr 20, 2020

--

มาาา ตอนที่ 4 แล้วหาค่านี้เสร็จ เราจะได้ทำการ Fit model กันแล้ว ดังนั้นลุยกันไปเร็ว ๆ เลย อย่าลืมอ่าน 3 ตอนก่อนหน้านี้กันด้วยนะ จะได้ทำไปพร้อมกันเลย

Autocorrelation Function

Components สุดท้ายยยย ใน Order(p,d,q) ที่เราต้องหาคือก็ “q” หรือ Moving Average (MA) นั่นเอง (ทำไมต้องดีใจขนาดนี้) อธิบายก่อน MA คือ “lag time” เหมือนกัน แต่แทนที่จะเป็น lag time ของตัวมันเอง MA จะพิจารณา lag time ของ Error แทนเท่านั้นเอง

This parameter sets the error of the model as a linear combination of the error values observed at previous time points in the series.

การค่าหา q หรือ MA ที่เหมาะสมสามารถหาได้จาก Autocorrelation Function (ไม่มี Partial แล้วนะ) โดยย่อมาเป็น ACF ซึ่งหลักการจะซับซ้อนน้อยกว่า PACF นิดหน่อยคือ มันหาค่า Correlation ระหว่างข้อมูล และ lag time ของตัวมันเอง แบบตรงไปตรงมาเลย ซึ่ง Python ก็มี Packages เตรียมไวให้หมดแล้ว

Code

หน้าตา Packages มันดูคล้ายกันมาก จริง ๆ เรา Import ทีเดียวทั้ง PACF และ ACF เลยก็ได้ แต่ครั้งนี้แยกตอนกันเขียน เลย Import แยกก็ไม่เป็นไร จุดที่แตกต่างออกไปคือ ใน ACF ไม่ต้องเลือก method = ‘ols’ อะไรแล้ว สามารถใช้งานได้ตรง ๆ เลย

Autocorrelation Function AOT stock
หน้าตาของกราฟ Autocorrelation ก็จะประมาณนี้ ดูจากกราฟแล้ว ไม่น่าจะดีแน่ ๆ

จากนั้นเราก็หา array ที่เก็บค่า ACF ได้จาก acf(df, fft = True) ที่ต้องตั้งให้ fft = True เพราะว่า

For very long time series it is recommended to use fft convolution instead. When fft is False uses a simple, direct estimator of the autocovariances that only computes the first nlag + 1 values. This can be much faster when the time series is long and only a small number of autocovariances are needed.

จริง ๆ ลองตั้งทั้ง True และ False แล้วค่าไม่ต่างกันเลย น่าจะเป็นเรื่องของความเร็วอย่างที่เค้าเขียนไว้แหละ

มาว่ากันเรื่องกราฟที่ Plot ออกมาดีกว่า มองก็รู้ว่าจุดตัดไม่มีแน่ ๆ เพราะว่าทุกจุดอยู่เหนือ Cut-off หมดแล้ว แบบนี้เท่ากับว่าเราจะหา q ไม่ได้ ทำไงดีล่ะ… ไม่เป็นไร ลองเขียน loop เดิมให้มันลองหาดูก่อน

จากนั้นใช้ loop ในการหาจุดตัดกราฟของ ACF ไม่ได้เลย

Result

[...]

มาถึงตอนนี้ ขอ Tentatively pick-up “q” ขึ้นมาก่อนละกัน ขอเลือกเป็น 2 ไว้ก่อน แล้วตอนต่อไปมาลองดูว่าจะหาอะไรมา Support ได้ไหม

--

--