Data pengunjung Perpustakaan Daerah Kab. Serang (Jan 2023 - Jun 2024)

pengunjung <- c(210,195,220,205,230,215,240,225,250,235,245,260,
                255,265,270,280,275,290)
pengunjung_ts <- ts(pengunjung, start = c(2023,1), frequency = 12)

library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric

1. Objek ts & plot data

label_bulan <- format(as.yearmon(time(pengunjung_ts)), "%b %Y")
plot(pengunjung_ts, xaxt = "n", col = "black", type = "o",
     main = "Pengunjung Perpustakaan", xlab = "Bulan", ylab = "Jumlah Pengunjung")
axis(1, at = time(pengunjung_ts), labels = label_bulan, cex.axis = 0.7)

2. Single Moving Average, orde 3

sma3 <- rollmean(pengunjung_ts, k = 3, align = "right", fill = NA)
 
plot(pengunjung_ts, xaxt = "n", col = "black", type = "o",
     main = "Aktual vs SMA(3)", xlab = "Bulan", ylab = "Jumlah Pengunjung")
lines(sma3, col = "steelblue", lwd = 2)
axis(1, at = time(pengunjung_ts), labels = label_bulan, cex.axis = 0.7)
legend("topleft", legend = c("Aktual","SMA(3)"), col = c("black","steelblue"), lty = 1)

data.frame(Bulan = tail(label_bulan, 6),
           Aktual = tail(pengunjung_ts, 6),
           SMA3 = round(tail(sma3, 6), 2))   # bandingkan 6 bulan terakhir
##      Bulan Aktual   SMA3
## 1 Jan 2024    255 253.33
## 2 Feb 2024    265 260.00
## 3 Mar 2024    270 263.33
## 4 Apr 2024    280 271.67
## 5 May 2024    275 275.00
## 6 Jun 2024    290 281.67

Pada 6 bulan terakhir (Jan sampai Jun 2024), nilai SMA(3) hampir selalu berada di bawah data aktual, kecuali Mei 2024 yang sama sama 275. Selisihnya terlihat jelas di Mar 2024 aktual 270 vs SMA 263,33, Apr 2024 aktual 280 vs SMA 271,67, dan Jun 2024 aktual 290 vs SMA 281,67. Jadi ya, SMA terlihat tertinggal. Ini terjadi karena SMA(3) menghitung rata-rata 3 bulan terakhir, sehingga nilainya selalu tertarik oleh bulan bulan sebelumnya yang lebih rendah. Pada data yang trennya naik, efek ini membuat SMA tidak mampu mengikuti kenaikan secepat data aslinya.

3. Double Moving Average, orde m = 3

m <- 3
Mp  <- rollmean(pengunjung_ts, k = m, align = "right", fill = NA)
Mpp <- rollmean(Mp, k = m, align = "right", fill = NA)
a_t <- 2*Mp - Mpp
b_t <- (2/(m-1)) * (Mp - Mpp)

cbind(Mp, Mpp, a_t, b_t)
##                Mp      Mpp      a_t      b_t
## Jan 2023       NA       NA       NA       NA
## Feb 2023       NA       NA       NA       NA
## Mar 2023 208.3333       NA       NA       NA
## Apr 2023 206.6667       NA       NA       NA
## May 2023 218.3333 211.1111 225.5556 7.222222
## Jun 2023 216.6667 213.8889 219.4444 2.777778
## Jul 2023 228.3333 221.1111 235.5556 7.222222
## Aug 2023 226.6667 223.8889 229.4444 2.777778
## Sep 2023 238.3333 231.1111 245.5556 7.222222
## Oct 2023 236.6667 233.8889 239.4444 2.777778
## Nov 2023 243.3333 239.4444 247.2222 3.888889
## Dec 2023 246.6667 242.2222 251.1111 4.444444
## Jan 2024 253.3333 247.7778 258.8889 5.555556
## Feb 2024 260.0000 253.3333 266.6667 6.666667
## Mar 2024 263.3333 258.8889 267.7778 4.444444
## Apr 2024 271.6667 265.0000 278.3333 6.666667
## May 2024 275.0000 270.0000 280.0000 5.000000
## Jun 2024 281.6667 276.1111 287.2222 5.555556

M’t adalah rata rata bergerak pertama (SMA(3)) dan M’‘t adalah rata rata bergerak dari M’t. Nilai M’‘t baru bisa dihitung mulai Mei 2023 karena butuh 3 nilai M’t. Pada data terakhir (Jun 2024), M’t = 281,67 dan M’‘t = 276,11. Dari situ didapat komponen level aₜ = 287,22 dan komponen tren bₜ = 5,56. Karena M’t selalu lebih besar dari M’’t sepanjang data, bₜ selalu positif, artinya data punya tren naik yang konsisten. Nilai aₜ (287,22) juga jauh lebih dekat ke data aktual Jun 2024 (290) dibanding SMA (281,67), karena aₜ sudah mengoreksi ketertinggalan SMA. Nilai bₜ = 5,56 bisa dibaca sebagai kenaikan rata-rata sekitar 5 sampai 6 pengunjung per bulan.

4. Peramalan 1 & 2 bulan ke depan (DMA)

a_last <- tail(na.omit(a_t), 1); b_last <- tail(na.omit(b_t), 1)
forecast_1 <- a_last + b_last * 1
forecast_2 <- a_last + b_last * 2

sma_last   <- tail(na.omit(sma3), 1)   # ramalan SMA (flat, konstan)

data.frame(Bulan_ke_depan = 1:2,
           Forecast_DMA = c(forecast_1, forecast_2),
           Forecast_SMA = rep(sma_last, 2))
##   Bulan_ke_depan Forecast_DMA Forecast_SMA
## 1              1     292.7778     281.6667
## 2              2     298.3333     281.6667

Ramalan DMA untuk Jul 2024 sebesar 292,78 (sekitar 293 orang) dan untuk Agu 2024 sebesar 298,33 (sekitar 298 orang). Ramalan SMA biasa adalah 281,67 untuk kedua bulan tersebut. Hasilnya berbeda karena SMA hanya memakai rata-rata 3 bulan terakhir sebagai ramalan, sehingga nilainya datar (konstan) dan mengasumsikan tidak ada tren. DMA memakai rumus \(\hat{z}_{t+p} = a_t + b_t \cdot p\), jadi ramalannya ikut naik sebesar bₜ setiap bulan ke depan. Karena data pengunjung memang bertren naik, ramalan SMA cenderung terlalu rendah (underestimate), sedangkan DMA lebih masuk akal.