BAB I PENDAHULUAN

1.1 Latar Belakang

Perkembangan metode machine learning memberikan berbagai pendekatan untuk menganalisis data dan membangun model prediksi berdasarkan pola hubungan antara variabel. Salah satu pendekatan yang dapat digunakan adalah ensemble learning, yaitu teknik yang menggabungkan beberapa model untuk menghasilkan prediksi yang lebih baik dibandingkan hanya menggunakan satu model. Decision tree menjadi salah satu model dasar yang dapat digunakan untuk menangani permasalahan klasifikasi maupun regresi. Random Forest merupakan metode ensemble learning yang membangun banyak pohon keputusan melalui pengambilan sampel bootstrap dan pemilihan prediktor secara acak pada setiap proses pemisahan simpul (node). Penggabungan hasil prediksi seluruh pohon dilakukan melalui majority voting pada klasifikasi dan perataan prediksi pada regresi sehingga dapat membantu mengurangi variansi model (Scornet dan Hooker, 2026).

Selain Random Forest, Double Random Forest merupakan metode yang mengembangkan mekanisme pembentukan pohon dengan memanfaatkan seluruh data latih untuk menumbuhkan setiap pohon, sedangkan pengambilan sampel bootstrap dilakukan pada setiap node untuk menentukan aturan pemisahan. Pendekatan tersebut membedakan Double Random Forest dari Random Forest standar yang menggunakan sampel bootstrap sebagai dasar pembentukan setiap pohon. Penggunaan seluruh data latih memungkinkan Double Random Forest membentuk pohon yang lebih besar, sementara pemilihan prediktor secara acak tetap digunakan untuk menghasilkan keragaman antarpohon. Meskipun demikian, proses pengambilan sampel pada setiap node dapat meningkatkan kebutuhan komputasi dibandingkan Random Forest standar. Oleh karena itu, pemahaman terhadap mekanisme kedua metode diperlukan agar karakteristik, kelebihan, dan keterbatasannya dapat dipahami secara tepat (Purwanto, Sartono, dan Notodiputro., 2025).

Penerapan Random Forest dan Double Random Forest perlu disertai evaluasi untuk mengetahui kemampuan model dalam menghasilkan prediksi yang sesuai dengan data aktual. Pada klasifikasi, evaluasi dapat dilakukan menggunakan accuracy, precision, recall, specificity, dan F1-score, sedangkan pada regresi dapat digunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). Selain itu, Out-of-Bag (OOB) error dapat dimanfaatkan sebagai ukuran evaluasi internal Random Forest dengan menggunakan observasi yang tidak terpilih dalam sampel bootstrap untuk pohon tertentu. Perbandingan hasil evaluasi kedua metode dapat membantu menentukan model yang lebih sesuai berdasarkan jenis permasalahan dan ukuran kinerja yang digunakan (Hu, 2023). Dengan demikian, praktikum ini bertujuan untuk memahami konsep Random Forest dan Double Random Forest, mengimplementasikannya untuk klasifikasi dan regresi menggunakan bahasa pemrograman R, serta mengevaluasi dan membandingkan kinerja kedua model.

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 didapatkan dari penelitian ini adalah sebagai berikut:

  1. Bagi penulis
    • Memberikan informasi dan pengetahuan mengenai Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
    • Menerapkan ilmu atau wawasan baru mengenai Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
  2. Bagi pembaca
    • Menambah ilmu pengetahuan mengenai Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
    • 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.

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 Machine Learning

Machine learning merupakan bagian dari kecerdasan buatan (artificial intelligence) yang memungkinkan komputer mempelajari pola dan hubungan dari data untuk menghasilkan prediksi atau mendukung pengambilan keputusan. Proses pembelajaran dilakukan dengan menggunakan algoritma yang dirancang untuk mengenali pola berdasarkan informasi yang tersedia dalam data. Model yang terbentuk kemudian dapat digunakan untuk memperkirakan nilai atau menentukan kategori dari suatu observasi baru. Secara umum,machine learning dapat dikelompokkan menjadi supervised learning, unsupervised learning, semi-supervised learning, dan reinforcement learning berdasarkan karakteristik data dan mekanisme pembelajarannya. Pemilihan metode perlu disesuaikan dengan tujuan analisis, jenis variabel, serta karakteristik permasalahan yang dihadapi (Sarker, 2021).

Dalam penerapannya, machine learning dapat digunakan untuk menyelesaikan permasalahan klasifikasi dan regresi. Klasifikasi bertujuan menentukan kelas atau kategori suatu observasi, sedangkan regresi digunakan untuk memperkirakan nilai variabel respons yang bersifat numerik. Salah satu pendekatan yang dapat digunakan untuk kedua permasalahan tersebut adalah ensemble learning, yaitu metode yang menggabungkan sejumlah model untuk menghasilkan prediksi akhir. Penggabungan model bertujuan memanfaatkan informasi dari beberapa model sehingga hasil prediksi dapat menjadi lebih stabil dan akurat. Salah satu algoritma ensemble learning yang banyak digunakan adalah Random Forest, yang menggabungkan sejumlah pohon keputusan dalam proses prediksi (James dkk., 2023).

2.2 Random Forest

Random Forest merupakan algoritma ensemble learning berbasis decision tree yang membentuk banyak pohon keputusan dan menggabungkan hasil prediksinya untuk memperoleh prediksi akhir. Pembentukan setiap pohon dilakukan menggunakan sampel bootstrap, yaitu pengambilan sampel secara acak dengan pengembalian dari data latih. Selain itu, algoritma ini menerapkan pemilihan prediktor secara acak pada setiap node sehingga tidak semua variabel prediktor dipertimbangkan secara bersamaan dalam menentukan pemisahan terbaik. Mekanisme tersebut bertujuan mengurangi korelasi antarpohon sekaligus mempertahankan keragaman model yang terbentuk. Dengan menggabungkan prediksi dari banyak pohon, Random Forest dapat digunakan untuk menangani permasalahan klasifikasi maupun regresi (James dkk., 2023). Seperti Bagging, Random Forest membentuk banyak pohon dari proses resampling dan kemudian menggabungkan hasil prediksinya. Perbedaannya, Random Forest menambahkan pengacakan pada pemilihan prediktor di setiap node. Dengan demikian, pohon-pohon dalam Random Forest tidak hanya dibangun dari sampel yang berbeda, tetapi juga tidak selalu mempertimbangkan prediktor yang sama ketika mencari split terbaik (Fransiska, 2026).

Pada analisis klasifikasi, prediksi akhir Random Forest ditentukan berdasarkan kelas yang memperoleh suara terbanyak atau majority voting dari seluruh pohon yang terbentuk. Sementara itu, pada analisis regresi, prediksi akhir diperoleh dengan menghitung rata-rata prediksi dari seluruh pohon keputusan. Kinerja model dapat dinilai menggunakan ukuran evaluasi yang disesuaikan dengan tujuan analisis, seperti accuracy, precision, recall, dan F1-score untuk klasifikasi, serta Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi untuk regresi. Selain evaluasi menggunakan data pengujian, Random Forest juga menyediakan Out-of-Bag (OOB) error yang memanfaatkan observasi yang tidak terpilih dalam sampel bootstrap untuk pohon tertentu. Dengan demikian, evaluasi model dapat digunakan untuk menilai kemampuan prediksi dan membantu menentukan konfigurasi parameter yang sesuai (Wright & Ziegler, 2023).

2.3 Double Random Forest

Double Random Forest (DRF) merupakan pengembangan dari metode Random Forest yang menggunakan mekanisme pengambilan sampel bootstrap pada setiap node dalam proses pembentukan pohon. Pada Random Forest standar, setiap pohon dibangun berdasarkan satu sampel bootstrap yang diambil dari keseluruhan data latih. Sebaliknya, DRF memulai pembentukan setiap pohon menggunakan seluruh data latih, sedangkan sampel bootstrap digunakan sementara pada setiap node untuk menentukan aturan pemisahan yang sesuai. Setelah aturan pemisahan diperoleh, aturan tersebut diterapkan pada observasi asli yang mencapai node tersebut sebelum proses pembentukan pohon dilanjutkan ke simpul berikutnya. Perbedaan mekanisme ini memungkinkan DRF menggunakan seluruh data latih dalam pertumbuhan setiap pohon sekaligus mempertahankan unsur pengacakan dalam penentuan pemisahan data (Purwanto dkk., 2025).

Pada penerapannya, DRF dapat digunakan untuk permasalahan klasifikasi maupun regresi dengan menggabungkan prediksi dari sejumlah pohon keputusan. Pada klasifikasi, prediksi akhir ditentukan melalui majority voting, sedangkan pada regresi digunakan rata-rata prediksi seluruh pohon. Penggunaan seluruh data latih dalam pertumbuhan pohon dapat memungkinkan terbentuknya pohon yang lebih besar, tetapi pengambilan sampel berulang pada setiap node juga dapat meningkatkan kebutuhan komputasi. Oleh karena itu, kinerja DRF perlu dievaluasi menggunakan ukuran yang sesuai dengan jenis permasalahan, seperti accuracy dan F1-score untuk klasifikasi serta MSE, RMSE, MAE, dan \(R^2\) untuk regresi. Perbandingan antara DRF dan Random Forest dapat dilakukan berdasarkan hasil evaluasi pada data pengujian untuk mengetahui metode yang memberikan kinerja prediksi lebih baik pada data yang dianalisis (Purwanto dkk., 2025).

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:

  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

Berdasarkan sintaks yang dijalankan, paket ranger, mlbench, caret, dan knitr digunakan untuk mendukung proses analisis regresi Random Forest. Fungsi set.seed(234) digunakan agar proses pembangkitan data dapat direproduksi. Selanjutnya, fungsi mlbench.friedman1(200) menghasilkan dataset sebanyak 200 observasi yang terdiri atas 10 variabel prediktor (x.1 sampai x.10) dan 1 variabel respons (y). Fungsi str() menunjukkan bahwa seluruh variabel bertipe numerik, sedangkan fungsi summary() menampilkan nilai minimum, kuartil pertama, median, rata-rata, kuartil ketiga, dan maksimum setiap variabel. Berdasarkan hasil tersebut, variabel respons y memiliki nilai minimum sebesar 3,082, maksimum sebesar 26,146, rata-rata sebesar 14,270, dan median sebesar 13,810. Sementara itu, fungsi dim() menghasilkan ukuran data sebesar 200 baris dan 11 kolom, sehingga dataset siap digunakan untuk tahap pembagian data latih dan data uji serta pembentukan model regresi Random Forest.

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

Berdasarkan sintaks yang dijalankan, fungsi createDataPartition() digunakan untuk membagi dataset menjadi data latih (training data) dan data uji (testing data) dengan proporsi 70% dan 30% berdasarkan variabel respons y. Fungsi set.seed(234) digunakan agar proses pembagian data dapat direproduksi. Hasil pembagian menunjukkan bahwa data latih terdiri atas 140 observasi dan 11 variabel, sedangkan data uji terdiri atas 60 observasi dan 11 variabel. Data latih digunakan untuk membentuk model regresi Random Forest, sementara data uji digunakan untuk mengevaluasi kemampuan model dalam memprediksi data yang tidak digunakan selama 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

Berdasarkan sintaks yang dijalankan, fungsi expand.grid() digunakan untuk membentuk kombinasi parameter mtry sebesar 2, 3, dan 5 serta jumlah pohon (num.trees) sebesar 200, 500, dan 1000, sehingga diperoleh sembilan kombinasi model. Selanjutnya, setiap kombinasi digunakan untuk membentuk model regresi Random Forest menggunakan fungsi ranger() dengan min.node.size sebesar 5 dan metode permutation untuk mengukur kepentingan variabel. Berdasarkan ringkasan model dengan mtry = 3 dan num.trees = 500, model dibentuk menggunakan 140 observasi data latih dan 10 variabel prediktor. Nilai Out-of-Bag Mean Squared Error (OOB MSE) sebesar 7,442423 menunjukkan besarnya rata-rata kesalahan prediksi kuadrat pada observasi OOB, sedangkan nilai \(R^2\) OOB sebesar 0,7198089 menunjukkan bahwa model mampu menjelaskan sekitar 71,98% variasi pada variabel respons berdasarkan evaluasi OOB. Dengan demikian, model tersebut memberikan gambaran kemampuan prediksi yang cukup baik, tetapi pemilihan model terbaik tetap perlu didasarkan pada perbandingan kinerja seluruh kombinasi parameter menggunakan data pengujian.

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

Berdasarkan Tabel 4.1, diperoleh hasil perbandingan nilai Out-of-Bag Mean Squared Error (OOB MSE) dan OOB \(R^2\) dari sembilan kombinasi parameter Random Forest. Hasil menunjukkan bahwa kombinasi mtry = 5 dan num.trees = 1000 menghasilkan nilai OOB MSE terendah sebesar 6,82596 dan nilai OOB \(R^2\) tertinggi sebesar 0,7430173. Nilai tersebut menunjukkan bahwa model mampu menjelaskan sekitar 74,30% variasi pada variabel respons, sedangkan nilai OOB MSE menunjukkan besarnya kesalahan prediksi kuadrat pada data Out-of-Bag. Dengan demikian, kombinasi mtry = 5 dan num.trees = 1000 merupakan model terbaik berdasarkan kedua kriteria tersebut di antara sembilan kombinasi parameter yang diuji.

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

Berdasarkan Tabel 4.2, ditampilkan sepuluh baris pertama hasil prediksi model Random Forest dengan kombinasi parameter mtry = 3 dan num.trees = 500 pada data testing. Hasil menunjukkan bahwa nilai prediksi tidak selalu sama dengan nilai aktual, sehingga menghasilkan residual yang bernilai positif maupun negatif. Residual positif menunjukkan bahwa nilai aktual lebih besar daripada nilai prediksi, sedangkan residual negatif menunjukkan bahwa nilai prediksi lebih besar daripada nilai aktual. Selanjutnya, berdasarkan Tabel 4.3, perbandingan performa sembilan model menunjukkan bahwa kombinasi mtry = 5 dan num.trees = 1000 menghasilkan nilai MSE sebesar 7,1925, RMSE sebesar 2,6819, dan MAE sebesar 2,2054, serta nilai \(R^2\) sebesar 0,6999. Model tersebut memiliki nilai RMSE dan MAE terendah serta nilai \(R^2\) tertinggi di antara sembilan model pada data testing, sehingga menjadi model terbaik berdasarkan ukuran evaluasi tersebut. Hasil ini menunjukkan bahwa model mampu menjelaskan sekitar 69,99% variasi variabel respons pada data testing.

Pengaruh mtry dapat dilihat dari rata-rata RMSE pada setiap nilai mtry, yaitu mtry = 2: 2.8381; mtry = 3: 2.794; mtry = 5: 2.7222. Pengaruh jumlah pohon dilihat dari rata-rata RMSE pada setiap num.trees, yaitu num.trees = 200: 2.7894; num.trees = 500: 2.7915; num.trees = 1000: 2.7733. Selisih RMSE terbesar antar nilai num.trees adalah 0.0182, sedangkan antar nilai mtry adalah 0.1159.

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

Garis putus-putus pada Gambar 4.1 adalah garis \(y = x\), yaitu kondisi ketika prediksi sama persis dengan nilai aktual. Semakin dekat titik-titik ke garis tersebut, semakin akurat prediksi model. Secara visual, hubungan antara nilai aktual dan prediksi tampak positif tetapi masih menyisakan sebaran yang cukup lebar di sekitar garis, sejalan dengan R-square pada Tabel 4.3 yang berkisar dari 0.6589 sampai 0.6999. Perlu diperhatikan bahwa RF cenderung menarik prediksi ke arah rata-rata sehingga nilai aktual yang sangat rendah atau sangat tinggi sering diprediksi kurang ekstrem.

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)

Pada model terbaik (mtry=5, trees=1000), diperoleh rata-rata residual sebesar -0.2726 dengan nilai korelasi antara prediksi dan residual sebesar 0.3411. Rata-rata residual yang mendekati nol mengindikasikan bahwa model tidak menunjukkan bias sistematis yang berarti. Selain itu, residual yang tersebar secara acak di sekitar garis nol tanpa membentuk pola tertentu, seperti lengkungan atau corong, menunjukkan bahwa model telah menangkap pola data dengan cukup baik. Apabila korelasi antara nilai prediksi dan residual bernilai negatif, kondisi tersebut dapat mencerminkan kecenderungan Random Forest dalam menarik hasil prediksi mendekati nilai rata-rata. Akibatnya, prediksi pada nilai rendah cenderung menghasilkan residual positif, sedangkan prediksi pada nilai tinggi cenderung menghasilkan residual negatif.

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 bahwa perbedaan antar kombinasi parameter relatif kecil. RMSE terendah sebesar 2.6819 dan RMSE tertinggi sebesar 2.8596.

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

Pada model terbaik, variabel dengan kepentingan tertinggi berturut-turut adalah x.4, x.1, x.2, x.3, x.5. Kelima variabel teratas tersebut tepat sama dengan variabel yang secara teori membentuk respons Friedman (x.1 sampai x.5), sehingga model berhasil mengenali variabel yang relevan. Variabel tambahan x.6 sampai x.10 memiliki kepentingan tertinggi sebesar 0.1, sedangkan variabel relevan dengan kepentingan terendah memiliki nilai 0.972. Pada data Friedman, \(Y = 10\sin(\pi X_1 X_2) + 20(X_3 - 0.5)^2 + 10X_4 + 5X_5 + \varepsilon\), sehingga variabel dengan koefisien dan kontribusi yang lebih besar secara teori diharapkan memiliki kepentingan yang lebih tinggi. Tabel 4.4 juga memperlihatkan apakah urutan kepentingan variabel stabil pada sembilan kombinasi parameter.

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 hasil evaluasi secara keseluruhan, model terbaik adalah mtry=5, trees=1000 dengan nilai OOB MSE sebesar 6.826, MSE testing sebesar 7.1925, RMSE sebesar 2.6819, MAE sebesar 2.2054, dan \(R^2\) sebesar 0.6999. Nilai OOB MSE dapat berbeda dari MSE testing karena OOB MSE dihitung menggunakan observasi out-of-bag pada data training, sedangkan MSE testing diperoleh dari 60 observasi yang tidak digunakan dalam proses pembentukan model. Perbedaan kedua nilai tersebut adalah sebesar 0.3665. Perbedaan ini dapat terjadi karena ukuran data testing yang relatif kecil menyebabkan hasil evaluasi lebih sensitif terhadap variasi sampel.

Parameter mtry menentukan banyaknya prediktor yang dipertimbangkan pada setiap proses pemisahan simpul. Nilai mtry yang kecil dapat meningkatkan keragaman antarpohon dan mengurangi korelasi di antara pohon, tetapi juga meningkatkan kemungkinan variabel penting tidak terpilih pada suatu pemisahan. Sebaliknya, nilai mtry yang besar memungkinkan lebih banyak prediktor dipertimbangkan sehingga pohon yang terbentuk cenderung lebih serupa. Pada penelitian ini, terdapat 10 variabel prediktor dan hanya 5 di antaranya yang relevan. Oleh karena itu, pengaruh mtry perlu dianalisis dengan mempertimbangkan rata-rata RMSE untuk setiap nilai mtry pada Bagian 4.5. Sementara itu, penambahan jumlah pohon melalui parameter num.trees umumnya membantu menstabilkan prediksi dan mengurangi varians hingga mencapai kondisi yang relatif stabil. Namun, penambahan jumlah pohon tidak selalu memperbaiki hasil secara signifikan karena peningkatan kinerja cenderung semakin kecil ketika jumlah pohon sudah cukup besar.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

Random Forest dan Double Random Forest merupakan metode ensemble learning yang menggabungkan sejumlah decision tree untuk menghasilkan prediksi yang lebih baik. Kedua metode tersebut memanfaatkan proses pengacakan dalam pembentukan pohon, tetapi memiliki mekanisme pembentukan model yang berbeda. Random Forest menggunakan sampel bootstrap dan pemilihan subset prediktor secara acak untuk membentuk pohon-pohon penyusun model. Sementara itu, Double Random Forest menerapkan mekanisme pengacakan tambahan dalam proses pembentukan pohon sesuai dengan prosedur metode tersebut. Pemahaman terhadap konsep dan mekanisme kedua metode ini menjadi dasar untuk menentukan penggunaannya dalam analisis data.

Implementasi Random Forest dan Double Random Forest dapat dilakukan untuk menyelesaikan permasalahan klasifikasi maupun regresi. Pada klasifikasi, model digunakan untuk memprediksi kategori atau kelas suatu observasi, sedangkan pada regresi model digunakan untuk memprediksi nilai numerik. Proses implementasi meliputi persiapan data, pembagian data menjadi data pelatihan dan pengujian, pembentukan model, serta penggunaan model untuk menghasilkan prediksi. Pengaturan parameter model perlu diperhatikan karena dapat memengaruhi proses pembentukan pohon dan hasil prediksi.

Evaluasi performa model diperlukan untuk mengetahui kemampuan model dalam menghasilkan prediksi yang akurat dan mengukur kesalahan prediksinya. Pada klasifikasi, evaluasi dapat menggunakan accuracy, precision, recall, F1-score, dan ukuran lain yang sesuai, sedangkan regresi dapat dievaluasi menggunakan MSE, RMSE, MAE, dan \(R^2\). Selain itu, Out-of-Bag (OOB) error dapat digunakan untuk memperkirakan kesalahan model melalui observasi yang tidak terpilih dalam sampel bootstrap pada pembentukan pohon tertentu. Perbandingan performa Random Forest dan Double Random Forest perlu didasarkan pada ukuran evaluasi yang sesuai dengan jenis permasalahan serta mempertimbangkan hasil pengujian pada data yang tidak digunakan dalam pelatihan.

Berdasarkan hasil batasan masalah dapat disimpulkan bahwa analisis Random Forest Regression dilakukan pada 200 observasi data Friedman, yang terdiri atas 140 observasi data training dan 60 observasi data testing. Dari sembilan kombinasi parameter mtry dan num.trees yang diuji, diperoleh model terbaik, yaitu mtry=5, trees=1000. Model tersebut memiliki nilai OOB MSE sebesar 6.826, sedangkan evaluasi pada data testing menghasilkan MSE sebesar 7.1925, RMSE sebesar 2.6819, MAE sebesar 2.2054, dan \(R^2\) sebesar 0.6999. Berdasarkan tingkat kepentingan variabel, prediktor yang paling berpengaruh adalah x.4, kemudian diikuti oleh x.1 dan x.2. Hasil tersebut juga menunjukkan bahwa lima variabel dengan tingkat kepentingan tertinggi sesuai dengan x.1 hingga x.5, yang merupakan variabel pembentuk respons pada data Friedman.

5.2 Saran

Praktikan dapat melakukan pembelajaran lebih lanjut mengenai Machine Learning and modern prediction serta cara interpretasinya agar semakin paham. Dapat dilakukan melalui sumber-sumber belajar lainnya. Dalam penulisan laporan praktikan juga diharapkan untuk selalu teliti dan memperhatikan tata cara penulisan yang baik. Penulis juga berharap kritik dan saran kepada pembaca dan asisten praktikum guna membuat laporan ini menjadi lebih baik.

DAFTAR PUSTAKA

Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu

Hu, J. (2023). A review on longitudinal data analysis with random forest. Briefings in Bioinformatics, 24(2), bbad002. https://doi.org/10.1093/bib/bbad002

James, G., Witten, D., Hastie, T., Tibshirani, R., & Taylor, J. (2023). An introduction to statistical learning: With applications in Python. Springer. https://doi.org/10.1007/978-3-031-38747-0

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: Journal of Mathematics and Its Applications, 19(1), 227–236. https://doi.org/10.30598/barekengvol19iss1pp0227-0236

Sarker, I. H. (2021). Machine learning: Algorithms, real-world applications and research directions. SN Computer Science, 2, Article 160. https://doi.org/10.1007/s42979-021-00592-x

Scornet, E., & Hooker, G. (2026). Theory of random forests. Annual Review of Statistics and Its Application, 13, 99–121. https://doi.org/10.1146/annurev-statistics-112723-034707

Wright, M. N., & Ziegler, A. (2023). ranger: A fast implementation of random forests. CRAN. https://cran.r-project.org/package=ranger