์๊ณ์ด ๋ชจ๋ธ ARIMA 2 (์๊ธฐํ๊ท ์ง์ ์ด๋ ํ๊ท )
220908 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ IBM ๋ฌธ์์ otexts์ chanpter 8, byeongkijeong๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-) >
https://www.ibm.com/docs/ko/spss-statistics/25.0.0?topic=modeler-custom-arima-models
์ฌ์ฉ์ ์ ์ ARIMA ๋ชจํ
์๊ณ์ด ๋ชจ๋ธ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ์์ธก๋ณ์ ์ธํธ๊ฐ ํฌํจ๋๊ฑฐ๋ ํฌํจ๋์ง ์์ Box-Jenkins1 ๋ชจํ์ด๋ผ๊ณ ๋ ํ๋ ์ฌ์ฉ์ ์ ์ ๋น๊ณ์ ๋๋ ๊ณ์ ARIMA(์๊ธฐํ๊ท ์ง์ ์ด๋ ํ๊ท ) ๋ชจํ์ ์ค์ ํฉ๋๋ค. ์์
www.ibm.com
https://otexts.com/fppkr/arima.html
Chapter 8 ARIMA ๋ชจ๋ธ | Forecasting: Principles and Practice
2nd edition
otexts.com
https://byeongkijeong.github.io/ARIMA-with-Python/
ARIMA, Python์ผ๋ก ํ๋ ์๊ณ์ด๋ถ์ (feat. ๋นํธ์ฝ์ธ ๊ฐ๊ฒฉ์์ธก)
์๋ก ์๊ณ์ด ๋ถ์(Time series analysis)์ด๋, ๋ ๋ฆฝ๋ณ์(Independent variable)๋ฅผ ์ด์ฉํ์ฌ ์ข ์๋ณ์(Dependent variable)๋ฅผ ์์ธกํ๋ ์ผ๋ฐ์ ์ธ ๊ธฐ๊ณํ์ต ๋ฐฉ๋ฒ๋ก ์ ๋ํ์ฌ ์๊ฐ์ ๋ ๋ฆฝ๋ณ์๋ก ์ฌ์ฉํ๋ค๋ ํน์ง์ด
byeongkijeong.github.io
๐ 1. ARIMA (Autoregressive Integrated Moving Average)
โถ ARIMA๋?
: ์๊ณ์ด์ ๋น์ ์์ฑ(Non-stationary)์ ์ค๋ช ํ๊ธฐ ์ํด ๊ด์ธก์น๊ฐ์ ์ฐจ๋ถ(Diffrance)์ ์ฌ์ฉ
- AR : ์๊ธฐํ๊ท(Autoregression)
- ์ด์ ๊ด์ธก๊ฐ์ ์ค์ฐจํญ์ด ์ดํ ๊ด์ธก๊ฐ์ ์ํฅ์ ์ฃผ๋ ๋ชจํ
- theta : ์๊ธฐ์๊ด๊ณ์
- epsilon : white noise
- Time lag : 1์ด ๋ ์๋ ์๊ณ ๊ทธ ์ด์์ด ๋ ์๋ ์์
- I : Intgrated
- ๋์
- ์ฐจ๋ถ์ ์ด์ฉํ๋ ์๊ณ์ด๋ชจํ๋ค์ ๋ถ์ด๋ ํํ
- MA : ์ด๋ํ๊ท (Moving Average)
- ๊ด์ธก๊ฐ์ด ์ด์ ์ ์ฐ์์ ์ธ ์ค์ฐจํญ์ ์ํฅ์ ๋ฐ๋๋ค๋ ๋ชจํ
- beta : ์ด๋ํ๊ท ๊ณ์
- epsilon : t์์ ์ ์ค์ฐจํญ
โถ ๋ชจ์ ์ค์ ARMIA(p, d, q)
- AR๋ชจํ์ Lag์ ์๋ฏธํ๋ p
- MA๋ชจํ์ Lag์ ์๋ฏธํ๋ q
- ์ฐจ๋ถ(Diffrence)ํ์๋ฅผ ์๋ฏธํ๋ d
- ํต์์ ์ผ๋ก p + q < 2, p * q = 0 ์ธ ๊ฐ๋ค์ ๋ง์ด ์ฌ์ฉ
- ๋ชจ์ ์ถ์ ๋ฐฉ๋ฒ
- ACF(Autocorrelation function) : Lag์ ๋ฐ๋ฅธ ๊ด์ธก์น๋ค ์ฌ์ด์ ๊ด๋ จ์ฑ์ ์ธก์ ํ๋ ํจ์
- PACF(Partial autocorrelation function) : k ์ด์ธ์ ๋ชจ๋ ๋ค๋ฅธ ์์ ๊ด์ธก์น์ ์ํฅ๋ ฅ์ ๋ฐฐ์ ํ๊ณ
์
๋ ๊ด์ธก์น์ ๊ด๋ จ์ฑ์ ์ธก์ ํ๋ ํจ์
- AR์ ํน์ฑ์ ๋๋ ๊ฒฝ์ฐ
- ACF๋ ์ฒ์ฒํ ๊ฐ์
- PACF๋ ์ฒ์ ์์ฐจ๋ฅผ ์ ์ธํ๊ณ ๊ธ๊ฒฉํ ๊ฐ์
- MA์ ํน์ฑ์ ๋๋ ๊ฒฝ์ฐ
- ACF๋ ๊ธ๊ฒฉํ ๊ฐ์
- PACF๋ ์ฒ์ฒํ ๊ฐ์
- ACF(Autocorrelation function) : Lag์ ๋ฐ๋ฅธ ๊ด์ธก์น๋ค ์ฌ์ด์ ๊ด๋ จ์ฑ์ ์ธก์ ํ๋ ํจ์
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
- diff๋ ํ ๊ฐ์ฒด ๋ด์์ ์ด๊ณผ ์ด / ํ๊ณผ ํ์ ์ฐจ์ด๋ฅผ ์ถ๋ ฅํ๋ ๋ฉ์๋
DataFrame.diff(periods=1, axis=0)
- ์ฐจ๋ถ์ ํ๋ ์ด์ ๋ non-stationaryํ ๋ฐ์ดํฐ๋ฅผ ์ฐจ๋ถ์ ํตํด stationaryํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ฒ
ARIMA(0,1,1)์ ์ฌ์ฉ! <= plot_acf plot_pacf
โถ ๋ชจํ ๊ตฌ์ถ
- ARIMA(0,1,1)์ ์ด์ฉํ์ฌ ๋ชจํ์ Parameter๋ฅผ ์ถ์ ํ๊ณ , ๊ฒฐ๊ณผ ํ์ธ
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(series, order=(0,1,1))
model_fit = model.fit(trend='nc',full_output=True, disp=1)
print(model_fit.summary())
โถ ์์ธก
- constraint๊ฐ ์๋ ๋ชจํ์ผ๋ก fitting
- ์์ผ๋ก์ ๊ฐ์ ์์ธกํ๊ธฐ ์ํด์๋ forecast method๋ฅผ ์ฌ์ฉ
- steps : ์์ธกํ ๊ฐ์
fore = model_fit.forecast(steps=1)
print(fore)
=> ์์ธก๊ฐ, stderr, upper bound, lower bound