Project ini merupakan Project Kelompok Mata Kuliah Analisis Runtun Waktu
Peramalan pada dasarnya merupakan suatu dugaan atau perkiraan atas kejadian di waktu mendatang. Peramalan merupakan alat bantu yang penting dalam perencanaan yang efektif dan efisien (Makridakis, dkk., 1999: 3). Peramalan sering digunakan pada bidang ekonomi, perencanaan produksi, peramalan penjualan, dan kontrol stok. Meramal juga dapat didasarkan pada keahlian penilaian, yang ada pada gilirannya didasarkan pada data historis dan pengalaman (Makridakis, dkk., 1999: 519). Keakuratan dari hasil peramalan dalam pemilihan metode peramalan harus dilakukan dengan teliti agar bisa dipertanggungjawabkan. Salah satu metode peramalan yang sering digunakan adalah runtun waktu ( time series).
Runtun waktu ( time series ) adalah analisis yang mempertimbangkan pengaruh waktu secara beruntun. Data-data yang dikumpulkan berdasarkan urutan waktu seperti, jam, hari, minggu, bulan, kuartal, semester, dan tahun dapat dianalisis menggunakan metode runtun waktu. Data runtun waktu dapat dijadikan dasar dalam pengambilan ketentuan untuk meramalkan kejadian yang terjadi di era yang akan datang.
Model Autoregresif Integrated Moving Average (ARIMA) adalah model yang secara penuh mengabaikan independen variabel dalam membuat peramalan. ARIMA menggunakan nilai masa lalu dan sekarang dari variabel dependen untuk menghasilkan peramalan jangka pendek yang akurat.Model ARIMA merupakan model .Metode ARIMA sering digunakan untuk peramalan di berbagai bidang, salah satunya bidang komunikasi.
Komunikasi adalah salah satu bidang yang perkembangannya sudah pesat. Saat ini sudah ada internet yang akan memudahan kita untuk berkomunikasi secara mudah. Email atau surat elektronik merupakan salah satu penerapan internet dalam bidang komunikasi yang paling digemari karena mudah digunakan, cepat dan berbiaya murah. Penggunaan email yang terbilang intens ini dapat membawa dampak positif dan negatif karena pada kenyataannya tidak semua orang menggunakan email dengan baik dan bahkan ada banyak sekali penyalahgunaan email sehingga berpotensi untuk merugikan orang lain. Email yang disalah gunakan ini biasa kita kenal sebagai spam atau junkmail (email sampah) yang mana email tersebut berisikan iklan, penipuan dan bahkan virus. Selain email spam ada juga email ham yang merupakan lawan dari email spam atau email yang diharapkan datang.
Email ini jumlahnya beragam perharinya. Dikarenakan jumlahnya yang memungkinkan akan meningkat setiap harinya. Maka perlu dilakuan pengendalian terhadap jumlah email ham yang masuk agar email ham tidak menumpuk. Untuk melakukan pengendalian, bisa direncanakan dengan meramalkan migrasi di waktu yang akan dating. Maka akan dilakukan permalan mengenai data runtun waktu banyaknya jumlah email ham yang masuk ke suatu akun dalam periode harian dimulai dari Januari 2017 sampai dengan Juni 2018, dilakukan peramalan ini memiliki tujuan yaitu menentukan model ARIMA terbaik yang mampu menirukan dan meramalkan perilaku data historis, meramalkan jumlah email ham menggunakan model ARIMA terbaik dan mengetahui tingkat kebaikan model ARIMA terbaik yang diperoleh.
Data yang akan diteliti adalah data runtun waktu mengenai jumlah email Ham yang masuk secara harian sebanyak 506 hari mulai dari 13 Januari 2000 sampai dengan 1 Juni 2001. Data akan diteliti untuk dilakukan peramalan jumlah email ham yang masuk menggunakan model ARIMA.
library(TSA)
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(forecast)
## Registered S3 methods overwritten by 'forecast':
## method from
## fitted.Arima TSA
## plot.Arima TSA
library(EnvStats)
##
## Attaching package: 'EnvStats'
## The following objects are masked from 'package:TSA':
##
## kurtosis, skewness
## The following objects are masked from 'package:stats':
##
## predict, predict.lm
## The following object is masked from 'package:base':
##
## print.default
Data Email Ham memiliki plot time series sebagai berikut:
plot.ts(data, ylab='Count',main='Plot Email Ham')
Selanjutnya, data akan di uji apakah memenuhi data stasioner atau tidak. Untuk mengecek apakah variansi sudah stasioner, dilakukan uji BoxCox. Untuk pengujian BoxCox dalam software R, data yang di inputkan harus bernilai positif dan bukan nol. Karna data yang dimiliki terdapat nilai nol. Maka perlu di tambah konstanta c agar nilai tidak terdapat nol. Dan nilai c yang digunakan adalah satu.
Selanjutnya dilakukan uji stasioner terhadap variansinya.
boxcox<-boxcox(Dataku, optimize = TRUE)
boxcox$lambda
## [1] 0.308434
Setelah diuji, didapat data tidak stasioner karna memiliki lambda mendekati nol atau tidak sama dengan satu (𝜆 ≠ 1) . Maka dilakukan transformasi untuk membuat data menjadi stasioner.
data1.trans <- BoxCox(data, 0.308434)
Setelah data stasioner terhadap varian, data akan diuji apakah data stasioner terhadap mean menggunakan uji KPSS dan dilihat secara visual dengan Plot ACF dan PACF. Hasil Uji KPSS sebagai berikut:
kpss.test(data1.trans)
## Warning in kpss.test(data1.trans): p-value smaller than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: data1.trans
## KPSS Level = 1.3685, Truncation lag parameter = 5, p-value = 0.01
Berdasarkan hasil yang diperoleh, P-Value < 𝛼 = 0,05 menunjukan data tidak stasioner. Dan juga berdasarkan plot ACF dan PACF di bawah,
par(mfrow=c(1,2))
acf(data1.trans)
pacf(data1.trans)
dapat dilihat, masih terdapat seasonal dalam data. Maka perlu dilakukannya differencing agar data stasioner terhadap mean.
Data.diff=diff(data1.trans, d=1)
Setelah di differencing, didapatkan hasil Uji KPSS sebagai berikut.
kpss.test(Data.diff)
## Warning in kpss.test(Data.diff): p-value greater than printed p-value
##
## KPSS Test for Level Stationarity
##
## data: Data.diff
## KPSS Level = 0.0089994, Truncation lag parameter = 5, p-value = 0.1
Karna P-Value > 𝛼 = 0.05 maka didapat data sudah stasioner terhadap mean.
Ketika data dikatakan telah stasioner, maka langkah yang dilakukan untuk membentuk model ARIMA adalah dengan identifikasi model. Untuk mengidentifikasi model ARIMA dapat dilihat dari Plot ACF, PACF, EACF, dan Grafik BIC dari data “Data.diff” .
par(mfrow=c(1,2))
acf(Data.diff)
pacf(Data.diff)
Berdasarkan Plot ACF dan PACF diatas didapat model ARIMA (6,1,2) yang merupakan kandidat model pertama.
Selanjutnya untuk mengidentifikasi model dapat juga dilihat dari plot EACF berikut
eacf(Data.diff, ar.max = 10, ma.max = 10)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10
## 0 x x o o x o x o x o o
## 1 x x o o x o x o x o o
## 2 x x o o x o x o x o o
## 3 x o x o x o x o x x x
## 4 x x x x o x x x o o o
## 5 x x x x o x x x o o o
## 6 o x x x o x x o o o o
## 7 x x o x o o x x o o o
## 8 x o o o o o x o o o o
## 9 x o x o o o x x x x o
## 10 x x o o o o x x o x o
Dari plot EACF didapatkan tiga kandidat model ARIMA lainnya yaitu ARIMA(5,1,8), ARIMA(4,1,8) dan ARIMA(6,1,7).
x <- armasubsets(Data.diff, nar = 10, nma = 10)
plot(x)
Berdasarkan grafik BIC diatas, didapatkan kandidat model yaitu model ARIMA (7,1,8).
Dari ketiga proses identifikasi model ARIMA didapat lima kandidat model ARIMA(6,1,2), ARIMA(5,1,8), ARIMA(4,1,8), ARIMA(6,1,7), dan ARIMA(7,1,8)
Setelah identifikasi model, langkah selanjutnya yaitu akan dilakukan estimasi pada kandidat model ARIMA terpilih.
Berikut adalah estimasi parameter model ARIMA yang terpilih sebagai kandidat.
model.arima1 <- arima(Data.diff, order = c(6,1,2))
model.arima2 <- arima(Data.diff, order = c(5,1,8))
## Warning in log(s2): NaNs produced
## Warning in stats::arima(x = x, order = order, seasonal = seasonal, xreg =
## xreg, : possible convergence problem: optim gave code = 1
model.arima3 <- arima(Data.diff, order = c(4,1,8))
## Warning in stats::arima(x = x, order = order, seasonal = seasonal, xreg =
## xreg, : possible convergence problem: optim gave code = 1
model.arima4 <- arima(Data.diff, order = c(6,1,7))
## Warning in stats::arima(x = x, order = order, seasonal = seasonal, xreg =
## xreg, : possible convergence problem: optim gave code = 1
model.arima5 <- arima(Data.diff, order = c(7,1,8))
model.arima1
##
## Call:
## arima(x = Data.diff, order = c(6, 1, 2))
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ar6 ma1 ma2
## -0.7375 -0.7782 -0.7666 -0.6934 -0.7614 -0.5732 -0.9612 -0.0388
## s.e. 0.0605 0.0407 0.0474 0.0451 0.0394 0.0439 0.0710 0.0707
##
## sigma^2 estimated as 3.183: log likelihood = -1013.84, aic = 2043.67
model.arima2
##
## Call:
## arima(x = Data.diff, order = c(5, 1, 8))
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ma1 ma2 ma3
## -0.1962 -0.6408 -0.6359 -0.1951 -0.9955 -1.5442 0.9280 -0.2836
## s.e. 0.0022 0.0035 0.0053 0.0027 0.0046 0.0453 0.0747 0.0644
## ma4 ma5 ma6 ma7 ma8
## -0.4755 1.1636 -1.5201 0.6641 0.0677
## s.e. 0.0340 0.0332 0.0613 0.0740 0.0472
##
## sigma^2 estimated as 2.669: log likelihood = -974.63, aic = 1975.27
model.arima3
##
## Call:
## arima(x = Data.diff, order = c(4, 1, 8))
##
## Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2 ma3 ma4
## -0.2303 -0.0761 -0.3260 -0.9187 -1.5221 0.1267 0.7078 0.4968
## s.e. 0.0218 0.0185 0.0169 0.0195 0.0491 0.0932 0.0841 0.0434
## ma5 ma6 ma7 ma8
## -1.6292 0.6268 0.4319 -0.2387
## s.e. 0.0455 0.0837 0.0880 0.0484
##
## sigma^2 estimated as 3.388: log likelihood = -1032.55, aic = 2089.1
model.arima4
##
## Call:
## arima(x = Data.diff, order = c(6, 1, 7))
##
## Coefficients:
## Warning in sqrt(diag(x$var.coef)): NaNs produced
## ar1 ar2 ar3 ar4 ar5 ar6 ma1 ma2
## -0.0841 -0.6230 -0.5616 -0.1302 -0.9711 0.1074 -1.6491 1.0937
## s.e. 0.0602 0.0071 0.0313 0.0403 NaN 0.0643 0.0419 0.0245
## ma3 ma4 ma5 ma6 ma7
## -0.3901 -0.4322 1.1956 -1.6318 0.814
## s.e. NaN NaN NaN 0.0689 0.055
##
## sigma^2 estimated as 2.67: log likelihood = -974.57, aic = 1975.14
model.arima5
##
## Call:
## arima(x = Data.diff, order = c(7, 1, 8))
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ar6 ar7 ma1
## -0.7570 -0.7709 -0.7603 -0.7637 -0.7725 -0.7596 0.2225 -0.9450
## s.e. 0.0806 0.0652 0.0708 0.0752 0.0620 0.0824 0.0601 0.0747
## ma2 ma3 ma4 ma5 ma6 ma7 ma8
## 0.0737 -0.0407 0.0132 0.0322 -0.0573 -0.9236 0.8496
## s.e. 0.0961 0.0566 0.0373 0.0735 0.1008 0.1169 0.0635
##
## sigma^2 estimated as 2.54: log likelihood = -965.73, aic = 1961.47
Untuk mengetahui parameter signifikan atau tidak, nilai dari koefisien parameter dibagi dengan nilai standar error nya. Jika hasilnya kurang dari -1.96 atau lebih besar dari 1.96 maka parameter dapat dikatakan signifikan.
Berdasarkan output diatas, tidak di dapatkan model yang seluruh parameternya signifikan. Maka untuk mencari model terbaiknya, dapat dilihat dari nilai AIC terendah. Di dapat nilai AIC terendah terdapat pada Model ARIMA (7,1,8). Sehingga model ARIMA (7,1,8) lah yang akan dilanjutkan ke tahap diagnosis model.
fitARIMA <- stats::arima(Data.diff, order=c(7,1,8))
Pada tahap ini model terpilih yaitu ARIMA (7,1,8) akan diuji kenormalan, autokorelasi, dan heteroskedastisitas dari residualnya. Uji ini bertujuan untuk melihat apakah data “fitARIMA” banyak email ham yang masuk telah memenuhi asumsi tersebut sebelum diprediksi.
Berikut adalah plot dari residual model ARIMA (7,1,8).
plot(rstandard(fitARIMA))
Berdasarkan residual plot residual diatas didapat residual cenderung stabil maka dikatakan terdapat homokedastisitas.
Untuk menguji kenormalan dapat menggunakan uji Jarque Bera
jarque.bera.test(rstandard(fitARIMA))
##
## Jarque Bera Test
##
## data: rstandard(fitARIMA)
## X-squared = 5.3288, df = 2, p-value = 0.06964
Karena P-value > 0.05, maka residual berdistribusi normal.
Uji autokorelasi dapat dilakukan dengan Ljung-Box
Box.test(rstandard(fitARIMA), type=c("Ljung-Box"))
##
## Box-Ljung test
##
## data: rstandard(fitARIMA)
## X-squared = 0.0010326, df = 1, p-value = 0.9744
Karena P-value > 0.05, maka data residual tidak terdapat autokorelasi.
Pada langkah forecasting, karna data yang dipakai merupakan data hasil transformasi, maka data hasil forecasting harus dikembalikan ke data awal atau di transformasi balik ke data awal dan juga dikurangkan dengan konstanta c=1. Karna akan mencari forcasting untuk data awal email ham count yang di berikan, bukan data hasil transformasi.
forecasting <- forecast(fitARIMA , h = 20)
plot(forecast(fitARIMA , h = 20))
forecasting=data.frame(forecasting)
forecasting
## Point.Forecast Lo.80 Hi.80 Lo.95 Hi.95
## 506 -4.9131524937 -6.9621681 -2.864137 -8.0468514 -1.7794536
## 507 -0.4691793047 -2.9704389 2.032080 -4.2945257 3.3561671
## 508 2.8209012577 0.3085731 5.333229 -1.0213732 6.6631757
## 509 0.5655325051 -1.9485415 3.079606 -3.2794118 4.4104769
## 510 0.0005427919 -2.5135798 2.514665 -3.8444760 3.8455616
## 511 1.0721176307 -1.4423309 3.586566 -2.7733996 4.9176348
## 512 -0.3244549082 -2.8395816 2.190672 -4.1710092 3.5220994
## 513 -3.9771100098 -6.4941416 -1.460078 -7.8265777 -0.1276423
## 514 -0.2868924149 -2.8064216 2.232637 -4.1401797 3.5663949
## 515 2.8604838623 0.3403078 5.380660 -0.9937928 6.7147605
## 516 0.5761976632 -1.9440492 3.096445 -3.2781873 4.4305826
## 517 0.0021931467 -2.5180534 2.522440 -3.8521913 3.8565776
## 518 1.1077778518 -1.4128302 3.628386 -2.7471595 4.9627152
## 519 -0.3403357510 -2.8615252 2.180854 -4.1961623 3.5154908
## 520 -3.9627833984 -6.4857048 -1.439862 -7.8212587 -0.1043081
## 521 -0.3116199444 -2.8368096 2.213570 -4.1735642 3.5503243
## 522 2.8524291124 0.3266903 5.378168 -1.0103551 6.7152133
## 523 0.5761642659 -1.9496191 3.101948 -3.2866880 4.4390165
## 524 0.0018330922 -2.5239507 2.527617 -3.8610199 3.8646861
## 525 1.1420127756 -1.3841077 3.668133 -2.7213550 5.0053806
forecast.asli=(exp(forecasting$Point.Forecast))-1
forecast.asli
## [1] -0.9926507168 -0.3744845848 15.7919777545 0.7603849471 0.0005429392
## [6] 1.9215597386 -0.2770786953 -0.9812602812 -0.2494075230 16.4699779555
## [11] 0.7792602059 0.0021955534 2.0276230866 -0.2884686147 -0.9809898722
## [16] -0.2677402252 16.3298268506 0.7792007843 0.0018347733 2.1330681862
Setelah hasil forecastingnya di transformasi, didapat hasil forecasting sudah cukup baik untuk meramalkan data Ham yang masuk dalam 20 langkah kedepan atau 20 hari kedepan.
Berdasarkan hasil penelitian dan pembahasan, diperoleh kesimpulan bahwa model terbaik dari metode ARIMA ( Autoregressive Integrated Moving Average ) yang digunakan untuk melakukan peramalan/prediksi jumlah email Ham yang masuk secara harian sebanyak 506 hari mulai dari 13 Januari 2000 sampai dengan 1 Juni 2001 yaitu ARIMA (7,1,8).
Perlu dilakukan persiapan yang cermat terhadap data pengamatan yang akan digunakan dalam peramalan karena kesalahan dalam mengidentifikasi karakteristik/ pola data yang diinput akan menyebabkan kekeliruan saat menentukan model peramalan. Data historis yang digunakan harus bersifat representatif dan dalam jumlah yang cukup agar diperoleh model yang layak untuk peramalan.
Model peramalan ini hanya efektif digunakan untuk peramalan jangka pendek dan kurang efektif untuk peramalan jangka panjang. Jika ingin meramalkan untuk waktu yang berbeda, sebaiknya model yang telah ada (ARIMA (7,1,8)) diperbaharui sesuai dengan data baru yang diperoleh.