Data

Data yang digunakan adalah harga gabah kering panen (GKP) di tingkat petani Kabupaten Serang periode Januari 2023 sampai Desember 2024, dalam satuan Rp/kg.

harga_2023 <- c(5200, 5150, 5300, 5400, 5250, 5350, 5450, 5500, 5400, 5550, 5600, 5700)
harga_2024 <- c(5650, 5700, 5800, 5900, 5750, 5850, 5950, 6000, 5900, 6050, 6150, 6300)

harga_gkp <- c(harga_2023, harga_2024)
harga_gkp
##  [1] 5200 5150 5300 5400 5250 5350 5450 5500 5400 5550 5600 5700 5650 5700 5800
## [16] 5900 5750 5850 5950 6000 5900 6050 6150 6300

1. Objek ts dan Plot Runtun Waktu

gkp_ts <- ts(harga_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
# label bulan 
label_bulan <- format(seq(as.Date("2023-01-01"), by = "month", length.out = 24), "%b-%y")
plot(gkp_ts, xaxt = "n",
     main = "Harga GKP Kabupaten Serang, Jan 2023 - Des 2024",
     xlab = "Bulan", ylab = "Harga (Rp/kg)", col = "darkred", lwd = 2)
axis(1, at = time(gkp_ts), labels = label_bulan, las = 2, cex.axis = 0.7)

Dari plotnya kelihatan jelas harga GKP terus naik sepanjang dua tahun ini, dari sekitar Rp5.200/kg di awal 2023 sampai Rp6.300/kg di akhir 2024. Kenaikannya cukup teratur, tidak ada lonjakan atau penurunan tajam. Ada sedikit naik turun tiap beberapa bulan, kemungkinan mengikuti musim panen, tapi arah umumnya tetap naik terus. Karena ada tren yang jelas seperti ini, berarti data belum stasioner.

2. Transformasi Logaritma

gkp_log <- log(gkp_ts)
gkp_log
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 2023 8.556414 8.546752 8.575462 8.594154 8.565983 8.584852 8.603371 8.612503
## 2024 8.639411 8.648221 8.665613 8.682708 8.656955 8.674197 8.691146 8.699515
##           Sep      Oct      Nov      Dec
## 2023 8.594154 8.621553 8.630522 8.648221
## 2024 8.682708 8.707814 8.724207 8.748305
plot(gkp_ts, xaxt = "n", main = "Data Asli", xlab = "Bulan", ylab = "Harga (Rp/kg)", col = "darkred", lwd = 2)
axis(1, at = time(gkp_ts), labels = label_bulan, las = 2, cex.axis = 0.7)

plot(gkp_log, xaxt = "n", main = "Data Setelah Transformasi Logaritma", xlab = "Bulan", ylab = "ln(Harga)", col = "steelblue", lwd = 2)
axis(1, at = time(gkp_log), labels = label_bulan, las = 2, cex.axis = 0.7)

Kalau dibandingkan, bentuk kedua plot ini sebenarnya mirip saja, sama-sama menunjukkan tren naik. Bedanya, transformasi log ini menekan lonjakan nilai yang besar sehingga skalanya jadi lebih rapat dan variasinya kelihatan lebih stabil dibanding data aslinya. Hal ini karena variasi harga GKP di data ini memang belum terlalu ekstrem, sehingga efek transformasi log belum terlalu terlihat untuk meratakan naik-turun tersebut. Transformasi log ini tidak menghilangkan tren, tetapi menstabilkan varians kalau memang ada heteroskedastisitas. Trennya masih ada dan masih harus ditangani lewat differencing di langkah berikutnya.

3. Differencing Tingkat Pertama

gkp_diff <- diff(gkp_log, differences = 1)
gkp_diff
##               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
# rata-rata
mean(gkp_diff)
## [1] 0.008343087
plot(gkp_diff, xaxt = "n",
     main = "Hasil Differencing Tingkat Pertama dari Data Log",
     xlab = "Bulan", ylab = "Selisih ln(Harga)", col = "darkgreen", lwd = 2)
axis(1, at = time(gkp_diff), labels = label_bulan[-1], las = 2, cex.axis = 0.7)
abline(h = 0, lty = 2, col = "gray40")

Apakah tren sudah hilang? Ya, tren sudah hilang. Setelah didiferensiasi satu kali, garis yang tadinya terus naik pada data log sekarang bergerak naik turun di sekitar angka nol tanpa arah kecenderungan tertentu ke atas maupun ke bawah. Rata-rata selisihnya juga kecil, sekitar 0,008, mendekati nol, yang menunjukkan bahwa secara rata-rata perubahan harga bulanan (dalam skala log) sudah stabil dan datanya bisa dikatakan sudah cenderung stasioner terhadap tren.

4. Ramalan Naif dan Evaluasi Akurasi

n_train <- 21
train_data <- gkp_ts[1:n_train]
test_data <- gkp_ts[(n_train + 1):24]

# metode naif
naive_value <- train_data[n_train]
naive_forecast <- rep(naive_value, length(test_data))

hasil <- data.frame(
  Bulan = c("Okt 2024", "Nov 2024", "Des 2024"),
  Aktual = test_data,
  Ramalan_Naif = naive_forecast
)
hasil
##      Bulan Aktual Ramalan_Naif
## 1 Okt 2024   6050         5900
## 2 Nov 2024   6150         5900
## 3 Des 2024   6300         5900

Data latih yang dipakai adalah 21 observasi pertama (Januari 2023 sampai September 2024), dan data uji adalah 3 observasi terakhir (Oktober, November, Desember 2024). Metode naif meramalkan harga tiga bulan ke depan sama persis dengan harga terakhir yang tercatat di data latih, yaitu Rp5.900/kg untuk Sep 2024, sehingga ramalan Okt, Nov, dan Des 2024 semuanya mengikuti angka tersebut.

error <- test_data - naive_forecast

ME   <- mean(error)
MAE  <- mean(abs(error))
MSE  <- mean(error^2)
RMSE <- sqrt(MSE)
MAPE <- mean(abs(error) / test_data) * 100

metrik <- data.frame(
  ME = ME, MAE = MAE, MSE = MSE, RMSE = RMSE, MAPE_persen = MAPE
)
metrik
##         ME      MAE      MSE     RMSE MAPE_persen
## 1 266.6667 266.6667 81666.67 285.7738    4.297862

Interpretasi:

Hasilnya, ramalan naif ini jauh di bawah harga aktual yang terus naik sampai Rp6.300/kg di Desember. Nilai ME sebesar 266,7 (positif) menunjukkan ramalan ini konsisten meremehkan (underestimate) harga aktual. MAE sebesar 266,7 menunjukkan rata-rata kesalahan sekitar Rp267 per kg, sama dengan ME karena semua error searah. RMSE sebesar 285,8 sedikit lebih tinggi, menandakan ada bulan dengan kesalahan lebih menonjol, yaitu Desember dengan selisih Rp400.

Sementara MAPE sebesar 4,3% tergolong kecil, tapi tetap menunjukkan metode naif kurang tepat di sini, karena metode ini mengasumsikan harga tidak berubah dari periode terakhir, padahal harga GKP punya tren naik yang konsisten.