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
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.
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.
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.
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.