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 |
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).
# 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")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.
# 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.
Membagi data training dan testing
## [1] 5200 5150 5300 5400 5250 5350 5450 5500 5400 5550 5600 5700 5650 5700 5800
## [16] 5900 5750 5850 5950 6000 5900
## [1] 6050 6150 6300
Membuat ramalan naif
## [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.