Latihan Pendalaman Materi — Single dan Double Moving Average

1 Pendahuluan

Latihan ini membahas penerapan Single Moving Average (SMA) dan Double Moving Average (DMA) pada data jumlah pengunjung Perpustakaan Daerah Kabupaten Serang periode Januari 2023 sampai Juni 2024. Berdasarkan materi, SMA digunakan untuk pemulusan data yang relatif stabil, sedangkan DMA digunakan ketika data menunjukkan tren linear yang cukup konsisten. Metode Peramalan Rata-Rata Bergerak Single & Double Moving Average

Data latihan terdiri atas 18 observasi bulanan. Tujuan analisis adalah:

  1. membentuk objek deret waktu dan mengidentifikasi tren;
  2. menghitung dan memplot SMA(3);
  3. menghitung DMA dengan orde \(m=3\), meliputi \(M'_t\), \(M''_t\), \(a_t\), dan \(b_t\);
  4. meramalkan jumlah pengunjung satu dan dua bulan setelah observasi terakhir; dan
  5. membandingkan hasil DMA dengan ramalan SMA biasa serta menjelaskan perbedaannya.

Data dan pertanyaan latihan mengikuti bagian Latihan Pendalaman Materi pada modul Metode Peramalan Rata-Rata Bergerak Single & Double Moving Average

2 Data dan Pembentukan Deret Waktu

2.1 Input Data

Data jumlah pengunjung perpustakaan adalah sebagai berikut:

  • 2023: 210, 195, 220, 205, 230, 215, 240, 225, 250, 235, 245, 260
  • 2024: 255, 265, 270, 280, 275, 290
# Data jumlah pengunjung perpustakaan (orang/bulan)
pengunjung <- c(
  210, 195, 220, 205, 230, 215,
  240, 225, 250, 235, 245, 260,
  255, 265, 270, 280, 275, 290
)

# Objek deret waktu bulanan
pengunjung_ts <- ts(
  pengunjung,
  start = c(2023, 1),
  frequency = 12
)

# Data frame untuk visualisasi dan tabel
tanggal <- seq.Date(
  from = as.Date("2023-01-01"),
  by = "month",
  length.out = length(pengunjung)
)

data_pengunjung <- data.frame(
  tanggal = tanggal,
  periode = format(tanggal, "%b %Y"),
  tahun = format(tanggal, "%Y"),
  bulan = format(tanggal, "%b"),
  pengunjung = as.numeric(pengunjung_ts)
)

kable(
  data_pengunjung,
  col.names = c("Tanggal", "Periode", "Tahun", "Bulan", "Pengunjung"),
  caption = "Data jumlah pengunjung Perpustakaan Daerah Kabupaten Serang"
)
Data jumlah pengunjung Perpustakaan Daerah Kabupaten Serang
Tanggal Periode Tahun Bulan Pengunjung
2023-01-01 Jan 2023 2023 Jan 210
2023-02-01 Feb 2023 2023 Feb 195
2023-03-01 Mar 2023 2023 Mar 220
2023-04-01 Apr 2023 2023 Apr 205
2023-05-01 May 2023 2023 May 230
2023-06-01 Jun 2023 2023 Jun 215
2023-07-01 Jul 2023 2023 Jul 240
2023-08-01 Aug 2023 2023 Aug 225
2023-09-01 Sep 2023 2023 Sep 250
2023-10-01 Oct 2023 2023 Oct 235
2023-11-01 Nov 2023 2023 Nov 245
2023-12-01 Dec 2023 2023 Dec 260
2024-01-01 Jan 2024 2024 Jan 255
2024-02-01 Feb 2024 2024 Feb 265
2024-03-01 Mar 2024 2024 Mar 270
2024-04-01 Apr 2024 2024 Apr 280
2024-05-01 May 2024 2024 May 275
2024-06-01 Jun 2024 2024 Jun 290

2.2 Plot Deret Waktu

ggplot(data_pengunjung, aes(x = tanggal, y = pengunjung)) +
  geom_line(linewidth = 0.9) +
  geom_point(size = 2.2) +
  geom_smooth(
    method = "lm",
    formula = y ~ x,
    se = FALSE,
    linetype = "dashed",
    linewidth = 0.8
  ) +
  scale_x_date(date_breaks = "3 months", date_labels = "%b\n%Y") +
  labs(
    title = "Jumlah Pengunjung Perpustakaan Daerah Kabupaten Serang",
    subtitle = "Januari 2023 – Juni 2024",
    x = "Periode",
    y = "Jumlah pengunjung (orang)"
  ) +
  theme_minimal(base_size = 12)

2.2.1 Interpretasi

Secara visual, jumlah pengunjung menunjukkan kecenderungan meningkat dari waktu ke waktu. Nilai awal pada Januari 2023 adalah 210 orang, sedangkan pada Juni 2024 telah mencapai 290 orang. Walaupun terdapat fluktuasi antarbulan, arah umum data bergerak naik.

Sebagai konfirmasi kuantitatif tambahan, kemiringan (slope) tren linear dapat dihitung sebagai berikut.

model_tren <- lm(pengunjung ~ seq_along(pengunjung))
coef_tren <- coef(model_tren)[2]
r2_tren <- summary(model_tren)$r.squared

trend_summary <- data.frame(
  Ukuran = c("Kemiringan tren per bulan", "R-squared"),
  Nilai = c(coef_tren, r2_tren)
)

kable(
  trend_summary,
  digits = 4,
  col.names = c("Ukuran", "Nilai"),
  caption = "Indikator tambahan kecenderungan tren"
)
Indikator tambahan kecenderungan tren
Ukuran Nilai
seq_along(pengunjung) Kemiringan tren per bulan 4.9484
R-squared 0.9117

Hasil menunjukkan kemiringan tren sekitar 4,95 orang per bulan, dengan \(R^2\) sekitar 0,912. Artinya, terdapat kecenderungan peningkatan yang cukup kuat selama periode pengamatan. Nilai \(R^2\) tersebut bukan bagian wajib dari metode moving average, tetapi digunakan sebagai informasi tambahan untuk mendukung pengamatan visual bahwa data memiliki tren naik.

Karena data memperlihatkan tren naik yang cukup konsisten, penggunaan DMA menjadi relevan. Materi menjelaskan bahwa DMA lebih sesuai ketika data mengandung tren linear karena komponen tren dimodelkan secara eksplisit.

3 Single Moving Average (SMA)

3.1 Perhitungan SMA(3)

SMA orde 3 menggunakan tiga observasi terakhir:

\[ M'_t = \frac{Z_t + Z_{t-1} + Z_{t-2}}{3} \]

Ramalan satu periode ke depan dari SMA menggunakan nilai moving average terakhir:

\[ \hat{Z}_{t+1} = M'_t \]

Konsep tersebut sesuai dengan materi, yang menjelaskan bahwa semakin besar ukuran jendela, hasil pemulusan semakin halus tetapi respons terhadap perubahan pola menjadi semakin lambat.

# SMA orde 3
m <- 3

sma3 <- zoo::rollmean(
  pengunjung_ts,
  k = m,
  align = "right",
  fill = NA
)

data_pengunjung$sma3 <- as.numeric(sma3)

kable(
  data_pengunjung,
  col.names = c("Tanggal", "Periode", "Tahun", "Bulan", "Aktual", "SMA(3)"),
  digits = 2,
  caption = "Hasil Single Moving Average orde 3"
)
Hasil Single Moving Average orde 3
Tanggal Periode Tahun Bulan Aktual SMA(3)
2023-01-01 Jan 2023 2023 Jan 210 NA
2023-02-01 Feb 2023 2023 Feb 195 NA
2023-03-01 Mar 2023 2023 Mar 220 208.3
2023-04-01 Apr 2023 2023 Apr 205 206.7
2023-05-01 May 2023 2023 May 230 218.3
2023-06-01 Jun 2023 2023 Jun 215 216.7
2023-07-01 Jul 2023 2023 Jul 240 228.3
2023-08-01 Aug 2023 2023 Aug 225 226.7
2023-09-01 Sep 2023 2023 Sep 250 238.3
2023-10-01 Oct 2023 2023 Oct 235 236.7
2023-11-01 Nov 2023 2023 Nov 245 243.3
2023-12-01 Dec 2023 2023 Dec 260 246.7
2024-01-01 Jan 2024 2024 Jan 255 253.3
2024-02-01 Feb 2024 2024 Feb 265 260.0
2024-03-01 Mar 2024 2024 Mar 270 263.3
2024-04-01 Apr 2024 2024 Apr 280 271.7
2024-05-01 May 2024 2024 May 275 275.0
2024-06-01 Jun 2024 2024 Jun 290 281.7

3.2 Plot SMA(3)

plot_sma <- ggplot(data_pengunjung, aes(x = tanggal)) +
  geom_line(aes(y = pengunjung), linewidth = 0.9) +
  geom_point(aes(y = pengunjung), size = 1.8) +
  geom_line(
    aes(y = sma3),
    linewidth = 1,
    na.rm = TRUE,
    linetype = "solid"
  ) +
  geom_point(
    aes(y = sma3),
    size = 1.8,
    na.rm = TRUE
  ) +
  scale_x_date(date_breaks = "3 months", date_labels = "%b\n%Y") +
  labs(
    title = "Perbandingan Data Aktual dan SMA(3)",
    subtitle = "SMA(3) digunakan untuk meredam fluktuasi jangka pendek",
    x = "Periode",
    y = "Jumlah pengunjung (orang)"
  ) +
  theme_minimal(base_size = 12)

plot_sma

3.3 Perbandingan Enam Bulan Terakhir

enam_bulan <- tail(data_pengunjung, 6)

enam_bulan$sisih <- enam_bulan$pengunjung - enam_bulan$sma3
enam_bulan$abs_sisih <- abs(enam_bulan$sisih)

kable(
  enam_bulan[, c("periode", "pengunjung", "sma3", "sisih")],
  digits = 2,
  col.names = c("Periode", "Aktual", "SMA(3)", "Aktual - SMA(3)"),
  caption = "Data aktual dan SMA(3) pada enam bulan terakhir"
)
Data aktual dan SMA(3) pada enam bulan terakhir
Periode Aktual SMA(3) Aktual - SMA(3)
13 Jan 2024 255 253.3 1.67
14 Feb 2024 265 260.0 5.00
15 Mar 2024 270 263.3 6.67
16 Apr 2024 280 271.7 8.33
17 May 2024 275 275.0 0.00
18 Jun 2024 290 281.7 8.33

Rata-rata selisih absolut enam bulan terakhir dapat digunakan untuk menggambarkan besarnya keterlambatan SMA terhadap data aktual pada periode tersebut.

mae_sma6 <- mean(enam_bulan$abs_sisih, na.rm = TRUE)
bias_sma6 <- mean(enam_bulan$sisih, na.rm = TRUE)

sma_summary <- data.frame(
  Ukuran = c(
    "Rata-rata selisih absolut",
    "Rata-rata aktual - SMA(3)"
  ),
  Nilai = c(mae_sma6, bias_sma6)
)

kable(
  sma_summary,
  digits = 2,
  col.names = c("Ukuran", "Nilai"),
  caption = "Ringkasan selisih SMA(3) pada enam bulan terakhir"
)
Ringkasan selisih SMA(3) pada enam bulan terakhir
Ukuran Nilai
Rata-rata selisih absolut 5
Rata-rata aktual - SMA(3) 5

3.3.1 Interpretasi SMA(3)

Pada enam bulan terakhir, SMA(3) umumnya berada di bawah nilai aktual, terutama ketika jumlah pengunjung mengalami kenaikan. Pada Juni 2024, jumlah aktual mencapai 290 orang, sedangkan SMA(3) hanya 281,67 orang, sehingga terdapat selisih sekitar 8,33 orang.

Pola tersebut merupakan karakteristik lag pada SMA ketika diterapkan pada data yang memiliki tren naik. Materi menjelaskan bahwa pada tren naik, SMA cenderung lebih rendah daripada data aktual karena rata-rata masih membawa informasi dari periode sebelumnya. Semakin lebar jendela, keterlambatan tersebut dapat semakin besar.

Dengan demikian, SMA(3) berhasil melakukan pemulusan, tetapi kurang mampu mengikuti kenaikan level data secara cepat. Jika SMA(3) digunakan langsung sebagai ramalan setelah Juni 2024, ramalannya akan sebesar:

sma_forecast <- tail(na.omit(sma3), 1)

sma_forecast
##        Jun
## 2024 281.7

Ramalan SMA(3) untuk Juli 2024 = 281.67 orang.

4 Double Moving Average (DMA)

4.1 Konsep DMA

DMA melakukan dua tahap pemulusan:

  1. menghitung moving average pertama \(M'_t\);
  2. menghitung moving average kedua dari \(M'_t\), yaitu \(M''_t\).

Rumus level dan tren DMA adalah:

\[ a_t = 2M'_t - M''_t \]

\[ b_t = \frac{2}{m-1}(M'_t-M''_t) \]

Untuk ramalan \(p\) periode ke depan:

\[ \hat{Z}_{t+p}=a_t+b_t p \]

Rumus tersebut mengikuti formulasi DMA pada materi perkuliahan.

4.2 Perhitungan DMA(3)

# Orde DMA
m <- 3

# Moving average tahap pertama
Mp <- zoo::rollmean(
  pengunjung_ts,
  k = m,
  align = "right",
  fill = NA
)

# Moving average tahap kedua
Mpp <- zoo::rollmean(
  Mp,
  k = m,
  align = "right",
  fill = NA
)

# Komponen level dan tren
a_t <- 2 * Mp - Mpp
b_t <- (2 / (m - 1)) * (Mp - Mpp)

data_dma <- data.frame(
  tanggal = tanggal,
  periode = format(tanggal, "%b %Y"),
  aktual = as.numeric(pengunjung_ts),
  M_prime = as.numeric(Mp),
  M_double_prime = as.numeric(Mpp),
  a_t = as.numeric(a_t),
  b_t = as.numeric(b_t)
)

kable(
  data_dma,
  digits = 2,
  col.names = c(
    "Tanggal", "Periode", "Aktual",
    "M't", "M''t", "a_t", "b_t"
  ),
  caption = "Perhitungan lengkap Double Moving Average orde 3"
)
Perhitungan lengkap Double Moving Average orde 3
Tanggal Periode Aktual M’t M’’t a_t b_t
2023-01-01 Jan 2023 210 NA NA NA NA
2023-02-01 Feb 2023 195 NA NA NA NA
2023-03-01 Mar 2023 220 208.3 NA NA NA
2023-04-01 Apr 2023 205 206.7 NA NA NA
2023-05-01 May 2023 230 218.3 211.1 225.6 7.22
2023-06-01 Jun 2023 215 216.7 213.9 219.4 2.78
2023-07-01 Jul 2023 240 228.3 221.1 235.6 7.22
2023-08-01 Aug 2023 225 226.7 223.9 229.4 2.78
2023-09-01 Sep 2023 250 238.3 231.1 245.6 7.22
2023-10-01 Oct 2023 235 236.7 233.9 239.4 2.78
2023-11-01 Nov 2023 245 243.3 239.4 247.2 3.89
2023-12-01 Dec 2023 260 246.7 242.2 251.1 4.44
2024-01-01 Jan 2024 255 253.3 247.8 258.9 5.56
2024-02-01 Feb 2024 265 260.0 253.3 266.7 6.67
2024-03-01 Mar 2024 270 263.3 258.9 267.8 4.44
2024-04-01 Apr 2024 280 271.7 265.0 278.3 6.67
2024-05-01 May 2024 275 275.0 270.0 280.0 5.00
2024-06-01 Jun 2024 290 281.7 276.1 287.2 5.56

4.3 Hasil DMA pada Periode Terakhir

dma_last <- tail(na.omit(data_dma), 1)

kable(
  dma_last[, c("periode", "aktual", "M_prime", "M_double_prime", "a_t", "b_t")],
  digits = 2,
  col.names = c(
    "Periode", "Aktual", "M't", "M''t", "a_t", "b_t"
  ),
  caption = "Komponen DMA pada observasi terakhir"
)
Komponen DMA pada observasi terakhir
Periode Aktual M’t M’’t a_t b_t
18 Jun 2024 290 281.7 276.1 287.2 5.56

Pada Juni 2024 diperoleh:

  • \(M'_t =\) 281.67
  • \(M''_t =\) 276.11
  • \(a_t =\) 287.22
  • \(b_t =\) 5.56

Interpretasinya, nilai \(a_t\) merepresentasikan estimasi level data pada waktu terakhir setelah koreksi terhadap efek keterlambatan, sedangkan \(b_t\) merepresentasikan estimasi kenaikan jumlah pengunjung per bulan. Nilai \(b_t\) yang positif menunjukkan bahwa arah tren masih meningkat.

5 Peramalan DMA

5.1 Ramalan 1 dan 2 Bulan ke Depan

Observasi terakhir adalah Juni 2024. Dengan demikian:

  • \(p=1\) → Juli 2024
  • \(p=2\) → Agustus 2024
a_last <- dma_last$a_t
b_last <- dma_last$b_t

forecast_1 <- a_last + b_last * 1
forecast_2 <- a_last + b_last * 2

forecast_dma <- data.frame(
  Periode = c("Juli 2024", "Agustus 2024"),
  Horizon = c(1, 2),
  Ramalan_DMA = c(forecast_1, forecast_2)
)

kable(
  forecast_dma,
  digits = 2,
  col.names = c("Periode", "p", "Ramalan DMA (orang)"),
  caption = "Ramalan jumlah pengunjung menggunakan DMA(3)"
)
Ramalan jumlah pengunjung menggunakan DMA(3)
Periode p Ramalan DMA (orang)
Juli 2024 1 292.8
Agustus 2024 2 298.3

5.1.1 Hasil Ramalan

Berdasarkan DMA(3), diperoleh:

  • Juli 2024 = 292.78 orang
  • Agustus 2024 = 298.33 orang

Ramalan meningkat secara linear sebesar sekitar 5.56 orang per bulan, karena DMA memasukkan komponen tren \(b_t\) secara eksplisit.

6 Perbandingan SMA dan DMA

6.1 Hasil Ramalan

Untuk perbandingan yang adil, SMA(3) menghasilkan satu ramalan langsung berdasarkan moving average terakhir, sedangkan DMA menghasilkan ramalan yang mengikuti arah tren.

comparison <- data.frame(
  Periode = c("Juli 2024", "Agustus 2024"),
  `SMA(3)` = c(sma_forecast, sma_forecast),
  `DMA(3)` = c(forecast_1, forecast_2),
  `Selisih DMA - SMA` = c(
    forecast_1 - sma_forecast,
    forecast_2 - sma_forecast
  )
)

kable(
  comparison,
  digits = 2,
  col.names = c(
    "Periode",
    "SMA(3)",
    "DMA(3)",
    "DMA(3) - SMA(3)"
  ),
  caption = "Perbandingan ramalan SMA(3) dan DMA(3)"
)
Perbandingan ramalan SMA(3) dan DMA(3)
Periode SMA(3) DMA(3) DMA(3) - SMA(3)
Juli 2024 281.7 292.8 11.11
Agustus 2024 281.7 298.3 16.67

6.2 Visualisasi Forecast

historis <- data.frame(
  tanggal = tanggal,
  nilai = as.numeric(pengunjung_ts),
  jenis = "Aktual"
)

forecast_dates <- seq.Date(
  from = as.Date("2024-07-01"),
  by = "month",
  length.out = 2
)

forecast_df <- data.frame(
  tanggal = forecast_dates,
  SMA = c(sma_forecast, sma_forecast),
  DMA = c(forecast_1, forecast_2)
)

ggplot() +
  geom_line(
    data = historis,
    aes(x = tanggal, y = nilai),
    linewidth = 0.9
  ) +
  geom_point(
    data = historis,
    aes(x = tanggal, y = nilai),
    size = 1.8
  ) +
  geom_line(
    data = forecast_df,
    aes(x = tanggal, y = SMA),
    linewidth = 1,
    linetype = "dashed"
  ) +
  geom_point(
    data = forecast_df,
    aes(x = tanggal, y = SMA),
    size = 2.2
  ) +
  geom_line(
    data = forecast_df,
    aes(x = tanggal, y = DMA),
    linewidth = 1
  ) +
  geom_point(
    data = forecast_df,
    aes(x = tanggal, y = DMA),
    size = 2.2
  ) +
  geom_vline(
    xintercept = as.numeric(as.Date("2024-06-01")),
    linetype = "dotted"
  ) +
  scale_x_date(
    date_breaks = "3 months",
    date_labels = "%b\n%Y"
  ) +
  labs(
    title = "Perbandingan Forecast SMA(3) dan DMA(3)",
    subtitle = "Forecast dimulai setelah observasi terakhir: Juni 2024",
    x = "Periode",
    y = "Jumlah pengunjung (orang)"
  ) +
  theme_minimal(base_size = 12)
## Warning in scale_x_date(date_breaks = "3 months", date_labels = "%b\n%Y"): A <numeric> value was passed to a Date scale.
## ℹ The value was converted to a <Date> object.

7 Pembahasan

Hasil analisis menunjukkan bahwa data jumlah pengunjung Perpustakaan Daerah Kabupaten Serang memiliki tren meningkat selama Januari 2023–Juni 2024. Meskipun terdapat beberapa penurunan antarbulan, arah umum deret waktu tetap naik.

SMA(3) mampu menghaluskan fluktuasi bulanan dengan merata-ratakan tiga observasi terakhir. Namun, karena data mempunyai tren naik, SMA cenderung tertinggal dari nilai aktual. Kondisi ini terlihat pada Juni 2024: data aktual mencapai 290 orang, sedangkan SMA(3) hanya 281,67 orang. Karakteristik tersebut sesuai dengan penjelasan materi bahwa SMA pada data bertren akan menghasilkan lag.

DMA(3) mengatasi keterlambatan tersebut dengan menggunakan dua tahap moving average dan kemudian mengestimasi level serta tren. Pada Juni 2024, estimasi level DMA adalah sekitar 287,22 orang, dengan tren positif sekitar 5,56 orang per bulan. Karena komponen tren dimasukkan secara eksplisit, hasil ramalan tidak lagi datar.

Perbedaan kedua metode semakin jelas pada horizon dua bulan. SMA(3) memberikan ramalan yang sama untuk Juli dan Agustus 2024, yaitu sekitar 281,67 orang, karena SMA menggunakan nilai moving average terakhir sebagai ramalan satu langkah dan tidak memiliki komponen tren eksplisit. Sebaliknya, DMA menghasilkan ramalan 292,78 orang untuk Juli dan 298,33 orang untuk Agustus 2024. Ramalan DMA meningkat sejalan dengan tren yang teridentifikasi.

Dengan demikian, untuk karakteristik data latihan yang menunjukkan tren naik, DMA lebih mampu merepresentasikan arah perkembangan data dibandingkan SMA biasa. Kesimpulan ini didasarkan pada mekanisme metode dan pola data yang diamati, bukan sekadar karena nilai ramalannya lebih tinggi.

8 Kesimpulan

Berdasarkan analisis yang dilakukan, diperoleh beberapa kesimpulan:

  1. Data jumlah pengunjung Perpustakaan Daerah Kabupaten Serang periode Januari 2023–Juni 2024 menunjukkan tren meningkat yang cukup jelas.
  2. SMA(3) berhasil menghaluskan fluktuasi data, tetapi menunjukkan efek lag pada periode ketika jumlah pengunjung meningkat.
  3. Pada Juni 2024, SMA(3) menghasilkan nilai 281,67 orang, lebih rendah daripada data aktual sebesar 290 orang.
  4. DMA(3) pada Juni 2024 menghasilkan estimasi level \(a_t\) sebesar 287,22 dan estimasi tren \(b_t\) sebesar 5,56 orang per bulan.
  5. Ramalan DMA(3) adalah sekitar 292,78 orang untuk Juli 2024 dan 298,33 orang untuk Agustus 2024.
  6. SMA(3) menghasilkan ramalan datar sebesar 281,67 orang, sedangkan DMA menghasilkan ramalan yang meningkat karena memasukkan komponen tren secara eksplisit.
  7. Berdasarkan pola data latihan, DMA(3) lebih sesuai untuk menggambarkan peramalan ketika tren naik perlu dipertahankan dalam hasil ramalan.

9 Referensi

  • Abraham, B., & Ledolter, J. (2005). Statistical Methods for Forecasting. New Jersey: Wiley.
  • Cryer, J. D., & Chan, K.-S. (2008). Time Series Analysis with Applications in R (2nd ed.). New York: Springer.
  • Hyndman, R. J., & Athanasopoulos, G. (2021). Forecasting: Principles and Practice (3rd ed.). Melbourne: OTexts.

Referensi di atas merupakan referensi yang tercantum pada modul perkuliahan Metode Peramalan Rata-Rata Bergerak Single & Double Moving Average