Pendahuluan
Forecasting adalah suatu aspek kunci dalam manajemen bisnis yang memungkinkan perusahaan untuk mengantisipasi dan merencanakan tindakan berdasarkan data masa lalu. Prediksi ini penting untuk menghindari risiko bisnis yang dapat timbul akibat ketidakpastian. Sebagai contoh, saat perayaan tahun baru, perusahaan bir dapat menggunakan data historis untuk memprediksi peningkatan permintaan dan merencanakan produksi mereka. Namun, perusahaan juga harus berhati-hati agar tidak memproduksi terlalu banyak bir yang tidak dibutuhkan. Dengan pendekatan yang tepat dalam peramalan, perusahaan dapat mengambil keputusan yang lebih cerdas, mengatur anggaran, dan menghindari kerugian. Hal ini memungkinkan mereka untuk meminimalkan pemborosan waktu dan biaya, serta memastikan bahwa produk mereka tidak mengalami pemborosan karena tidak terjual.
Dalam prakteknya, penggunaan forecasting akan memungkinkan perusahaan produksi bir untuk memaksimalkan efisiensi produksi mereka. Dengan memahami permintaan masa depan, mereka dapat mengatur waktu dan jumlah produksi secara lebih akurat, menghindari pemborosan bahan baku, dan meminimalkan risiko kerugian. Dengan demikian, forecasting bukan hanya alat penting dalam manajemen bisnis, tetapi juga merupakan elemen kunci untuk mencapai keberhasilan jangka panjang dan pertumbuhan bisnis dengan lebih baik.
Data dan Sumber Data
Berikut merupakan daftar jumlah produksi beer perbulan selama 10 tahun di Australia pada tahun 1985 sampai dengan tahun 1994 yang dikumpulkan berdasarkan data pada Kaggle dengan website https://www.kaggle.com/sergiomora823/monthly-beer-production
data <- read.table(file.choose(), sep = ";", header = T)
head(data)## Tahun Bulan Monthly.beer.production
## 1 1985 January 166.5
## 2 1985 February 151.3
## 3 1985 March 146.2
## 4 1985 April 148.3
## 5 1985 May 144.7
## 6 1985 June 123.6
Analisis Data
Time Series Plot
plot(data$Monthly.beer.production, type = 'l')JIka dilihat dari plot diatas, maka plot menunjukan bentuk pola data seasonal pada time series analysis. Pola seasonal adalah pola data yang dipengaruhi oleh musiman yang ditandai dengan adanya pola perubahan yang berulang yang sama berkali-kali pada interval waktu tertentu. Sehingga misalkan pada bulan januari terjadi penurunan, kemudian pada bulan April terjadi kenaikan, dan pada bulan Agustus terjadi penurunan lagi, dan Pada bulan November terjadi kenaikan lagi, maka pengulangan akan terjadi dari tahun ke tahun. Dapat dilihat pada time series plot bahwa data jumlah produksi beer di Australia dari tahun 1985 sampai tahun 1994 mengalami pengulangan setiap tahunnya.
Selanjutnya kita akan menganalisis data dengan menggunakan metode time series untuk ARIMA.
Pemanggilan library yang digunakan
library (tseries)
library(lmtest)
library(nortest)
library(car)Kemudian dengan ts(data) untuk membuat data menjadi time series
ts(data)## Time Series:
## Start = 1
## End = 120
## Frequency = 1
## Tahun Bulan Monthly.beer.production
## 1 1985 5 166.5
## 2 1985 4 151.3
## 3 1985 8 146.2
## 4 1985 1 148.3
## 5 1985 9 144.7
## 6 1985 7 123.6
## 7 1985 6 151.6
## 8 1985 2 133.9
## 9 1985 12 137.4
## 10 1985 11 181.6
## 11 1985 10 182.0
## 12 1985 3 190.0
## 13 1986 5 161.2
## 14 1986 4 155.5
## 15 1986 8 141.9
## 16 1986 1 164.6
## 17 1986 9 136.2
## 18 1986 7 126.8
## 19 1986 6 152.5
## 20 1986 2 126.6
## 21 1986 12 150.1
## 22 1986 11 186.3
## 23 1986 10 147.5
## 24 1986 3 200.4
## 25 1987 5 177.2
## 26 1987 4 127.4
## 27 1987 8 177.1
## 28 1987 1 154.4
## 29 1987 9 135.2
## 30 1987 7 126.4
## 31 1987 6 147.3
## 32 1987 2 140.6
## 33 1987 12 152.3
## 34 1987 11 151.2
## 35 1987 10 172.2
## 36 1987 3 215.3
## 37 1988 5 154.1
## 38 1988 4 159.3
## 39 1988 8 160.4
## 40 1988 1 151.9
## 41 1988 9 148.4
## 42 1988 7 139.6
## 43 1988 6 148.2
## 44 1988 2 153.5
## 45 1988 12 145.1
## 46 1988 11 183.7
## 47 1988 10 210.5
## 48 1988 3 203.3
## 49 1989 5 153.3
## 50 1989 4 144.3
## 51 1989 8 169.6
## 52 1989 1 143.7
## 53 1989 9 160.1
## 54 1989 7 135.6
## 55 1989 6 141.8
## 56 1989 2 159.9
## 57 1989 12 145.7
## 58 1989 11 183.5
## 59 1989 10 198.2
## 60 1989 3 186.8
## 61 1990 5 172.0
## 62 1990 4 150.6
## 63 1990 8 163.3
## 64 1990 1 153.7
## 65 1990 9 152.9
## 66 1990 7 135.5
## 67 1990 6 148.5
## 68 1990 2 148.4
## 69 1990 12 133.6
## 70 1990 11 194.1
## 71 1990 10 208.6
## 72 1990 3 197.3
## 73 1991 5 164.4
## 74 1991 4 148.1
## 75 1991 8 152.0
## 76 1991 1 144.1
## 77 1991 9 155.0
## 78 1991 7 124.5
## 79 1991 6 153.0
## 80 1991 2 146.0
## 81 1991 12 138.0
## 82 1991 11 190.0
## 83 1991 10 192.0
## 84 1991 3 192.0
## 85 1992 5 147.0
## 86 1992 4 133.0
## 87 1992 8 163.0
## 88 1992 1 150.0
## 89 1992 9 129.0
## 90 1992 7 131.0
## 91 1992 6 145.0
## 92 1992 2 137.0
## 93 1992 12 138.0
## 94 1992 11 168.0
## 95 1992 10 176.0
## 96 1992 3 188.0
## 97 1993 5 139.0
## 98 1993 4 143.0
## 99 1993 8 150.0
## 100 1993 1 154.0
## 101 1993 9 137.0
## 102 1993 7 129.0
## 103 1993 6 128.0
## 104 1993 2 140.0
## 105 1993 12 143.0
## 106 1993 11 151.0
## 107 1993 10 177.0
## 108 1993 3 184.0
## 109 1994 5 151.0
## 110 1994 4 134.0
## 111 1994 8 164.0
## 112 1994 1 126.0
## 113 1994 9 131.0
## 114 1994 7 125.0
## 115 1994 6 127.0
## 116 1994 2 143.0
## 117 1994 12 143.0
## 118 1994 11 160.0
## 119 1994 10 190.0
## 120 1994 3 182.0
kemudian kita membuat variabel prodcution untuk menampung data production.
production <- data$Monthly.beer.production
head(production)## [1] 166.5 151.3 146.2 148.3 144.7 123.6
PACF dan ACF
Melihat pola PACF (Partial Auto Correlation Function) dan ACF (Auto Correlation Function) untuk menentukan order yang sesuai
pacf(production)ACF (Auto Correlation Function)
acf(production)Berdasarkan PACF di atas, dapat kita lihat nlai PACF nya signifikan pada lag 1 dan lag 2 sampai lag 10 tidak signifikan (karena nilai masih berada di dalam garis interval), kemudian signifikan lagi pada lag 11 dan lag 12. Kemudian pada ACF diatas, dapat dilihat nilai ACF nya signifikan pada lag 1 dan lag 2 , kemudian pada lag 3 sampai lag 10 tidak signifikan karena masih beda di dalam garis interval, lalu signifikan lagi pada lag 11, lag 12 dan lag 13. Sehingga hal ini menandakan adanya perulangan atau musiman di dalamnya.
Uji stasioner terhadap mean (adf test)
H0 : Tidak stasioner terhadap mean
H1 : Stasioner terhadap mean
Dengan alfa = 0,05
Tolak H0 jika p-value < alfa
adf.test(production)##
## Augmented Dickey-Fuller Test
##
## data: production
## Dickey-Fuller = -5.8104, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Karena p-value < alfa yaitu 0,01 < 0,05 maka tolak H0
Kesimpulan data time series bersifat stasioner terhadap mean
Karena sudah stasioner terhadap mean maka tidak perlu dilakukan differencing Selanjutnya kita mencari model Arima kita
Pemodelan
Model 1
Dengan menggunakan order (1,0,2) dan seasonal order (1,0,1) dengan periode 12 dan menggunakan alfa = 0,05
model1 <- arima(production, order = c(3,0,2), seasonal = list(order = c(1,0,1), period = 12))
model1##
## Call:
## arima(x = production, order = c(3, 0, 2), seasonal = list(order = c(1, 0, 1),
## period = 12))
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 sar1 sma1 intercept
## 0.0830 0.4415 0.3855 -0.1958 -0.5026 0.9953 -0.7791 153.2169
## s.e. 0.1718 0.1663 0.0920 0.1829 0.1688 0.0071 0.1500 22.8922
##
## sigma^2 estimated as 108: log likelihood = -467.53, aic = 953.06
Uji signifikansi
H0 : SHI = 0
H1 : SHI ≠0
Tolak H0 jika p-value < alfa
coeftest(model1)##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.0830252 0.1717790 0.4833 0.628864
## ar2 0.4415116 0.1663388 2.6543 0.007948 **
## ar3 0.3855373 0.0919845 4.1913 2.773e-05 ***
## ma1 -0.1958349 0.1828500 -1.0710 0.284163
## ma2 -0.5025619 0.1688169 -2.9770 0.002911 **
## sar1 0.9952905 0.0070996 140.1906 < 2.2e-16 ***
## sma1 -0.7790825 0.1499677 -5.1950 2.047e-07 ***
## intercept 153.2169195 22.8921817 6.6930 2.187e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Karena semua p-value < alfa yaitu < 0,05 maka tolak H0
Kesimpulan semua parameter signifikan
Uji Residual White Noise
H0 : Residual bersifat white noise
H1 : Residual tidak bersifat white noise
Alfa = 0,05
Tolak H0 jika p-value < alfa
Box.test(model1$residuals, type = "Ljung-Box")##
## Box-Ljung test
##
## data: model1$residuals
## X-squared = 0.012333, df = 1, p-value = 0.9116
Karena p-value > alfa yaitu 0,9797 > 0,05 maka gagal tolak H0
Kesimpulan Residual bersifat white noise
Uji Residual berdistribusi normal
H0 : error berdistirbusi normal
H1 : error tidak berdistribui normal
Alfa = 0,05
Tolak H0 jika p-value < alfa
lillie.test(model1$residuals)##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: model1$residuals
## D = 0.073398, p-value = 0.1165
Karena p-value < alfa yaitu 0,1781 > 0,05 maka gagal tolak H0
Kesimpulan error berdistribusi normal
Selanjutnya adalah menghitung nilai dari residual dan Mean Square Error (MSE) dari model 1
e1 <- resid(model1)
mse1 <- sum(e1^2)/length(e1)
mse1## [1] 107.9766
Jadi kesimpulan dari model 1 adalah data yang kita gunakan memiliki signifikansi yang baik, dan residual bersifat white noise dan residual berdistribusi normal, kemudian dengan metode ARIMA order (1,0,2) dan seasonal order (1,0,1) dengan periode 12 didapatkan MSE sebesar 121,7115
Model 2
Dengan menggunakan order (2,0,3) dan seasonal order (1,0,1) dengan periode 12 dan menggunakan alfa = 0,05
model2 <- arima(production, order = c(2,0,3), seasonal = list(order = c(1,0,1), period = 12))
model2##
## Call:
## arima(x = production, order = c(2, 0, 3), seasonal = list(order = c(1, 0, 1),
## period = 12))
##
## Coefficients:
## ar1 ar2 ma1 ma2 ma3 sar1 sma1 intercept
## 0.1675 0.7628 -0.2252 -0.8774 0.3321 0.9929 -0.7252 153.0579
## s.e. 0.0793 0.0729 0.1094 0.0422 0.0969 0.0091 0.1510 22.6195
##
## sigma^2 estimated as 108.3: log likelihood = -466.21, aic = 950.41
Uji signifikansi
H0 : SHI = 0
H1 : SHI ≠0
Tolak H0 jika p-value < alfa
coeftest(model2)##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.1675222 0.0792974 2.1126 0.0346366 *
## ar2 0.7628444 0.0728776 10.4675 < 2.2e-16 ***
## ma1 -0.2252256 0.1093791 -2.0591 0.0394819 *
## ma2 -0.8773555 0.0421612 -20.8095 < 2.2e-16 ***
## ma3 0.3320826 0.0969279 3.4261 0.0006124 ***
## sar1 0.9928576 0.0090741 109.4165 < 2.2e-16 ***
## sma1 -0.7251570 0.1509903 -4.8027 1.566e-06 ***
## intercept 153.0579340 22.6194538 6.7667 1.318e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Karena semua p-value < alfa yaitu < 0,05 maka tolak H0
Kesimpulan semua parameter signifikan
Uji Residual White Noise
H0 : Residual bersifat white noise
H1 : Residual tidak bersifat white noise
Alfa = 0,05
Tolak H0 jika p-value < alfa
Box.test(model2$residuals, type = "Ljung-Box")##
## Box-Ljung test
##
## data: model2$residuals
## X-squared = 0.089911, df = 1, p-value = 0.7643
Karena p-value > alfa yaitu 0,7643 > 0,05 maka gagal tolak H0
Kesimpulan Residual bersifat white noise
Uji Residual berdistribusi normal
H0 : error berdistirbusi normal
H1 : error tidak berdistribui normal
Alfa = 0,05
Tolak H0 jika p-value < alfa
lillie.test(model2$residuals)##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: model2$residuals
## D = 0.068295, p-value = 0.1848
Karena p-value < alfa yaitu 0,1848 > 0,05 maka gagal tolak H0
Kesimpulan error berdistribusi normal
Selanjutnya adalah menghitung nilai dari residual dan Mean Square Error (MSE) dari model 2
e2 <- resid(model2)
mse2 <- sum(e2^2)/length(e2)
mse2## [1] 108.2762
Jadi kesimpulan dari model 2 adalah data yang kita gunakan memiliki signifikansi yang baik, residual bersifat white noise dan residual berdistribusi normal, kemudan dengan metode ARIMA order (2,0,3) dan seasonal order (1,0,1) dengan periode 12 didapatkan MSE sebesar 108,2762
Pemilihan Model Terbaik
Cara untuk menentukan model terbaik antara model 1 dan model 2 untuk ARIMA adalah dengan membandingkan nilai MSE dari masing-masing model. Jika memiliki nilai MSE yang terkecil diantara kedua model, maka model tersebut merupakan model terbaik untuk ARIMA
| Metode | MSE |
|---|---|
| ARIMA order (1,0,2) dan seasonal order (1,0,1) | 121.7115 |
| ARIMA order (2,0,3) dan seasonal order (1,0,1) | 108.2762 |
Setelah melihat perbandingan diatas, maka dapat dikatakan bahwa model terbaik untuk ARIMA adalah dengan menggunakan model 2 yaitu dengan ARIMA order (2,0,3) dan seasonal order (1,0,1) yang memiliki MSE sebesar 108,2762
Kesimpulan
Hasil peramalan terbaik untuk jumlah produksi bir per bulan di Australia menggunakan metode ARIMA adalah dengan menggunakan order (2,0,3) dan seasonal order (1,0,1). Oleh karena itu, kita dapat menggunakan teknik peramalan ini untuk memprediksi jumlah produksi bir di Australia di masa mendatang.