BAB I PENDAHULUAN

1.1 Latar Belakang

Metode Random Forest (RF) merupakan metode pembelajaran mesin yang termasuk dalam kelompok ensemble learning dengan menggabungkan sejumlah pohon keputusan untuk menghasilkan prediksi. Metode RF membangun setiap pohon menggunakan sampel bootstrap yang diambil secara acak dari data pelatihan. Metode ini juga memilih sebagian variabel prediktor secara acak pada setiap proses pemisahan simpul untuk menghasilkan pohon yang beragam. Hasil prediksi seluruh pohon digabungkan melalui mekanisme suara terbanyak pada klasifikasi dan nilai rata-rata pada regresi. Penggabungan tersebut membantu mengurangi varians model dan meningkatkan kestabilan hasil prediksi (Pargent dkk., 2023).

Metode Double Random Forest (DRF) merupakan pengembangan metode RF yang bertujuan mengatasi kondisi underfitting akibat ukuran pohon keputusan yang belum cukup besar. Metode DRF menggunakan seluruh data pelatihan untuk membangun setiap pohon keputusan, sedangkan pengambilan sampel bootstrap dilakukan pada setiap simpul untuk menentukan aturan pemisahan. Metode ini juga memilih sebagian variabel prediktor secara acak pada setiap simpul. Mekanisme tersebut memungkinkan pembentukan pohon yang lebih besar dan beragam sehingga dapat mengurangi bias prediksi ketika model RF mengalami underfitting (Purwanto dkk., 2025).

Program R dapat digunakan untuk menerapkan metode Random Forest (RF) dan Double Random Forest (DRF) dalam pemodelan klasifikasi. Kedua metode tersebut membentuk sejumlah pohon keputusan yang menghasilkan prediksi berdasarkan karakteristik variabel prediktor. Metode RF menggunakan teknik bootstrap sampling pada pembentukan setiap pohon, sedangkan DRF menggunakan seluruh data pelatihan pada simpul akar dan menerapkan bootstrap sampling pada setiap simpul untuk menentukan pemisahan pohon. Kedua metode menghasilkan prediksi akhir melalui penggabungan hasil klasifikasi seluruh pohon menggunakan mekanisme suara terbanyak. Penerapan kedua metode memungkinkan perbandingan kemampuan klasifikasi berdasarkan ukuran evaluasi model (Rais dkk., 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 dapat memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
  2. Mahasiswa dapat mengimplementasikan Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi.
  3. Mahasiswa dapat mengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest.

1.4 Manfaat Penelitian

Adapun manfaat yang diperoleh dari penelitian ini adalah sebagai berikut:

  1. Bagi Penulis

    1. Menambah pengetahuan dan pemahaman mengenai metode Random Forest dan Double Random Forest sebagai metode ensemble learning untuk klasifikasi.

    2. Meningkatkan kemampuan dalam menerapkan metode Random Forest dan Double Random Forest menggunakan program R serta mengevaluasi dan membandingkan kinerja kedua metode berdasarkan ukuran evaluasi klasifikasi.

  2. Bagi Pembaca

    1. Menambah wawasan mengenai konsep, mekanisme, dan penerapan metode Random Forest dan Double Random Forest dalam permasalahan klasifikasi.

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

1.6 Sistematika Penulisan

Adapun sistematika penulisan dari praktikum ini adalah sebagai berikut:

BAB I PENDAHULUAN

Bab ini merupakan bab yang memuat latar belakang penelitian, rumusan masalah, tujuan dan manfaat penelitian, batasan masalah penelitian, dan sistematika penelitian.

BAB II TINJAUAN PUSTAKA

Bab ini merupakan bab yang memuat pengertian dari teori yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.

BAB III METODE PENELITIAN

Bab ini merupakan bab yang memuat uraian mengenai jenis dan sumber penelitian, variabel penelitian, dan analisis data.

BAB IV HASIL DAN PEMBAHASAN

Bab ini merupakan bab yang memuat hasil analisis, pembahasan dari hasil yang telah diperoleh, dan interpretasi.

BAB V KESIMPULAN DAN SARAN

Bab ini merupakan bab yang memuat rangkuman dari hasil keseluruhan dan saran yang diberikan oleh penulis terhadap hasil maupun analisis yang telah dilakukan.

DAFTAR PUSTAKA

BAB II TINJAUAN PUSTAKA

2.1 Random Forest

Metode Random Forest merupakan metode pembelajaran mesin yang termasuk dalam kelompok ensemble learning. Metode ini menggabungkan sejumlah pohon keputusan (decision tree) untuk menghasilkan prediksi yang lebih stabil. Setiap pohon dibangun menggunakan sampel bootstrap yang diambil secara acak dari data pelatihan. Hasil prediksi seluruh pohon kemudian digabungkan menggunakan nilai modus untuk klasifikasi dan nilai rata-rata untuk regresi. Penggabungan tersebut bertujuan mengurangi varians dan meningkatkan kemampuan prediksi model (Pargent dkk., 2023).

Metode Random Forest menerapkan dua mekanisme pengacakan dalam pembentukan pohon keputusan. Mekanisme pertama menggunakan pengambilan sampel bootstrap untuk membentuk kumpulan data pada setiap pohon. Mekanisme kedua memilih sejumlah variabel prediktor secara acak pada setiap pemisahan simpul. Pemilihan variabel secara acak mengurangi kemiripan antarpohon sehingga setiap pohon dapat menghasilkan pola prediksi yang berbeda. Proses tersebut membantu meningkatkan efektivitas penggabungan prediksi dan kemampuan generalisasi model (Scornet & Hooker, 2026).

Proses pembentukan pohon keputusan pada metode Random Forest menggunakan kriteria tertentu untuk menentukan pemisahan simpul. Kriteria indeks Gini mengukur tingkat ketidakmurnian kelas pada setiap simpul berdasarkan proporsi anggota kelas. Nilai indeks Gini yang lebih kecil menunjukkan tingkat kemurnian kelas yang lebih tinggi. Metode Random Forest memilih pemisahan variabel yang menghasilkan penurunan ketidakmurnian terbesar. Model ini juga menyediakan ukuran kepentingan variabel (variable importance) untuk mengetahui kontribusi setiap variabel prediktor terhadap hasil klasifikasi (Chen dkk., 2024).

Misalkan tersedia data latih yang akan digunakan untuk membentuk sebanyak \(B\) pohon keputusan (tree). Secara sederhana, proses pembentukan Random Forest dilakukan melalui tahapan berikut (Fransiska, 2026).

  1. Mengambil sampel bootstrap dari data latih untuk membentuk data bagi pohon ke-\(b\).

  2. Memilih sebanyak \(mtry\) prediktor secara acak dari seluruh \(p\) prediktor pada setiap simpul (node).

  3. Menentukan pemisahan terbaik (best split) berdasarkan prediktor yang terpilih.

  4. Menumbuhkan pohon keputusan hingga memenuhi aturan penghentian, misalnya ukuran minimum simpul (minimum node size).

  5. Mengulangi proses tersebut hingga diperoleh sebanyak \(B\) pohon, kemudian menggabungkan seluruh hasil prediksi pohon.

Untuk kasus klasifikasi, hasil akhir diperoleh melalui mekanisme suara terbanyak (majority voting), yang dirumuskan sebagai berikut:

\[ \hat{G}_{RF}(x) = \operatorname{mode}\{G_1(x), G_2(x), \ldots, G_B(x)\} \]

Untuk kasus regresi, hasil akhir diperoleh dengan merata-ratakan prediksi seluruh pohon, yang dirumuskan sebagai berikut:

\[ \hat{f}_{RF}(x) = \frac{1}{B}\sum_{b=1}^{B} T_b(x) \]

Metode Random Forest termasuk dalam parallel ensemble karena setiap pohon keputusan dibangun secara relatif independen. Karakteristik tersebut membedakan Random Forest dari metode Boosting yang membangun model secara berurutan (sequential).

2.2 Double Random Forest

Double Random Forest (DRF) merupakan pengembangan dari metode Random Forest yang bertujuan mengatasi keterbatasan model Random Forest, khususnya kondisi underfitting. Kondisi underfitting terjadi ketika model tidak mampu mempelajari pola data secara memadai sehingga hubungan antara variabel prediktor dan variabel respons belum dapat direpresentasikan dengan baik. DRF menggunakan mekanisme pembentukan pohon keputusan yang berbeda dari Random Forest, terutama pada proses pengambilan sampel untuk menentukan pemisahan pada setiap simpul (node). Dalam DRF, seluruh data pelatihan digunakan dalam pembentukan pohon, sedangkan pengacakan dilakukan pada setiap simpul untuk menentukan pemisahan data. Mekanisme tersebut memungkinkan terbentuknya pohon yang lebih besar dibandingkan Random Forest pada kondisi tertentu (Purwanto et al., 2025).

Secara sederhana, proses Double Random Forest dilakukan melalui tahapan berikut (Fransiska, 2026).

  1. Memulai setiap tree dengan seluruh data pelatihan (training data), bukan satu sampel bootstrap untuk seluruh pohon.
  2. Mengambil sampel bootstrap dari observasi yang mencapai simpul (node) yang sedang diproses.
  3. Memilih sebanyak \(mtry\) prediktor secara acak dan mencari pemisahan terbaik (best split) menggunakan sampel bootstrap pada simpul tersebut.
  4. Menerapkan pemisahan terbaik pada data asli yang mencapai simpul, kemudian mengirimkan observasi ke simpul anak (child nodes).
  5. Mengulangi proses pada simpul berikutnya hingga aturan penghentian tercapai, kemudian mengulangi tahapan tersebut untuk seluruh pohon.
  6. Menggabungkan prediksi seluruh pohon. Pada klasifikasi, hasil akhir diperoleh melalui suara terbanyak (majority voting), sedangkan pada regresi, prediksi akhir diperoleh dengan merata-ratakan prediksi seluruh pohon.

2.3 Out-of-Bag (OOB) Error

Pada proses pengambilan sampel bootstrap (bootstrap sampling), sampel berukuran \(n\) diambil dengan pengembalian (with replacement) dari \(n\) observasi data latih. Proses tersebut memungkinkan beberapa observasi terambil lebih dari satu kali, sedangkan sebagian observasi lainnya tidak terambil sama sekali. Secara rata-rata, proporsi observasi unik yang masuk ke dalam satu sampel bootstrap mendekati 63,2%, yang diperoleh melalui perhitungan berikut:

\[ 1-e^{-1} \]

Dengan demikian, sekitar 36,8% observasi tidak digunakan dalam pembentukan pohon tertentu. Observasi yang tidak terambil tersebut disebut Out-of-Bag (OOB) observations (Fransiska, 2026).

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_1\) sampai \(X_{10}\). Variabel \(X_1\) sampai \(X_5\) memiliki hubungan dengan variabel respons, sedangkan \(X_6\) sampai \(X_{10}\) 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:

Berikut adalah algoritma untuk menyelesaikan batasan masalah.

  1. Membangkitkan dataset Friedman #1 sebanyak 200 pengamatan.
  2. Memeriksa struktur dan kelengkapan data.
  3. Membagi data menjadi 70% data pelatihan dan 30% data pengujian.
  4. Menentukan kombinasi parameter mtry dan num.trees.
  5. Membangun sembilan model Random Forest Regression menggunakan fungsi ranger().
  6. Mengevaluasi setiap model berdasarkan OOB MSE dan OOB \(R^2\).
  7. Melakukan prediksi dan menghitung MSE, RMSE, MAE, serta \(R^2\) pada data pengujian.
  8. Membandingkan kinerja dan menentukan model terbaik berdasarkan MSE terkecil.
  9. Memperoleh hasil prediksi dan residual dari model terbaik.
  10. Membuat visualisasi hasil prediksi, residual plot, dan variable importance.
  11. Menyajikan hasil analisis dan menarik kesimpulan.
  12. Selesai.

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

Intepretasi Hasil 4.1

Berdasarkan hasil pembentukan dataset menggunakan fungsi mlbench.friedman1() dengan 200 pengamatan, diperoleh data sebanyak 200 baris dan 11 kolom. Dataset tersebut terdiri atas 10 variabel prediktor, yaitu x.1 hingga x.10, serta satu variabel respons, yaitu y. Hasil pemeriksaan struktur data menunjukkan bahwa seluruh variabel bertipe numerik (numeric). Ringkasan statistik menunjukkan bahwa variabel prediktor memiliki nilai minimum dan maksimum pada rentang 0 hingga 1, sedangkan variabel respon y memiliki nilai minimum sebesar 3,082, maksimum sebesar 26,146, dan rata-rata sebesar 14,270. Hasil tersebut menunjukkan bahwa dataset berhasil dibentuk dan memiliki struktur yang sesuai untuk analisis Random Forest Regression.

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, ]

# Melihat dimensi data
dim(reg.train)
## [1] 140  11
dim(reg.test)
## [1] 60 11

Intepretasi Hasil 4.2

Pembagian data dilakukan dengan proporsi 70% untuk data pelatihan (training) dan 30% untuk data pengujian (testing). Hasil pembagian menunjukkan bahwa data pelatihan terdiri atas 140 pengamatan dan 11 variabel, sedangkan data pengujian terdiri atas 60 pengamatan dan 11 variabel. Data pelatihan digunakan untuk membangun model Random Forest Regression, sedangkan data pengujian digunakan untuk mengevaluasi kemampuan prediksi model terhadap data yang tidak digunakan selama proses pelatihan.

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

Intepretasi Hasil 4.3

Pembentukan sembilan model Random Forest Regression dilakukan dengan mengombinasikan tiga nilai mtry, yaitu 2, 3, dan 5, serta tiga jumlah pohon (num.trees), yaitu 200, 500, dan 1.000. Hasil ringkasan salah satu model dengan mtry = 3 dan num.trees = 500 menunjukkan bahwa model dibangun menggunakan 140 pengamatan dan 10 variabel prediktor. Model tersebut menghasilkan nilai OOB MSE sebesar 7,4424 dan OOB \(R^2\) sebesar 0,7198. Nilai OOB MSE menunjukkan besarnya rata-rata kuadrat kesalahan prediksi, sedangkan OOB \(R^2\) sebesar 0,7198 menunjukkan bahwa model mampu menjelaskan sekitar 71,98% variasi pada variabel respons berdasarkan prediksi OOB. Hasil tersebut menunjukkan bahwa model telah mampu menangkap sebagian besar pola data, meskipun masih terdapat sekitar 28,02% variasi yang belum dapat dijelaskan oleh model.

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), ]
oob.best
##   mtry num.trees OOB_MSE    OOB_R2
## 9    5      1000 6.82596 0.7430173

Intepretasi Hasil 4.4

Berdasarkan Tabel 4.1, hasil evaluasi internal menunjukkan bahwa nilai OOB MSE dan OOB \(R^2\) berbeda pada setiap kombinasi parameter. Model dengan mtry = 5 secara konsisten menghasilkan OOB MSE lebih rendah dan OOB \(R^2\) lebih tinggi dibandingkan kombinasi mtry lainnya. Model terbaik berdasarkan OOB MSE terkecil diperoleh pada kombinasi mtry = 5 dan num.trees = 1000, dengan nilai OOB MSE sebesar 6,8260 dan OOB \(R^2\) sebesar 0,7430. Nilai tersebut menunjukkan bahwa model mampu menjelaskan sekitar 74,30% variasi variabel respons berdasarkan prediksi OOB. Hasil ini menunjukkan bahwa kombinasi lima prediktor pada setiap simpul dan 1.000 pohon memberikan kinerja evaluasi internal terbaik di antara sembilan model yang dibentuk.

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.mtry
##        2        3        5 
## 2.838067 2.794024 2.722189
rmse.trees <- tapply(eval.tbl$RMSE, eval.tbl$num.trees, mean)
rmse.trees
##      200      500     1000 
## 2.789430 2.791511 2.773339

Intepretasi Hasil 4.5

Berdasarkan Tabel 4.2, hasil prediksi model dengan mtry = 3 dan num.trees = 500 menunjukkan adanya perbedaan antara nilai aktual dan prediksi pada setiap pengamatan. Perbedaan tersebut tercermin pada nilai residual yang menunjukkan besarnya kesalahan prediksi model. Berdasarkan Tabel 4.3, model terbaik pada data pengujian diperoleh dari kombinasi mtry = 5 dan num.trees = 1000, dengan nilai MSE sebesar 7,1925, RMSE sebesar 2,6819, MAE sebesar 2,2054, dan \(R^2\) sebesar 0,6999. Model tersebut menghasilkan nilai galat paling rendah dan \(R^2\) paling tinggi dibandingkan delapan model lainnya. Hasil perbandingan rata-rata RMSE menunjukkan bahwa nilai terendah diperoleh pada mtry = 5, yaitu 2,7222, sedangkan berdasarkan jumlah pohon, nilai terendah diperoleh pada 1.000 pohon, yaitu 2,7733. Hasil tersebut menunjukkan bahwa penggunaan lima prediktor pada setiap simpul dan 1.000 pohon menghasilkan kinerja prediksi terbaik pada data pengujian.

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,
       col = "#2878B5",
       xlab = "Nilai Aktual",
       ylab = "Nilai Prediksi",
       main = grid$Model[i],
       cex.main = 0.9,
       cex = 0.8)

  abline(a = 0, b = 1,
         col = "#D9534F",
         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))

Intepretasi Hasil 4.6

Berdasarkan grafik diagnostik residual dari sembilan model Random Forest dengan variasi parameter mtry dan num.trees, terlihat bahwa sebagian besar titik residual tersebar di sekitar garis horizontal nol tanpa membentuk pola tertentu. Hal ini menunjukkan bahwa residual cenderung menyebar secara acak terhadap nilai prediksi, sehingga tidak terlihat adanya pola sistematis yang kuat pada kesalahan prediksi. Selain itu, pola penyebaran residual pada setiap model relatif serupa, baik dengan jumlah pohon 200, 500, maupun 1.000. Meskipun demikian, masih terdapat beberapa titik residual yang menyimpang dari garis nol. Secara keseluruhan, grafik menunjukkan bahwa kesalahan prediksi pada model relatif tersebar secara acak dan tidak menunjukkan pola tertentu, sehingga model Random Forest dapat dikatakan mampu menangkap pola hubungan antara variabel prediktor dan variabel respons dengan cukup baik.

4.7 Residual Plot Seluruh Model

par(
  mfrow = c(3, 3),
  mar = c(4.2, 4.2, 3, 1),
  oma = c(0, 0, 1, 0),
  bg = "white"
)

for (i in seq_len(nrow(grid))) {

  res <- actual.reg - pred.list[[i]]

  plot(
    pred.list[[i]], res,
    pch = 21,
    bg = adjustcolor("#65B3A5", alpha.f = 0.75),
    col = "#287C75",
    cex = 1.1,
    xlab = "Nilai Prediksi",
    ylab = "Residual",
    main = grid$Model[i],
    cex.main = 0.95,
    cex.lab = 0.9,
    cex.axis = 0.85,
    col.lab = "#333333",
    col.axis = "#444444",
    bty = "l",
    las = 1
  )

  abline(
    h = 0,
    col = "#B05A83",
    lty = 2,
    lwd = 2
  )

  grid(col = "#EAEAEA", lty = 1)
}
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)

Intepretasi Hasil 4.7

Berdasarkan grafik diagnostik residual dari sembilan model Random Forest dengan variasi parameter mtry dan num.trees, terlihat bahwa sebagian besar titik residual tersebar di sekitar garis horizontal nol tanpa membentuk pola tertentu. Hal ini menunjukkan bahwa residual cenderung menyebar secara acak terhadap nilai prediksi, sehingga tidak terlihat adanya pola sistematis yang kuat pada kesalahan prediksi. Selain itu, pola penyebaran residual pada setiap model relatif serupa, baik dengan jumlah pohon 200, 500, maupun 1.000. Meskipun demikian, masih terdapat beberapa titik residual yang menyimpang dari garis nol. Secara keseluruhan, grafik menunjukkan bahwa kesalahan prediksi pada model relatif tersebar secara acak dan tidak menunjukkan pola tertentu, sehingga model Random Forest dapat dikatakan mampu menangkap pola hubungan antara variabel prediktor dan variabel respons dengan cukup baik.

4.8 Grafik Perbandingan Performa Model

par(mfrow = c(1, 2), mar = c(9, 4, 3, 1))

# Grafik RMSE
barplot(
  eval.tbl$RMSE,
  names.arg = eval.tbl$Model,
  las = 2, col = colorRampPalette(c("#176B67", "#B9DED7"))(9),
  border = NA, cex.names = 0.65,
  main = "RMSE Data Testing",
  ylab = "RMSE",
  ylim = c(0, max(eval.tbl$RMSE) * 1.1)
)

# Grafik R-Square
barplot(
  eval.tbl$R_Square,
  names.arg = eval.tbl$Model,
  las = 2, col = colorRampPalette(c("#594477", "#D8CBEA"))(9),
  border = NA, cex.names = 0.65,
  main = "R-Square Data Testing",
  ylab = "R-Square",
  ylim = c(0, max(eval.tbl$R_Square) * 1.1)
)
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))

Intepretasi Hasil 4.8

Berdasarkan Gambar 4.3, perbandingan nilai RMSE dan \(R^2\) menunjukkan adanya perbedaan kinerja pada sembilan model Random Forest. Grafik RMSE memperlihatkan tingkat kesalahan prediksi setiap model, dengan nilai yang lebih rendah menunjukkan hasil prediksi yang lebih baik. Sebaliknya, grafik \(R^2\) menunjukkan kemampuan model dalam menjelaskan variasi variabel respons, dengan nilai yang lebih tinggi menunjukkan kemampuan penjelasan yang lebih baik. Kedua grafik tersebut digunakan untuk membandingkan kinerja model berdasarkan hasil prediksi pada data pengujian. Model dengan kombinasi mtry = 5 dan num.trees = 1000 memberikan kinerja terbaik karena menghasilkan RMSE terendah sebesar 2,6819 dan \(R^2\) tertinggi sebesar 0,6999.

4.9 Variable Importance

# Menghitung permutation importance seluruh model
imp.mat <- sapply(model.list, function(m) m$variable.importance)

# Menyusun tabel importance
tabel.importance <- data.frame(
  Variabel = rownames(imp.mat),
  round(imp.mat, 4),
  check.names = FALSE
)

kable(
  tabel.importance,
  caption = "Tabel 4.4 Perbandingan Permutation Importance pada Sembilan Model Random Forest"
)
Tabel 4.4 Perbandingan Permutation Importance pada Sembilan Model Random Forest
Variabel 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 x.1 7.0564 7.9614 9.4340 7.2812 8.1718 9.2110 7.3275 8.1834 9.3875
x.2 x.2 4.1035 3.4578 3.2554 3.9788 3.5563 3.4368 3.8267 3.5780 3.8211
x.3 x.3 2.6306 1.7999 1.6639 2.7030 2.2339 1.7405 2.5764 2.2834 1.8255
x.4 x.4 10.3007 10.9366 12.3287 9.5898 11.0137 12.7425 9.4642 10.9812 12.9314
x.5 x.5 1.4976 0.8012 0.8824 1.3159 1.0121 0.8821 1.2285 1.0931 0.9720
x.6 x.6 0.2439 -0.1421 0.2234 0.0871 -0.1326 0.1440 -0.0503 -0.1254 0.1000
x.7 x.7 -0.1685 -0.2916 -0.1249 -0.2258 -0.1669 -0.1648 -0.2479 -0.1486 -0.1430
x.8 x.8 0.0160 0.0552 0.1128 -0.0801 -0.1014 -0.0339 -0.1915 -0.1094 -0.0096
x.9 x.9 -0.2266 -0.1151 -0.1027 0.0352 -0.0368 -0.0768 0.0270 -0.1269 -0.0802
x.10 x.10 0.2389 0.1206 -0.1028 0.2882 0.1533 0.0325 0.0591 0.0788 0.0976
# Mengambil model dengan RMSE terkecil
importance.best <- model.list[[best.rmse$Model]]$variable.importance

# Mengurutkan variabel berdasarkan importance
importance.best <- sort(importance.best, decreasing = TRUE)

# Membuat grafik
barplot(
  rev(importance.best),
  horiz = TRUE,
  las = 1,
  col = colorRampPalette(c("#B9DED7", "#176B67"))(length(importance.best)),
  border = NA,
  main = paste("Variable Importance -", best.rmse$Model),
  xlab = "Permutation Importance",
  cex.names = 0.85
)

# Memisahkan variabel signal dan noise
signal <- paste0("x.", 1:5)
noise  <- paste0("x.", 6:10)

# Mengambil lima variabel dengan importance tertinggi
top5 <- head(names(importance.best), 5)

# Memeriksa apakah lima variabel teratas merupakan signal
top5.true <- all(top5 %in% signal)

# Menghitung nilai importance
nilai.signal <- importance.best[signal]
nilai.noise  <- importance.best[noise]

# Menyusun tabel hasil identifikasi
hasil.identifikasi <- data.frame(
  Keterangan = c(
    "Lima variabel dengan importance tertinggi",
    "Seluruh variabel top 5 merupakan signal",
    "Importance terendah variabel signal",
    "Importance tertinggi variabel noise"
  ),
  Hasil = c(
    paste(top5, collapse = ", "),
    ifelse(top5.true, "Ya", "Tidak"),
    round(min(nilai.signal), 4),
    round(max(nilai.noise), 4)
  )
)

kable(
  hasil.identifikasi,
  caption = "Tabel 4.5 Hasil Identifikasi Variabel Signal dan Noise"
)
Tabel 4.5 Hasil Identifikasi Variabel Signal dan Noise
Keterangan Hasil
Lima variabel dengan importance tertinggi x.4, x.1, x.2, x.3, x.5
Seluruh variabel top 5 merupakan signal Ya
Importance terendah variabel signal 0.972
Importance tertinggi variabel noise 0.1

Intepretasi Hasil 4.9

Berdasarkan Tabel 4.4 dan Tabel 4.5, hasil permutation importance menunjukkan bahwa variabel x.4 memiliki tingkat kepentingan tertinggi, diikuti oleh x.1, x.2, x.3, dan x.5 pada model Random Forest terbaik. Kelima variabel tersebut merupakan variabel signal yang digunakan dalam pembentukan respons pada data Friedman #1. Hasil identifikasi juga menunjukkan bahwa seluruh lima variabel dengan nilai importance tertinggi berasal dari kelompok signal. Nilai importance terendah pada variabel signal sebesar 0,972, sedangkan nilai tertinggi pada variabel noise hanya sebesar 0,1. Temuan ini menunjukkan bahwa model mampu membedakan variabel yang memberikan informasi terhadap variabel respons dari variabel yang tidak memiliki kontribusi berarti dalam proses prediksi.

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

Intepretasi Hasil 4.10

Berdasarkan Tabel 4.5, model terbaik berdasarkan nilai RMSE terkecil pada data testing diperoleh dari kombinasi parameter mtry = 5 dan num.trees = 1000. Model tersebut menghasilkan nilai OOB_MSE sebesar 6,826, MSE sebesar 7,1925, RMSE sebesar 2,6819, dan MAE sebesar 2,2054. Nilai R-Square sebesar 0,6999 menunjukkan bahwa model mampu menjelaskan 69,99% variasi pada variabel respons, sedangkan 30,01% sisanya dijelaskan oleh faktor lain di luar model. Hasil ini menunjukkan bahwa kombinasi parameter tersebut memberikan kinerja prediksi terbaik dibandingkan model lainnya berdasarkan nilai RMSE pada data testing.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

Random Forest dan Double Random Forest merupakan metode ensemble learning berbasis decision tree yang menggabungkan sejumlah pohon keputusan untuk menghasilkan prediksi yang lebih baik dibandingkan penggunaan satu pohon keputusan. Random Forest membangun banyak pohon menggunakan teknik bootstrap sampling terhadap data training. Pada setiap pemisahan node, sejumlah variabel prediktor dipilih secara acak sebagai kandidat pemisah berdasarkan parameter mtry. Hasil prediksi seluruh pohon kemudian digabungkan menggunakan majority voting untuk klasifikasi dan rata-rata untuk regresi. Sementara itu, Double Random Forest (DRF) menerapkan mekanisme pengambilan sampel secara acak pada setiap node dalam proses pembentukan pohon. Sampel bootstrap digunakan untuk menentukan pemisah terbaik, sedangkan observasi asli yang mencapai node tersebut diteruskan ke node berikutnya. Dengan demikian, perbedaan utama kedua metode terletak pada mekanisme bootstrap sampling yang digunakan dalam pembentukan pohon keputusan.

Implementasi Random Forest dan Double Random Forest untuk klasifikasi dan regresi dilakukan melalui beberapa tahapan, yaitu menyiapkan dataset, membagi data menjadi data training dan testing, membangun model, melakukan prediksi, serta mengevaluasi hasil prediksi. Pada klasifikasi, kedua metode digunakan untuk memprediksi variabel respons kategorik dengan menggabungkan hasil prediksi seluruh pohon berdasarkan suara mayoritas (majority voting). Sementara itu, pada regresi, kedua metode digunakan untuk memprediksi variabel respons numerik dengan menghitung rata-rata hasil prediksi seluruh pohon. Implementasi dapat dilakukan menggunakan bahasa pemrograman R dengan package yang sesuai, seperti ranger untuk Random Forest dan package yang menyediakan algoritma Double Random Forest. Parameter model disesuaikan dengan jenis data dan tujuan pemodelan.

Evaluasi performa model dilakukan menggunakan ukuran evaluasi yang disesuaikan dengan jenis permasalahan. Pada klasifikasi, evaluasi dapat menggunakan confusion matrix, akurasi, presisi, sensitivitas (recall), F1-score, dan OOB error. Sementara itu, pada regresi dapat menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). Out-of-Bag (OOB) merupakan observasi yang tidak terpilih dalam proses bootstrap sampling pada pembentukan suatu pohon. Secara rata-rata, sekitar 36,8% observasi tidak masuk ke dalam satu sampel bootstrap sehingga dapat digunakan untuk mengevaluasi prediksi pohon tersebut. Prediksi OOB diperoleh dari kumpulan pohon yang tidak menggunakan observasi bersangkutan dalam proses pembentukannya. Perbandingan Random Forest dan Double Random Forest dilakukan menggunakan dataset, pembagian data training dan testing, serta ukuran evaluasi yang sama. Metode terbaik ditentukan berdasarkan nilai kesalahan prediksi yang lebih kecil, nilai akurasi atau \(R^2\) yang lebih tinggi, serta mempertimbangkan hasil variable importance dan waktu komputasi.

Berdasarkan seluruh hasil analisis, dapat disimpulkan bahwa metode Random Forest mampu membangun model regresi dengan baik pada data simulasi Friedman1 yang terdiri atas 200 observasi, 10 variabel prediktor, dan 1 variabel respons. Dari sembilan kombinasi parameter yang diuji, model terbaik diperoleh pada kombinasi mtry = 5 dan num.trees = 1000 dengan nilai OOB_MSE sebesar 6,8260, OOB_R2 sebesar 0,7430, MSE sebesar 7,1925, dan RMSE sebesar 2,6819. Hasil visualisasi aktual dan prediksi menunjukkan bahwa sebagian besar nilai prediksi mengikuti pola nilai aktual, sedangkan grafik residual memperlihatkan penyebaran yang relatif acak di sekitar garis nol. Berdasarkan analisis variable importance dan Permutation Importance, variabel X4 merupakan variabel yang paling berpengaruh terhadap hasil prediksi, diikuti oleh X1 dan X2, sedangkan variabel lainnya memiliki tingkat kepentingan yang relatif lebih rendah. Dengan demikian, kombinasi parameter tersebut merupakan model Random Forest terbaik di antara model yang diuji karena menghasilkan kesalahan prediksi paling rendah dan kemampuan menjelaskan variasi variabel respons sebesar 74,30%.

5.2 Saran

Penulis menyarankan agar ketepatan sintaks program R selalu diperhatikan untuk menghindari kesalahan dalam proses analisis. Penggunaan bahasa perlu disesuaikan dengan kaidah KBBI. Aturan penulisan huruf tebal juga perlu diperhatikan agar laporan tersusun secara sistematis, rapi, dan sesuai dengan kaidah penulisan ilmiah.

DAFTAR PUSTAKA

Chen, Y., Cheung, K. C., Sun, R. Z., & Yam, S. C. P. (2024). A user guide of CART and random forests with applications in FinTech and InsurTech. Japanese Journal of Statistics and Data Science, 7(2), 999–1038.

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

Pargent, F., Schoedel, R., & Stachl, C. (2023). Best practices in supervised machine learning: A tutorial for psychologists. Advances in Methods and Practices in Psychological Science, 6(3).

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.

Rais, Soleh, A. M., & Susetyo, B. (2024). Rotation Double Random Forest algorithm to predict the food insecurity status of households. Jurnal RESTI (Rekayasa Sistem dan Teknologi Informasi), 8(1), 33–41.

Scornet, E., & Hooker, G. (2026). Theory of Random Forests. Annual Review of Statistics and Its Application, 13, 99–121.