ARIMA adalah gabungan antara dua metode, yaitu Auto Regressive (AR) dan Moving Average (MA). I nya menjelaskan Integrated. Tujuan utama dari ARIMA adalah melakukan autocorrelation pada data.
Stasionarity time series memiliki arti bahwa pada data time series yang kita miliki tidak memiliki trend maupun seasonal dan memiliki variansi konstan[^4]. Apabila data yang kita miliki belum stasioner, maka kita bisa melakukan differencing.
Jadi untuk membuat datanya stasioner, cara yang paling umum digunakan adalah dengan melakukan differencing diff
, yaitu mengurangi data saat ini dengan data sebelumnya[^5]. Terkadang, tergantung pada kompleksitas data, jumlah differencing bisa lebih dari 1 kali.
Ide utama melakukan differencing adalah agar ketika melakukan prediksi, tidak ada multicolinearity terhadap data-data sebelumnya.
Model ARIMA:
ARIMA(p,d,q)
Auto regressive di ARIMA artinya kita membuat model linear regression berdasarkan lag dari datanya sebagai prediktor[^6]. Linear regression models, baik ketika prediktornya tidak ada korelasi dan independen satu dengan lainnya. Nilai p
berarti berapa banyak data yang akan dipakai ketika melakukan auto regressive.
Model autoregressive dapat dituliskan sebagai berikut.
Yt = α + β1Yt − 1 + β2Yt − 2 + ... + βpYt − p + ϵ1
dimana, Yt − 1 adalah lag1, β1 adalah coefficient dari lag1, dan α adalah intercept.
Moving Average dalam ARIMA artinya kita melakukan rata-rata berjalan terhadap data time series itu sendiri[^7].
Moving Average Model (MA model).
Yt = α + ϵt + ϕ1ϵt − 1 + ϕ2ϵt − 2 + ... + ϕqϵt − q
Arima memiliki bentuk model (p,d,q) dimana[^8] :
p
berarti berapa banyak data yang akan dipakai ketika melakukan auto regressive.Untuk mencari order p untuk model AR, kita dapat melihat dari plot PACF (Partial Autocorrelation Function).
Integrated -> I(d)
Integrated adalah berapa kali data dilakukan differencing untuk membuat suatu data stationer. Nilai d
dapat diketahui dengan mencari tahu berapa kali differencing yang dilakukan pada data.
Moving Average -> MA(q)
MA digunakan untuk melakukan smoothing error. Nilai q
berarti berapa banyak data yang diperlukan untuk smoothing error menggunakan moving average.
Untuk mencari order q untuk model MA, kita dapat melihat dari plot ACF (Auto correlation Function)
Peramalan akan dilakukan terhadap data Penjualan motor YAMAHA Tahun 2018 menggunakan model ARIMA terbaik
# read data
=read.csv(file.choose(),header=TRUE,sep=";")
datahead(data)
# cek apakah ada atau tidaknya NA
%>%
data anyNA()
> [1] FALSE
# Cek seberapa banyak jumlah NA pada masing-masing kolom
%>%
data is.na() %>%
colSums()
> t periode.tahun Honda Yamaha Suzuki
> 0 0 0 0 0
> Kawasaki
> 0
<- ts(data = data$Yamaha, start = c(2009), frequency = 12)
yamaha_ts yamaha_ts
> Jan Feb Mar Apr May Jun Jul Aug Sep Oct
> 2009 185900 188047 186286 221016 217867 204735 214136 223222 212012 207671
> 2010 162135 180723 196695 189082 206992 218614 250483 279054 187904 279049
> 2011 239340 250894 269041 308418 272825 298708 303118 316447 208690 315060
> 2012 277686 243810 319686 288779 281952 243771 312506 284719 276284 253281
> 2013 206704 258481 247103 236185 201589 167661 185783 134020 208849 233849
> 2014 203051 202102 217817 217820 222693 214998 229554 152940 216419 231552
> 2015 173502 214532 226897 242330 237586 235120 172377 182829 209767 190618
> 2016 140243 150840 145609 139978 150745 191965 124875 169277 158101 131463
> 2017 112124 139235 108416 120158 112145 127224 91015 123972 119717 114493
> 2018 94117 93511 98040 101908 122186 105133 120608 123620
> Nov Dec
> 2009 210231 194423
> 2010 249364 250897
> 2011 295731 248108
> 2012 230150 133431
> 2013 213891 139809
> 2014 220744 163606
> 2015 130200 158044
> 2016 125472 170062
> 2017 107501 118078
> 2018
Stasioner adalah data yang bergerak disekitar rata-rata globalnya.
ts.plot(yamaha_ts, main ="Plot Data Yamaha")
Karena datanya terdapat trend menurun, artinya data belum stasioner, perlu distasionerkan
Decomposition adalah suatu tahapan dalam time series analisis yang digunakan untuk menguraikan beberapa komponen dalam time series data.
💡 Komponen dalam time series :
Untuk dapat menguraikan data time series kita menjadi 3 komponen tersebut, kita dapat menggunakan fungsi decompose()
.
Memvisualisasikan hasil decompose menggunakan autoplot()
dari package forecast
# autoplot
<- decompose(x = yamaha_ts)
yamaha_decom %>% autoplot() yamaha_decom
Pada hasil decompose kita mendapatkan informasi visualisasi:
Test data : sisanya Train data : diambil 8 tahun pertama
<- head(yamaha_ts, 9*12)
yamaha_train <- tail(yamaha_ts, -length(yamaha_train)) yamaha_test
adf.test()
H0: data tidak stasioner
H1: data stasioner
adf.test(yamaha_train)
>
> Augmented Dickey-Fuller Test
>
> data: yamaha_train
> Dickey-Fuller = -2.1949, Lag order = 4, p-value = 0.4958
> alternative hypothesis: stationary
Dengan alpha = 5%, p-value > alpha artinya gagal tolak H0, artinya data belum stasioner.
yamaha_ts
dengan satu kali differencing=diff(yamaha_train,1)
yamaha.diff1ts.plot(yamaha.diff1, main="Plot Data Differens")
adf.test(yamaha.diff1)
>
> Augmented Dickey-Fuller Test
>
> data: yamaha.diff1
> Dickey-Fuller = -7.119, Lag order = 4, p-value = 0.01
> alternative hypothesis: stationary
Dengan alpha = 5%, p-value < alpha artinya tolak H0, artinya data sudah stasioner.
Data kita perlu dilakukan differencing 1x hingga dia stasioner.
ARIMA(p,d,q)
d -> diperoleh dari hasil berapa kali melakukan differencing = 1
Artinya nilai d pada ARIMA(p,d,q) = 1
p = melihat lag yang keluar dari plot PACF (partial autocorrelation function) q = melihat lag yang keluar dari plot ACF (autocorrelation function)
ACF untuk melihat korelasi suatu data dengan mempertimbangkan data tengahnya. misal ingin melihat korelasi hari senin dengan hari rabu, kita harus mempertimbangkan:
PACF untuk melihat korelasi data tanpa mempertimbangkan data tengahnya. misal ingin melihat korelasi hari senin dengan rabu, cukup melihat nilai korelasi hari senin - rabu saja
Melihat plot pacf dan acf untuk menemukan nilai p
dan `q
%>% tsdisplay() yamaha.diff1
<- Arima(yamaha_train, order = c(2,1,0))
model_yamaha1<- Arima(yamaha_train, order = c(0,1,1)) model_yamaha2
Untuk pemilihan model terbaik kita bisa melihat nilai AIC dari masing-masing model yang paling kecil
$aic model_yamaha1
> [1] 2540.472
$aic model_yamaha2
> [1] 2531.169
# forecast
length(yamaha_test)
> [1] 8
<- forecast(model_yamaha2, h =8) yamaha_forecast
Visualisasi
# menggunakan autoplot dan autolayer
%>%
yamaha_train autoplot()+
autolayer(yamaha_test)+
autolayer(yamaha_forecast$mean)
accuracy()
dari package forecast
untuk melihat MAPE# accuracy
accuracy(model_yamaha2$fitted, yamaha_train)
> ME RMSE MAE MPE MAPE ACF1 Theil's U
> Test set -1870.909 32310.72 23952.57 -3.58503 12.90323 0.02491334 0.7811886
accuracy(yamaha_forecast$mean, yamaha_test)
> ME RMSE MAE MPE MAPE ACF1 Theil's U
> Test set -7502.471 14136.45 12936.34 -8.298467 12.74026 0.3791575 1.192581
Dengan melihat nilai MAPE dapat disimpulkan bahwa model sama - sama memiliki erorr sebesar 12%.
Asumsi pada time series diujikan untuk mengukur apakah residual yang peroleh dari hasil modeling sudah cukup baik untuk menggambarkan dan menangkap informasi pada data. Mengapa menggunakan residual data? Karena dengan menggunakan residual data, kita dapat mendapatkan informasi dari data aktual maupun dari hasil prediksi menggunakan model. Metode forecasting yang baik menghasilkan nilai residual berikut ini[^11]:
H0: residual has no-autocorrelation
H1: residual has autocorrelation
yang diinginkan p-value > 0.05 (alpha), no-autocorrelation
Untuk mengecek ada/tidaknya autokorelasi pada hasil forecasting time series bisa menggunakan beberapa cara, yaitu:
acf(residual model)
# menggunakan visualisasi
acf(model_yamaha2$residuals)
Untuk mengetahui ada atau tidaknya autocorrelation, kita lihat dari lag 1 - terakhir tidak ada yang keluar garis putus-putus. Berdasarkan acf residual model, masih ada lag yang keluar garis putus-putus, bisa saja ada indikasi bahwa model yang dimiliki terdapat autocorrelation
Box.test(residual model, type = "Ljung-Box)
H0: residual has no-autocorrelation
H1: residual has autocorrelation
# menggunakan Ljung-Box test
Box.test(model_yamaha2$residuals, type = "Ljung-Box")
>
> Box-Ljung test
>
> data: model_yamaha2$residuals
> X-squared = 0.068912, df = 1, p-value = 0.7929
Pada Ljung-Box test diats, p-value > alpha, dimana 0.79 > 0.05 artinya gagal tolak H0, artinya residual/eror pada data tidak terdapat autocorrelation
H0: residual menyebar normal
H1: residual tidak menyebar normal
yang diinginkan p-value > 0.05 (alpha), residual menyebar normal
Untuk mengecek normality residual pada hasil forecasting time series kita bisa melakukan uji normality (shapiro test) dengan menggunakan fungsi shapiro.test(residual model)
shapiro.test(model_yamaha2$residuals)
>
> Shapiro-Wilk normality test
>
> data: model_yamaha2$residuals
> W = 0.96018, p-value = 0.002597
Karena p-value < alpha, dimana 0.002 < 0.05, maka residual tidak berdistribusi normal
hist(model_yamaha2$residuals)
Note : Untuk mengecek asumsi cukup di model yang memang paling baik.
predict(model_yamaha2,n.ahead = 4)
> $pred
> Jan Feb Mar Apr
> 2018 114892.8 114892.8 114892.8 114892.8
>
> $se
> Jan Feb Mar Apr
> 2018 32614.11 34667.90 36606.64 38447.74
Nilai prediksi untuk empat periode kedepan mulai dari bulan Januari hingga April 2018 memiliki hasil yang sama yaitu 114892.8
Berdasarkan Analisis yang telah dilakukan, dapat disimpulkan beberapa hal sebagai berikut :
Data yang dapat digunakan dalam metode ARIMA dapat disimpulkan bahwa pola data tidak stasioner.
Berdasarkan uji ADF dapat disimpulkan bahwa nilai p-value 0.49 > 0.05 (α) sehingga didapatkan keputusan gagal tolak H0 sehingga dapat disimpulkan data tidak stasioner.
Berdasarkan plot ACF dan PACF juga disimpulkan bahwa data tidakstationer karena terdapat banyak data yang keluar dari batas lag.
Setelah data di diferensiasikan, pola data menunjukkan stasioner.
Berdasarkan uji ADF dari data yang telah di diferensi dapat disimpulkan bahwa nilai p-value 0,01 < 0.05 (α) sehingga didapatkan keputusan tolak H0 sehingga dapat disimpulkan data stasioner.
Berdasarkan hasil overfitting diperoleh koefisien yang signifikan yaitu model ARIMA (2,1,0) dan model ARIMA (0,1,1).
Berdasarkan hasil uji diagnostik antara model ARIMA (2,1,0) dan model ARIMA (0,1,1), diperoleh model terbaik yaitu model ARIMA (0,1,1) karena memiliki nilai AIC terkecil yaitu sebesar 2531 sehingga layak digunakan untuk forecasting.
Dari hasil peramalan menggunakan model ARIMA (0,1,1), diperoleh hasil yang sama untuk ramalan empat periode kedepan yaitu sebesar 114892.8.