BAB I PENDAHULUAN

1.1 Latar Belakang

   Perkembangan teknologi informasi mendorong meningkatnya penggunaan metode statistika dan machine learning dalam mengolah data serta menghasilkan informasi yang akurat untuk mendukung proses pengambilan keputusan (Darwanto et al., 2021). Salah satu metode yang dapat digunakan dalam analisis data adalah Random Forest, yaitu algoritma ensemble learning yang menggabungkan sejumlah pohon keputusan (decision tree) melalui proses pengacakan data dan variabel prediktor untuk menghasilkan suatu prediksi berdasarkan hasil gabungan seluruh pohon. Metode ini dapat diterapkan untuk menyelesaikan permasalahan klasifikasi maupun regresi dengan memanfaatkan pola yang terdapat dalam data (Mutoffar et al., 2022).

   Meskipun memiliki kemampuan prediksi yang baik, Random Forest masih memiliki kelemahan, salah satunya adalah kemungkinan terjadinya underfitting ketika pohon keputusan yang terbentuk memiliki ukuran terlalu kecil sehingga pola dalam data belum dapat dipelajari secara optimal (Purwanto et al., 2025). Untuk mengatasi kelemahan tersebut, dikembangkan metode Double Random Forest (DRF) yang merupakan pengembangan dari Random Forest dengan pendekatan pembentukan pohon tambahan untuk memperbaiki model yang mengalami underfitting (Khairunnisa et al., 2024). Kedua metode tersebut dapat digunakan untuk membandingkan kemampuan model dalam menghasilkan prediksi sekaligus memahami karakteristik hubungan antara variabel prediktor dan variabel respons (Khairunnisa et al., 2024).

   Berdasarkan hal tersebut, praktikum mengenai Random Forest dan Double Random Forest dilakukan untuk memahami konsep serta penerapan kedua metode dalam analisis data menggunakan perangkat lunak R. Melalui praktikum ini, dilakukan pembentukan model, pengujian hasil prediksi, serta evaluasi kinerja masing-masing metode untuk mengetahui kemampuan model dalam menghasilkan prediksi yang baik (Purwanto et al., 2025). Dengan demikian, praktikum ini diharapkan dapat memberikan pemahaman mengenai perbedaan karakteristik, kelebihan, dan kemampuan Random Forest dan Double Random Forest dalam menyelesaikan permasalahan analisis data (Khairunnisa et al., 2024).

1.2 Rumusan Masalah

   Berdasarkan latar belakang di atas dapat disimpulkan bahwa rumusan masalah sebagai berikut:
  1. Bagaimana mahasiswa mampu memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree?
  2. Bagaimana mahasiswa mampu mengimplementasikan Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi?
  3. Bagaimana mahasiswa mampu mengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest?

1.3 Tujuan Penelitian

   Berdasarkan rumusan masalah di atas, tujuan penelitian yang dapat disimpulkan sebagai berikut:
  1. Mahasiswa mampu memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
  2. Mahasiswa mampu mengimplementasikan Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi.
  3. Mahasiswa mampu mengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest.

1.4 Manfaat Penelitian

   Adapun manfaat yang didapatkan dari penelitian ini adalah sebagai berikut:
  1. Bagi penulis

    1. Memberikan informasi dan pengetahuan mengenai Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.

    2. Menerapkan ilmu atau wawasan baru mengenai Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.

  2. Bagi pembaca

    1. Menambah ilmu pengetahuan mengenai Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.

    2. Dapat menjadi rujukan bagi penelitian selanjutnya.

1.5 Batasan Masalah

   Adapun batasan masalah pada penelitian ini yaitu, lakukan analisis Random Forest secara lengkap mulai dari persiapan data, pembentukan model, prediksi, evaluasi, visualisasi, dan interpretasi. Gunakan set.seed (234) agar hasil dapat direproduksi. NPM Ganjil: lakukan Random Forest Regression pada data Friedman. Bandingkan mtry = 2, 3, dan 5 dengan num.trees = 200, 500, dan 1000. Bandingkan performa data testing berdasarkan MSE, RMSE, MAE, R2, residual plot, dan variable importance. Tampilkan pula OOB MSE sebagai evaluasi internal model.

BAB II TINJAUAN PUSTAKA

2.1 Random Forest

   Random Forest merupakan salah satu algoritma machine learning yang termasuk dalam metode ensemble learning, yaitu teknik yang menggabungkan beberapa model untuk menghasilkan prediksi yang lebih baik. Algoritma ini bekerja dengan membentuk sejumlah pohon keputusan (decision tree) menggunakan sampel data dan pemilihan variabel prediktor secara acak. Setiap pohon menghasilkan prediksi yang kemudian digabungkan untuk memperoleh hasil akhir, yaitu melalui majority voting pada klasifikasi dan rata-rata prediksi pada regresi (Diba et al., 2023). Metode Random Forest dapat digunakan untuk menangani data dengan karakteristik yang kompleks karena mampu membangun banyak pohon keputusan dan memanfaatkan informasi dari berbagai variabel prediktor (Firmansah et al., 2024).

   Dalam penerapannya, Random Forest memiliki kelebihan berupa kemampuan mengurangi risiko overfitting serta menghasilkan kinerja prediksi yang cukup baik pada berbagai permasalahan klasifikasi. Namun, performa algoritma ini tetap dipengaruhi oleh karakteristik data yang digunakan, seperti ketidakseimbangan kelas dan jumlah variabel prediktor. Fauziah dan Hernadi (2024) menjelaskan bahwa penggunaan Random Forest pada data dengan kelas tidak seimbang dapat menyebabkan model kurang optimal dalam memprediksi kelas minoritas. Oleh karena itu, diperlukan tahapan pengolahan data dan penyesuaian metode yang sesuai agar hasil klasifikasi maupun prediksi yang diperoleh dapat lebih optimal (Dhani et al., 2024).

2.2 Double Random Forest

   Double Random Forest (DRF) merupakan pengembangan dari metode Random Forest yang termasuk dalam kelompok ensemble learning dengan pendekatan supervised learning. Metode ini dikembangkan untuk mengatasi kelemahan Random Forest, khususnya ketika model menghasilkan pohon keputusan dengan ukuran yang terlalu kecil sehingga menyebabkan underfitting. Melalui pendekatan DRF, kemampuan model dalam membentuk prediksi diharapkan dapat ditingkatkan, terutama ketika metode Random Forest belum mampu menangkap pola data secara optimal (Ratnasari et al., 2023). DRF juga dapat digunakan untuk permasalahan klasifikasi dengan jumlah kelas lebih dari dua atau klasifikasi multikelas (Aldania et al., 2023).

   Penerapan Double Random Forest telah dikembangkan dalam berbagai bidang, salah satunya untuk analisis data ekonomi dan prediksi harga saham. Dalam penggunaannya, DRF dapat dimanfaatkan untuk mengenali pola hubungan antara variabel prediktor dan variabel respons sehingga menghasilkan prediksi berdasarkan karakteristik data yang dianalisis (Zikri et al., 2024). Kinerja metode ini dapat dievaluasi menggunakan beberapa ukuran kesalahan prediksi, seperti Root Mean Square Error (RMSE), Mean Absolute Error (MAE), dan Mean Absolute Percentage Error (MAPE) untuk kasus regresi, sedangkan pada klasifikasi dapat menggunakan accuracy dan balanced accuracy (Ratnasari et al., 2023).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

   Jenis data pada penelitian ini adalah data numerik. Data numerik adalah jenis data yang terdiri dari angka dan dapat diukur atau dihitung secara kuantitatif. Data ini digunakan untuk merepresentasikan nilai atau ukuran tertentu dalam berbagai konteks, seperti sains, ekonomi, statistik, dan matematika. Data numerik sering digunakan untuk melakukan perhitungan, analisis, dan visualisasi data.

   Dalam laporan ini sumber data yang digunakan adalah sumber data dalam wujud data sekunder. yaitu data yang telah dikumpulkan dan disusun oleh pihak lain di luar praktikan itu sendiri. Data pada praktikum ini yaitu dataset Friedman yang tersedia di R, Dimana penelitian ini menggunakan data kuantitatif simulasi yang dibangkitkan secara komputasional menggunakan fungsi `mlbench.friedman1()` dari paket mlbench pada perangkat lunak R.

3.2 Variabel Penelitian

   Variabel adalah simbol, karakteristik, atau atribut yang dapat diukur atau diamati dalam sebuah penelitian atau eksperimen. Pada laporan ini terdapat 1 batasan masalah. Variabel penelitian yang digunakan terdiri atas satu variabel respons kontinu, yaitu Y, dan sepuluh variabel prediktor numerik, yaitu X sampai X10. Variabel X1 sampai X5 memiliki hubungan dengan variabel respons, sedangkan X6 sampai X10 berperan sebagai variabel tambahan yang tidak memiliki pengaruh langsung terhadap respons.

3.3 Analisis Data

   Langkah-langkah yang digunakan pada penelitian untuk batasan masalah adalah sebagai berikut:
  1. Membangkitkan data Friedman sebanyak 200 observasi menggunakan fungsi mlbench.friedman1().
  2. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% menggunakan set.seed(234).
  3. Membandingkan sembilan kombinasi parameter Random Forest, yaitu mtry = 2, 3, 5 dan num.trees = 200, 500, 1000.
  4. Membentuk sembilan model Random Forest Regression menggunakan data training dengan parameter lain yang dibuat tetap.
  5. Menghitung nilai OOB MSE untuk mengetahui kesalahan prediksi internal masing-masing model.
  6. Melakukan prediksi terhadap data testing, kemudian menghitung MSE, RMSE, MAE, dan R-square.
  7. Membuat plot aktual dan prediksi, residual plot, grafik perbandingan performa model, serta variable importance.
  8. Menentukan model terbaik berdasarkan nilai RMSE, MSE, dan MAE terkecil serta R-square terbesar. Selanjutnya, menginterpretasikan pengaruh mtry, num.trees, pola residual, dan variabel yang paling penting.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Pembentukan Dataset

library(ranger)
library(mlbench)
library(caret)
library(knitr)

set.seed(234)
reg.data <- as.data.frame(mlbench.friedman1(200))
str(reg.data)
## 'data.frame':    200 obs. of  11 variables:
##  $ x.1 : num  0.7456 0.7817 0.02 0.7761 0.0669 ...
##  $ x.2 : num  0.575 0.316 0.765 0.229 0.172 ...
##  $ x.3 : num  0.0289 0.9375 0.7978 0.668 0.5974 ...
##  $ x.4 : num  0.72 0.185 0.534 0.553 0.755 ...
##  $ x.5 : num  0.875 0.704 0.952 0.478 0.533 ...
##  $ x.6 : num  0.276 0.643 0.987 0.843 0.733 ...
##  $ x.7 : num  0.9332 0.4018 0.0874 0.893 0.1024 ...
##  $ x.8 : num  0.60746 0.00369 0.0106 0.44639 0.83494 ...
##  $ x.9 : num  0.756 0.405 0.247 0.144 0.187 ...
##  $ x.10: num  0.718 0.534 0.667 0.68 0.595 ...
##  $ y   : num  24.35 18.05 12.02 12.1 9.91 ...
summary(reg.data)
##       x.1                x.2                x.3               x.4         
##  Min.   :0.001198   Min.   :0.004583   Min.   :0.01021   Min.   :0.00707  
##  1st Qu.:0.274097   1st Qu.:0.255644   1st Qu.:0.24506   1st Qu.:0.20772  
##  Median :0.541847   Median :0.436813   Median :0.48965   Median :0.50295  
##  Mean   :0.509759   Mean   :0.465323   Mean   :0.48570   Mean   :0.48821  
##  3rd Qu.:0.741416   3rd Qu.:0.651439   3rd Qu.:0.73476   3rd Qu.:0.76599  
##  Max.   :0.993590   Max.   :0.999850   Max.   :0.99985   Max.   :0.99761  
##       x.5                x.6                x.7                x.8          
##  Min.   :0.008246   Min.   :0.005504   Min.   :0.001884   Min.   :0.002496  
##  1st Qu.:0.267523   1st Qu.:0.194431   1st Qu.:0.226788   1st Qu.:0.249826  
##  Median :0.522081   Median :0.446060   Median :0.491332   Median :0.480306  
##  Mean   :0.503282   Mean   :0.468544   Mean   :0.503754   Mean   :0.482050  
##  3rd Qu.:0.751688   3rd Qu.:0.746035   3rd Qu.:0.780325   3rd Qu.:0.696675  
##  Max.   :0.994604   Max.   :0.999021   Max.   :0.993044   Max.   :0.995613  
##       x.9                x.10                y         
##  Min.   :0.004483   Min.   :0.005544   Min.   : 3.082  
##  1st Qu.:0.203254   1st Qu.:0.329160   1st Qu.:10.593  
##  Median :0.453476   Median :0.592614   Median :13.810  
##  Mean   :0.471873   Mean   :0.540708   Mean   :14.270  
##  3rd Qu.:0.742412   3rd Qu.:0.765353   3rd Qu.:18.063  
##  Max.   :0.997436   Max.   :0.998141   Max.   :26.146
dim(reg.data)
## [1] 200  11
   Data yang digunakan dalam praktikum ini merupakan data simulasi Friedman yang dibuat menggunakan fungsi mlbench.friedman1() dengan jumlah 200 pengamatan. Data tersebut terdiri atas 11 kolom, yaitu 10 variabel prediktor yang diberi nama x.1 hingga x.10 serta satu variabel respons y. Berdasarkan hasil pemeriksaan struktur data menggunakan fungsi str(), seluruh variabel memiliki tipe numerik sehingga dapat digunakan dalam analisis regresi. Sementara itu, fungsi summary() memberikan gambaran mengenai nilai minimum, kuartil, median, rata-rata, dan maksimum dari setiap variabel. Data ini digunakan untuk menguji kemampuan Random Forest dalam mempelajari hubungan antara sejumlah variabel prediktor dengan variabel respons.

4.2 Pembagian Data Training dan Testing

set.seed(234)
idx.reg   <- createDataPartition(reg.data$y, p = 0.70, list = FALSE)
reg.train <- reg.data[idx.reg, ]
reg.test  <- reg.data[-idx.reg, ]
dim(reg.train)
## [1] 140  11
dim(reg.test)
## [1] 60 11
   Pembagian dataset dilakukan menggunakan fungsi createDataPartition() dengan menetapkan proporsi 70% untuk data training dan 30% untuk data testing. Dari keseluruhan 200 pengamatan, diperoleh sebanyak r nrow(reg.train) data untuk proses pembentukan model dan r nrow(reg.test) data untuk menguji hasil prediksi. Data training digunakan sebagai dasar pembelajaran algoritma dalam mengenali pola hubungan antarvariabel, sedangkan data testing berfungsi untuk mengetahui kemampuan model ketika dihadapkan pada data yang tidak digunakan selama proses pelatihan. Pengaturan set.seed(234) diterapkan agar proses pemilihan observasi menghasilkan pembagian yang konsisten ketika sintaks dijalankan kembali.

4.3 Pembentukan Sembilan Model Random Forest Regression

grid <- expand.grid(
  mtry      = c(2, 3, 5),
  num.trees = c(200, 500, 1000)
)
grid$Model <- paste0("mtry=", grid$mtry, ", trees=", grid$num.trees)

model.list <- vector("list", nrow(grid))
names(model.list) <- grid$Model

for (i in seq_len(nrow(grid))) {
  set.seed(234)
  model.list[[i]] <- ranger(
    y ~ ., data = reg.train,
    num.trees       = grid$num.trees[i],
    mtry            = grid$mtry[i],
    min.node.size   = 5,
    replace         = TRUE,
    sample.fraction = 1,
    importance      = "permutation",
    seed            = 234
  )
}

# Contoh ringkasan satu model (mtry = 3, num.trees = 500)
model.list[["mtry=3, trees=500"]]
## Ranger result
## 
## Call:
##  ranger(y ~ ., data = reg.train, num.trees = grid$num.trees[i],      mtry = grid$mtry[i], min.node.size = 5, replace = TRUE, sample.fraction = 1,      importance = "permutation", seed = 234) 
## 
## Type:                             Regression 
## Number of trees:                  500 
## Sample size:                      140 
## Number of independent variables:  10 
## Mtry:                             3 
## Target node size:                 5 
## Variable importance mode:         permutation 
## Splitrule:                        variance 
## OOB prediction error (MSE):       7.442423 
## R squared (OOB):                  0.7198089
   Pembentukan model Random Forest dilakukan dengan mengombinasikan dua parameter utama, yaitu mtry dan num.trees. Nilai mtry yang digunakan terdiri atas 2, 3, dan 5, sedangkan jumlah pohon keputusan ditetapkan sebanyak 200, 500, dan 1.000 pohon. Kombinasi kedua parameter tersebut menghasilkan sembilan model yang memiliki konfigurasi berbeda. Dalam proses pembentukan model, parameter min.node.size ditetapkan sebesar 5, replace menggunakan nilai TRUE, dan sample.fraction sebesar 1. Pengaturan tersebut dipertahankan sama pada seluruh model agar pengujian lebih berfokus pada perbedaan jumlah variabel yang dipertimbangkan dalam pemisahan simpul dan banyaknya pohon keputusan. Dengan demikian, dapat diketahui kombinasi parameter yang memberikan hasil prediksi paling baik pada data yang dianalisis.

4.4 Evaluasi Internal: OOB MSE

oob.tbl <- data.frame(
  mtry      = grid$mtry,
  num.trees = grid$num.trees,
  OOB_MSE   = sapply(model.list, function(m) m$prediction.error),
  OOB_R2    = sapply(model.list, function(m) m$r.squared)
)
rownames(oob.tbl) <- NULL
kable(round(oob.tbl, 4), caption = "Tabel 4.1 OOB MSE dan OOB R-square sembilan model")
Tabel 4.1 OOB MSE dan OOB R-square sembilan model
mtry num.trees OOB_MSE OOB_R2
2 200 8.2222 0.6905
3 200 7.7097 0.7097
5 200 7.0632 0.7341
2 500 8.1267 0.6940
3 500 7.4424 0.7198
5 500 6.8750 0.7412
2 1000 8.0553 0.6967
3 1000 7.3547 0.7231
5 1000 6.8260 0.7430
oob.best <- oob.tbl[which.min(oob.tbl$OOB_MSE), ]
   Evaluasi internal model dilakukan dengan menggunakan nilai Out-of-Bag Mean Squared Error (OOB MSE) dan OOB R-square. OOB MSE digunakan untuk mengukur besarnya kesalahan prediksi berdasarkan data yang tidak terpilih dalam sampel bootstrap pada masing-masing pohon, sedangkan OOB R-square menunjukkan kemampuan model dalam menjelaskan variasi variabel respons. Berdasarkan Tabel 4.1, kombinasi parameter yang menghasilkan OOB MSE paling rendah adalah mtry = r oob.best$mtry dan num.trees = r oob.best$num.trees, dengan nilai sebesar r round(oob.best$OOB_MSE, 4). Adapun nilai OOB MSE tertinggi dari seluruh model mencapai r round(max(oob.tbl$OOB_MSE), 4). Perbedaan nilai tersebut menunjukkan bahwa pemilihan konfigurasi parameter memberikan pengaruh terhadap tingkat kesalahan prediksi internal, sehingga model dengan OOB MSE terkecil dapat dipertimbangkan sebagai model yang lebih baik berdasarkan kriteria evaluasi ini.

4.5 Prediksi dan Evaluasi pada Data Testing

pred.list <- lapply(model.list, function(m) {
  predict(m, data = reg.test)$predictions
})
actual.reg <- reg.test$y

# Contoh tabel aktual, prediksi, dan residual (mtry = 3, num.trees = 500)
p.contoh <- pred.list[["mtry=3, trees=500"]]
hasil.rf.reg <- data.frame(
  Aktual   = actual.reg,
  Prediksi = p.contoh,
  Residual = actual.reg - p.contoh
)
kable(round(head(hasil.rf.reg, 10), 4),
      caption = "Tabel 4.2 Sepuluh baris pertama hasil prediksi (mtry = 3, num.trees = 500)")
Tabel 4.2 Sepuluh baris pertama hasil prediksi (mtry = 3, num.trees = 500)
Aktual Prediksi Residual
10.2323 12.4553 -2.2230
11.8453 10.6177 1.2276
10.3357 13.2295 -2.8938
16.7273 13.3676 3.3597
25.0771 19.5281 5.5490
15.4469 14.2547 1.1922
15.6429 12.6247 3.0182
7.1108 12.8245 -5.7136
13.3513 15.3894 -2.0382
12.8720 14.6205 -1.7486
eval.fun <- function(actual, pred) {
  MSE  <- mean((actual - pred)^2)
  RMSE <- sqrt(MSE)
  MAE  <- mean(abs(actual - pred))
  R2   <- 1 - sum((actual - pred)^2) / sum((actual - mean(actual))^2)
  c(MSE = MSE, RMSE = RMSE, MAE = MAE, R_Square = R2)
}

eval.mat <- t(sapply(pred.list, eval.fun, actual = actual.reg))
eval.tbl <- data.frame(
  Model     = grid$Model,
  mtry      = grid$mtry,
  num.trees = grid$num.trees,
  OOB_MSE   = oob.tbl$OOB_MSE,
  eval.mat
)
rownames(eval.tbl) <- NULL
kable(cbind(eval.tbl[, 1:3], round(eval.tbl[, 4:8], 4)),
      caption = "Tabel 4.3 Perbandingan performa data testing sembilan model")
Tabel 4.3 Perbandingan performa data testing sembilan model
Model mtry num.trees OOB_MSE MSE RMSE MAE R_Square
mtry=2, trees=200 2 200 8.2222 7.8700 2.8054 2.3414 0.6717
mtry=3, trees=200 3 200 7.7097 7.8139 2.7953 2.2981 0.6740
mtry=5, trees=200 5 200 7.0632 7.6596 2.7676 2.2726 0.6805
mtry=2, trees=500 2 500 8.1267 8.1774 2.8596 2.3832 0.6589
mtry=3, trees=500 3 500 7.4424 7.8278 2.7978 2.3058 0.6734
mtry=5, trees=500 5 500 6.8750 7.3826 2.7171 2.2312 0.6920
mtry=2, trees=1000 2 1000 8.0553 8.1181 2.8492 2.3794 0.6613
mtry=3, trees=1000 3 1000 7.3547 7.7780 2.7889 2.2996 0.6755
mtry=5, trees=1000 5 1000 6.8260 7.1925 2.6819 2.2054 0.6999
best.rmse <- eval.tbl[which.min(eval.tbl$RMSE), ]
best.mae  <- eval.tbl[which.min(eval.tbl$MAE), ]
best.r2   <- eval.tbl[which.max(eval.tbl$R_Square), ]
konsisten <- identical(best.rmse$Model, best.mae$Model) &&
             identical(best.rmse$Model, best.r2$Model)

# Rata-rata RMSE menurut mtry dan menurut num.trees
rmse.mtry  <- tapply(eval.tbl$RMSE, eval.tbl$mtry, mean)
rmse.trees <- tapply(eval.tbl$RMSE, eval.tbl$num.trees, mean)
   Setelah seluruh model terbentuk, tahap berikutnya adalah melakukan prediksi menggunakan data testing untuk membandingkan hasil estimasi dengan nilai respons yang sebenarnya. Hasil prediksi tersebut kemudian digunakan untuk menghitung MSE, RMSE, MAE, dan R-square. Berdasarkan Tabel 4.3, model dengan hasil evaluasi terbaik berdasarkan RMSE adalah r best.rmse$Model, yang memperoleh MSE sebesar r round(best.rmse$MSE, 4), RMSE sebesar r round(best.rmse$RMSE, 4), MAE sebesar r round(best.rmse$MAE, 4), dan R-square sebesar r round(best.rmse$R_Square, 4). Nilai RMSE dan MAE menggambarkan besarnya penyimpangan prediksi terhadap nilai aktual, sehingga nilai yang lebih kecil menunjukkan kesalahan prediksi yang lebih rendah. Sementara itu, R-square digunakan untuk melihat kemampuan model dalam menerangkan variasi respons pada data pengujian. Model tersebut mampu menjelaskan sekitar r round(100*best.rmse$R_Square, 1)% variasi nilai respons pada data testing.

   Perbedaan pengaruh parameter mtry dan num.trees dapat diamati melalui perhitungan rata-rata RMSE pada masing-masing kelompok parameter. Berdasarkan hasil tersebut, rata-rata RMSE untuk mtry = 2, mtry = 3, dan mtry = 5 secara berurutan adalah r paste(round(rmse.mtry, 4), collapse = ", "). Sementara itu, rata-rata RMSE untuk jumlah pohon 200, 500, dan 1.000 secara berurutan adalah r paste(round(rmse.trees, 4), collapse = ", "). Hasil ini memperlihatkan bahwa perubahan konfigurasi parameter dapat menghasilkan tingkat kesalahan prediksi yang berbeda. Oleh karena itu, penentuan model tidak cukup hanya berdasarkan banyaknya pohon yang digunakan, tetapi juga perlu memperhatikan jumlah variabel yang dipertimbangkan pada setiap pemisahan simpul.

4.6 Plot Aktual dan Prediksi

par(mfrow = c(3, 3), mar = c(4, 4, 3, 1))
for (i in seq_len(nrow(grid))) {
  plot(actual.reg, pred.list[[i]], pch = 19,
       xlab = "Nilai Aktual", ylab = "Nilai Prediksi",
       main = grid$Model[i], cex.main = 0.9)
  abline(a = 0, b = 1, lty = 2, lwd = 2)
}
Gambar 4.1 Plot nilai aktual vs prediksi sembilan model

Gambar 4.1 Plot nilai aktual vs prediksi sembilan model

par(mfrow = c(1, 1))
   Gambar 4.1 menyajikan perbandingan antara nilai aktual dan nilai prediksi dari sembilan model Random Forest. Pada grafik tersebut, sumbu horizontal menunjukkan nilai respons sebenarnya, sedangkan sumbu vertikal menggambarkan hasil prediksi model. Garis diagonal putus-putus digunakan sebagai acuan untuk melihat kesesuaian kedua nilai tersebut. Titik yang berada dekat dengan garis menunjukkan bahwa hasil prediksi memiliki selisih yang relatif kecil terhadap nilai aktual. Sebaliknya, titik yang semakin jauh dari garis menggambarkan adanya perbedaan prediksi yang lebih besar. Berdasarkan hasil evaluasi, nilai R-square pada kesembilan model berada pada rentang r round(min(eval.tbl$R_Square), 4) hingga r round(max(eval.tbl$R_Square), 4). Visualisasi ini membantu memperlihatkan kemampuan masing-masing konfigurasi dalam mengikuti pola nilai respons pada data pengujian.

4.7 Residual Plot

par(mfrow = c(3, 3), mar = c(4, 4, 3, 1))
for (i in seq_len(nrow(grid))) {
  res <- actual.reg - pred.list[[i]]
  plot(pred.list[[i]], res, pch = 19,
       xlab = "Nilai Prediksi", ylab = "Residual",
       main = grid$Model[i], cex.main = 0.9)
  abline(h = 0, lty = 2, lwd = 2)
}
Gambar 4.2 Residual plot sembilan model

Gambar 4.2 Residual plot sembilan model

par(mfrow = c(1, 1))
res.best  <- actual.reg - pred.list[[best.rmse$Model]]
mean.res  <- mean(res.best)
cor.res   <- cor(pred.list[[best.rmse$Model]], res.best)
   Residual plot digunakan untuk mengamati perbedaan antara nilai aktual dan nilai prediksi pada setiap model. Residual diperoleh dari pengurangan nilai aktual terhadap hasil prediksi, sehingga nilai positif menunjukkan bahwa prediksi lebih rendah daripada nilai sebenarnya, sedangkan nilai negatif menunjukkan bahwa prediksi lebih tinggi. Pada Gambar 4.2, garis horizontal pada posisi nol menjadi titik acuan untuk melihat penyebaran residual. Model dengan penyebaran residual yang relatif merata di sekitar garis tersebut menunjukkan bahwa kesalahan prediksinya tidak terlalu terkonsentrasi pada satu arah. Khusus pada model terbaik, diperoleh rata-rata residual sebesar r round(mean.res, 4) dengan korelasi antara nilai prediksi dan residual sebesar r round(cor.res, 4). Hasil ini dapat digunakan untuk melihat kecenderungan kesalahan prediksi serta mengetahui apakah model masih menunjukkan pola penyimpangan tertentu.

4.8 Grafik Perbandingan Performa Model

par(mfrow = c(1, 2), mar = c(9, 4, 3, 1))
barplot(eval.tbl$RMSE, names.arg = eval.tbl$Model, las = 2, cex.names = 0.7,
        main = "RMSE Data Testing", ylab = "RMSE", col = "steelblue")
barplot(eval.tbl$R_Square, names.arg = eval.tbl$Model, las = 2, cex.names = 0.7,
        main = "R-Square Data Testing", ylab = "R-Square", col = "darkorange")
Gambar 4.3 Perbandingan RMSE dan R-square sembilan model pada data testing

Gambar 4.3 Perbandingan RMSE dan R-square sembilan model pada data testing

par(mfrow = c(1, 1))
   Gambar 4.3 memperlihatkan perbandingan nilai RMSE dan R-square dari sembilan model Random Forest yang telah dibentuk. Grafik pertama menggambarkan tingkat kesalahan prediksi masing-masing model, sedangkan grafik kedua menunjukkan kemampuan model dalam menjelaskan variasi variabel respons. Berdasarkan hasil visualisasi, nilai RMSE terendah adalah r round(min(eval.tbl$RMSE), 4) dan nilai tertingginya sebesar r round(max(eval.tbl$RMSE), 4). Model dengan batang RMSE paling rendah menunjukkan hasil prediksi yang lebih mendekati nilai aktual. Sementara itu, pada grafik R-square, model dengan nilai paling tinggi menunjukkan kemampuan penjelasan variasi respons yang lebih besar. Kedua grafik tersebut memberikan gambaran mengenai perbedaan kualitas prediksi berdasarkan konfigurasi parameter yang digunakan, sehingga pemilihan model dapat dilakukan dengan mempertimbangkan tingkat kesalahan dan kemampuan penjelasannya secara bersamaan.

4.9 Variable Importance

imp.mat <- sapply(model.list, function(m) m$variable.importance)
kable(round(imp.mat, 4),
      caption = "Tabel 4.4 Permutation importance setiap variabel pada sembilan model")
Tabel 4.4 Permutation importance setiap variabel pada sembilan model
mtry=2, trees=200 mtry=3, trees=200 mtry=5, trees=200 mtry=2, trees=500 mtry=3, trees=500 mtry=5, trees=500 mtry=2, trees=1000 mtry=3, trees=1000 mtry=5, trees=1000
x.1 7.0564 7.9614 9.4340 7.2812 8.1718 9.2110 7.3275 8.1834 9.3875
x.2 4.1035 3.4578 3.2554 3.9788 3.5563 3.4368 3.8267 3.5780 3.8211
x.3 2.6306 1.7999 1.6639 2.7030 2.2339 1.7405 2.5764 2.2834 1.8255
x.4 10.3007 10.9366 12.3287 9.5898 11.0137 12.7425 9.4642 10.9812 12.9314
x.5 1.4976 0.8012 0.8824 1.3159 1.0121 0.8821 1.2285 1.0931 0.9720
x.6 0.2439 -0.1421 0.2234 0.0871 -0.1326 0.1440 -0.0503 -0.1254 0.1000
x.7 -0.1685 -0.2916 -0.1249 -0.2258 -0.1669 -0.1648 -0.2479 -0.1486 -0.1430
x.8 0.0160 0.0552 0.1128 -0.0801 -0.1014 -0.0339 -0.1915 -0.1094 -0.0096
x.9 -0.2266 -0.1151 -0.1027 0.0352 -0.0368 -0.0768 0.0270 -0.1269 -0.0802
x.10 0.2389 0.1206 -0.1028 0.2882 0.1533 0.0325 0.0591 0.0788 0.0976
importance.best <- sort(model.list[[best.rmse$Model]]$variable.importance,
                        decreasing = TRUE)
barplot(importance.best, las = 2,
        main = paste("Variable Importance -", best.rmse$Model),
        ylab = "Permutation Importance", col = "steelblue")
Gambar 4.4 Variable importance model terbaik

Gambar 4.4 Variable importance model terbaik

top5      <- names(importance.best)[1:5]
top5.true <- all(top5 %in% paste0("x.", 1:5))
noise.max <- max(importance.best[paste0("x.", 6:10)])
signal.min <- min(importance.best[paste0("x.", 1:5)])
   Analisis variable importance dilakukan untuk mengetahui kontribusi masing-masing variabel prediktor dalam membantu model menghasilkan prediksi. Pengukuran menggunakan pendekatan permutation importance, yaitu dengan melihat perubahan tingkat kesalahan prediksi ketika nilai suatu variabel diacak. Semakin besar nilai kepentingan suatu variabel, semakin besar pula peran variabel tersebut dalam proses prediksi model. Berdasarkan hasil pada Tabel 4.4 dan Gambar 4.4, lima variabel dengan tingkat kepentingan tertinggi pada model terbaik secara berurutan adalah r paste(top5, collapse = ", "). Hasil tersebut menunjukkan bahwa setiap variabel memiliki kontribusi yang berbeda dalam menjelaskan variabel respons.

   Pada data simulasi Friedman, variabel x.1 hingga x.5 merupakan variabel yang digunakan dalam pembentukan respons, sedangkan x.6 hingga x.10 berperan sebagai variabel tambahan yang tidak memiliki kontribusi langsung terhadap pembentukan respons. Hasil analisis menunjukkan bahwa nilai kepentingan tertinggi dari kelompok variabel tambahan adalah r round(noise.max, 4), sedangkan nilai kepentingan terendah dari kelompok variabel yang relevan sebesar r round(signal.min, 4). Perbandingan tersebut dapat digunakan untuk melihat sejauh mana Random Forest mampu membedakan variabel yang berpengaruh terhadap respons dengan variabel yang tidak memberikan informasi langsung. Selain itu, Tabel 4.4 memungkinkan pengamatan terhadap perubahan tingkat kepentingan variabel pada sembilan konfigurasi model yang berbeda.

4.10 Pembahasan Model Terbaik

terbaik <- eval.tbl[which.min(eval.tbl$RMSE), ]
kable(cbind(terbaik[, 1:3], round(terbaik[, 4:8], 4)),
      caption = "Tabel 4.5 Model terbaik berdasarkan RMSE data testing", row.names = FALSE)
Tabel 4.5 Model terbaik berdasarkan RMSE data testing
Model mtry num.trees OOB_MSE MSE RMSE MAE R_Square
mtry=5, trees=1000 5 1000 6.826 7.1925 2.6819 2.2054 0.6999
   Berdasarkan keseluruhan proses pemodelan dan evaluasi, diperoleh model Random Forest terbaik berdasarkan nilai RMSE terkecil, yaitu r terbaik$Model. Model tersebut menghasilkan OOB MSE sebesar r round(terbaik$OOB_MSE, 4), MSE testing sebesar r round(terbaik$MSE, 4), RMSE sebesar r round(terbaik$RMSE, 4), MAE sebesar r round(terbaik$MAE, 4), serta R-square sebesar r round(terbaik$R_Square, 4). Hasil tersebut menunjukkan bahwa kombinasi parameter yang digunakan pada model terpilih memberikan tingkat kesalahan prediksi paling rendah berdasarkan ukuran RMSE dibandingkan delapan model lainnya. Adapun selisih antara MSE testing dan OOB MSE adalah r round(abs(terbaik$MSE - terbaik$OOB_MSE), 4). Perbedaan tersebut dapat terjadi karena kedua ukuran diperoleh melalui mekanisme evaluasi dan kumpulan observasi yang berbeda.

   Pemilihan parameter mtry dan num.trees menjadi bagian penting dalam memperoleh model yang sesuai dengan karakteristik data. Parameter mtry menentukan banyaknya variabel prediktor yang dipertimbangkan ketika pohon membentuk percabangan, sedangkan num.trees mengatur jumlah pohon yang digabungkan dalam proses prediksi. Penggunaan mtry yang berbeda dapat memengaruhi keragaman pohon yang terbentuk, sementara penambahan jumlah pohon dapat membantu menstabilkan hasil prediksi. Berdasarkan hasil praktikum, kombinasi kedua parameter tersebut perlu dipertimbangkan secara bersamaan karena jumlah pohon yang lebih banyak tidak selalu menjamin kesalahan prediksi paling rendah. Dengan demikian, model yang dipilih berdasarkan RMSE terkecil merupakan konfigurasi yang paling sesuai di antara sembilan model yang diuji pada data simulasi Friedman.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

   Random Forest dan Double Random Forest merupakan metode ensemble learning yang memanfaatkan gabungan beberapa decision tree untuk menghasilkan prediksi yang lebih baik. Random Forest membangun banyak pohon keputusan menggunakan sampel data dan pemilihan variabel secara acak, sedangkan Double Random Forest mengembangkan pendekatan Random Forest melalui dua tahap pembentukan model untuk meningkatkan kemampuan prediksi.

   Implementasi Random Forest dan Double Random Forest dapat dilakukan menggunakan bahasa pemrograman R dengan menyesuaikan jenis permasalahan yang dianalisis. Pada klasifikasi, model digunakan untuk memprediksi kategori atau kelas suatu objek, sedangkan pada regresi digunakan untuk memperkirakan nilai numerik. Penerapan kedua metode dilakukan melalui pembentukan model, pengaturan parameter, proses prediksi, dan pengujian menggunakan data testing.

   Evaluasi performa model dilakukan menggunakan ukuran yang sesuai dengan jenis analisis, seperti accuracy, precision, recall, dan F1-score untuk klasifikasi, serta MSE, RMSE, MAE, dan R-square untuk regresi. Selain itu, OOB error digunakan untuk mengukur kesalahan prediksi berdasarkan data yang tidak digunakan dalam pembentukan masing-masing pohon. Hasil evaluasi tersebut dapat digunakan untuk membandingkan Random Forest dan Double Random Forest dalam menentukan metode yang memberikan performa prediksi lebih baik.

   Berdasarkan hasil praktikum yang telah dilakukan, dapat disimpulkan bahwa metode Random Forest Regression dapat diterapkan untuk memodelkan hubungan antara variabel prediktor dan variabel respons pada data simulasi Friedman. Pengujian terhadap sembilan kombinasi parameter mtry dan num.trees menunjukkan bahwa setiap konfigurasi menghasilkan tingkat akurasi yang berbeda. Model terbaik dipilih berdasarkan nilai RMSE terkecil pada data testing, dengan mempertimbangkan nilai MSE, MAE, dan R-square sebagai ukuran evaluasi tambahan. Selain itu, analisis residual digunakan untuk mengamati pola kesalahan prediksi, sedangkan variable importance membantu mengidentifikasi variabel yang memberikan kontribusi terbesar terhadap hasil pemodelan. Dengan demikian, pemilihan kombinasi parameter yang tepat berperan penting dalam memperoleh model Random Forest yang memiliki kemampuan prediksi lebih baik.

5.2 Saran

   Dalam membuat laporan praktikum ini penulis menyarankan untuk selalu memperhatikan sintaks pada program R yang digunakan. Selain itu, perlu untuk memperhatikan tata cara penulisan yang sesuai dengan KBBI dan penulisan yang bercetak tebal. Sehingga dapat menghasilkan laporan yang baik.

DAFTAR PUSTAKA

Aldania, A. N. A., Soleh, A. M., & Notodiputro, K. A. (2023). A comparative study of CatBoost and Double Random Forest for multi-class classification. Jurnal RESTI (Rekayasa Sistem dan Teknologi Informasi), 7(1), 129–137.

Darwanto, A. R. S., Viarindita, T. L., & Widyaningsih, Y. (2021). Analisis regresi logistik binomial dan algoritma Random Forest pada proses pengklasifikasian penyakit ginjal kronis. Jurnal Statistika dan Aplikasinya, 5(1), 1–14.

Dhani, A. A., Siswa, T. A. Y., & Pranoto, W. J. (2024). Perbaikan akurasi Random Forest dengan ANOVA dan SMOTE pada klasifikasi data stunting. Teknika, 13(2), 264–272.

Diba, F., Lydia, M. S., & Sihombing, P. (2023). Analisis Random Forest menggunakan Principal Component Analysis pada data berdimensi tinggi. The Indonesian Journal of Computer Science, 12(4), 2152–2160.

Fauziah, A., & Hernadi, J. (2024). Klasifikasi data tak seimbang menggunakan algoritma Random Forest dengan SMOTE dan SMOTE-ENN (Studi kasus pada data stunting). Teknomatika: Jurnal Informatika dan Komputer, 17(2), 38–47.

Firmansah, N., Indahyanti, U., & Eviyanti, A. (2024). Prediksi kelayakan pemberian kredit menggunakan metode Random Forest. Jurnal Ilmiah Komputasi, 22(4), 605–610.

Fransiska, H. (2026). Modul praktikum machine learning. Universitas Bengkulu.

Khairunnisa, A., Notodiputro, K. A., & Sartono, B. (2024). A comparative study of Random Forest and Double Random Forest models from view points of their interpretability. Scientific Journal of Informatics, 11(1).

Mutoffar, M. M., Naseer, M., & Fadillah, A. (2022). Klasifikasi kualitas air sumur menggunakan algoritma Random Forest. Naratif: Jurnal Nasional Riset, Aplikasi dan Teknik Informatika, 4(2).

Purwanto, A., Sartono, B., & Notodiputro, K. A. (2025). A comparison of Random Forest and Double Random Forest: Dropout rates of madrasah students in Indonesia. BAREKENG: Jurnal Ilmu Matematika dan Terapan, 19(1), 227–236.

Ratnasari, A. P., Susetyo, B., & Notodiputro, K. A. (2023). Comparison of Double Random Forest and Long Short-Term Memory methods for analyzing economic indicator data. BAREKENG: Journal of Mathematics and Its Applications, 17(2), 757–766.

Zikri, M., Riana, F., & Laxmi, G. F. (2024). Perbandingan metode Long Short-Term Memory dan Double Random Forest dalam prediksi harga penutupan saham. Krea-TIF: Jurnal Teknik Informatika, 12(1), 44–54.