Data dan Studi Kasus

Berikut data harga gabah kering panen (GKP) di tingkat petani Kabupaten Serang periode Januari 2023–Desember 2024 (Rp/kg):

Tahun Jan Feb Mar Apr Mei Jun Jul Agu Sep Okt Nov Des
2023 5.200 5.150 5.300 5.400 5.250 5.350 5.450 5.500 5.400 5.550 5.600 5.700
2024 5.650 5.700 5.800 5.900 5.750 5.850 5.950 6.000 5.900 6.050 6.150 6.300
  1. Buat objek ts dan plot runtun waktu dari data harga GKP di atas.
  2. Lakukan transformasi logaritma, lalu bandingkan plot data asli dan hasil transformasi.
  3. Lakukan differencing tingkat pertama pada data hasil transformasi. Apakah tren sudah hilang?
  4. Gunakan 21 observasi pertama sebagai data latih dan 3 observasi terakhir sebagai data uji. Hitung ramalan naif untuk 3 bulan tersebut, lalu hitung ME, MAE, MSE, RMSE, dan MAPE-nya.

Penyelesaian

1. Buat objek ts dan plot runtun waktu dari data harga GKP di atas.

Membuat Objek ts

# Memasukkan data harga GKP
gkp <- c(5200, 5150, 5300, 5400, 5250, 5350, 5450, 5500, 5400, 5550, 5600, 5700,
         5650, 5700, 5800, 5900, 5750, 5850, 5950, 6000, 5900, 6050, 6150, 6300)

# Membuat objek time series (ts)
gkp_ts <- ts(gkp, start = c(2023, 1), frequency = 12)
gkp_ts
##       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
## 2023 5200 5150 5300 5400 5250 5350 5450 5500 5400 5550 5600 5700
## 2024 5650 5700 5800 5900 5750 5850 5950 6000 5900 6050 6150 6300

Plot runtun waktu

# Plot runtun waktu
plot(gkp_ts,
     main = "Plot Runtun Waktu Harga Gabah Kering Panen Tahun 2023-2024",
     xlab = "Tahun",
     ylab = "Harga (Rp/kg)",
     col = "gold",
     type = "o")

Interpretasi:
Berdasarkan plot data asli, terlihat bahwa harga GKP memiliki tren naik dari waktu ke waktu. Selain itu, fluktuasi (variansi) data juga cenderung membesar seiring dengan meningkatnya level harga. Hal ini menunjukkan bahwa data mentah belum stasioner, baik terhadap mean (karena ada tren) maupun terhadap variansi (karena heteroskedastisitas).

2. Lakukan transformasi logaritma, lalu bandingkan plot data asli dan hasil transformasi.

# Transformasi logaritma
log_gkp <- log(gkp_ts)

# Membandingkan plot data asli dan hasil transformasi
par(mfrow = c(1,2))

plot(gkp_ts,
     main = "Data Asli GKP",
     xlab = "Tahun",
     ylab = "Harga (Rp/kg)",
     col = "blue", 
     lwd = 2,
     type = "o")

plot(log_gkp,
     main = "Transformasi Logaritma GKP",
     xlab = "Tahun",
     ylab = "ln(Harga)",
     col = "darkgreen", 
     lwd = 2,
     type = "o")

par(mfrow = c(1,1))

Interpretasi:
Setelah data harga GKP diubah ke bentuk logaritma, skalanya berubah dan fluktuasinya jadi lebih rapat. Namun, pola naiknya masih terlihat jelas dari 2023 ke 2024, hanya saja angka perubahannya sekarang lebih kecil dan terkompresi. Ini menunjukkan bahwa transformasi logaritma baru berhasil menstabilkan variansi, tapi belum menghilangkan tren, sehingga masih perlu dilakukan differencing tingkat pertama.

3. Lakukan differencing tingkat pertama pada data hasil transformasi. Apakah tren sudah hilang?

# Differencing tingkat pertama pada data hasil transformasi logaritma
diff_log_gkp <- diff(log_gkp)

# Melihat hasil differencing
diff_log_gkp
##               Jan          Feb          Mar          Apr          May
## 2023              -0.009661911  0.028710106  0.018692133 -0.028170877
## 2024 -0.008810630  0.008810630  0.017391743  0.017094433 -0.025752496
##               Jun          Jul          Aug          Sep          Oct
## 2023  0.018868484  0.018519048  0.009132484 -0.018349139  0.027398974
## 2024  0.017241806  0.016949558  0.008368250 -0.016807118  0.025105921
##               Nov          Dec
## 2023  0.008968670  0.017699577
## 2024  0.016393810  0.024097552
# Plot hasil differencing
plot(diff_log_gkp, 
     main = "Differencing Log(Data)", 
     xlab = "Tahun", 
     ylab = "Diff Log", 
     col = "red", 
     lwd = 2,
     type = "o")
abline(h = 0, ,lty = 2, col = "black") # Garis bantu di 0
grid()

Interpretasi:
Differencing tingkat pertama dilakukan untuk menghilangkan tren (menstabilkan mean). Hasil plot Differencing Log(Data) menunjukkan bahwa data kini berfluktuasi di sekitar garis putus-putus tanpa ada lagi pola tren naik atau turun yang sistematis. Dengan demikian, tren sudah berhasil dihilangkan dan data sudah stasioner terhadap mean.

4. Gunakan 21 observasi pertama sebagai data latih dan 3 observasi terakhir sebagai data uji. Hitung ramalan naif untuk 3 bulan tersebut, lalu hitung ME, MAE, MSE, RMSE, dan MAPE-nya.

Membagi data training dan testing

# Data latih: 21 observasi pertama
train <- head(gkp, 21)

# Melihat data latih
train
##  [1] 5200 5150 5300 5400 5250 5350 5450 5500 5400 5550 5600 5700 5650 5700 5800
## [16] 5900 5750 5850 5950 6000 5900
# Data uji: 3 observasi terakhir
test <- tail(gkp, 3)

# Melihat data uji
test
## [1] 6050 6150 6300

Membuat ramalan naif

# Ramalan naif untuk 3 bulan
naive_forecast <- rep(tail(train, 1), 3)

naive_forecast
## [1] 5900 5900 5900

Artinya, karena nilai terakhir pada data latih adalah Rp5.900/kg, maka ramalan naif untuk Oktober, November, dan Desember 2024 semuanya adalah Rp5.900/kg.

Membandingkan aktual dan ramalan

# Menghitung galat (error)
error <- test - naive_forecast

hasil_evaluasi <- data.frame(
  Bulan = c("Okt 2024", "Nov 2024", "Des 2024"),
  Aktual = test,
  Ramalan_Naif = naive_forecast,
  Error = error
)
print(hasil_evaluasi)
##      Bulan Aktual Ramalan_Naif Error
## 1 Okt 2024   6050         5900   150
## 2 Nov 2024   6150         5900   250
## 3 Des 2024   6300         5900   400

Menghitung ME, MAE, MSE, RMSE, dan MAPE-nya.

# Menghitung metrik evaluasi
ME <- mean(error)
MAE <- mean(abs(error))
MSE <- mean(error^2)
RMSE <- sqrt(MSE)
MAPE <- mean(abs(error / test)) * 100

# Menampilkan hasil evaluasi
metrik_evaluasi <- data.frame(
  ME = ME,
  MAE = MAE,
  MSE = MSE,
  RMSE = RMSE,
  MAPE = MAPE
)

metrik_evaluasi
##         ME      MAE      MSE     RMSE     MAPE
## 1 266.6667 266.6667 81666.67 285.7738 4.297862

Interpretasi:

  • Nilai ME = 266,67 dan bernilai positif. Hal ini menunjukkan bahwa ramalan naif cenderung meleset ke bawah (under-forecast). Nilai positif menunjukkan arah bias ke bawah karena nilai aktual cenderung lebih tinggi daripada nilai ramalan.

  • Nilai MAE = 266,67 Rp/kg. Artinya, rata-rata besar kesalahan ramalan naif adalah sekitar Rp266,67/kg.

  • Nilai MSE = 81.666,67. Nilai ini menunjukkan rata-rata kuadrat galat hasil ramalan. MSE memberikan penalti yang lebih besar terhadap galat yang besar karena setiap galat dikuadratkan.

  • Nilai RMSE = 285,77 Rp/kg. Artinya, besarnya kesalahan ramalan yang diukur dengan RMSE adalah sekitar Rp285,77/kg. RMSE kembali ke satuan data asli dan sensitif terhadap galat besar.

  • Nilai MAPE = 4,30%, sehingga rata-rata kesalahan absolut ramalan naif adalah sekitar 4,30% dari nilai aktual. MAPE dinyatakan dalam bentuk persentase sehingga bebas satuan dan memudahkan perbandingan antar-deret yang memiliki skala berbeda.

Dengan demikian, hasil perhitungan metrik tersebut dapat digunakan sebagai baseline pembanding untuk model peramalan selanjutnya.