BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan teknologi informasi telah mendorong pemanfaatan data untuk mendukung proses analisis dan pengambilan keputusan. Salah satu metode yang digunakan dalam pengolahan data adalah machine learning, khususnya ensemble learning, yaitu metode yang menggabungkan sejumlah model untuk menghasilkan prediksi yang lebih baik. Salah satu algoritma dalam pendekatan tersebut adalah Random Forest. Menurut Breiman (2001), Random Forest merupakan metode ensemble yang terdiri atas kumpulan pohon keputusan (decision tree), dengan setiap pohon dibangun menggunakan unsur pengacakan pada data dan pemilihan fitur. Hasil prediksi dari kumpulan pohon tersebut kemudian digabungkan untuk memperoleh prediksi akhir. Metode ini dapat digunakan untuk permasalahan klasifikasi maupun regresi.

Selain Random Forest, terdapat metode pengembangan yang dikenal sebagai Double Random Forest. Menurut Khairunnisa dkk. (2024), Double Random Forest dikembangkan untuk mengatasi permasalahan underfitting yang dapat terjadi pada Random Forest, khususnya ketika pohon keputusan yang dihasilkan memiliki ukuran terlalu kecil. Perbedaan utama kedua metode terletak pada mekanisme pembentukan pohon keputusan dan penggunaan pengambilan sampel data dalam proses pembelajaran. Penelitian Purwanto dkk. (2025) juga membahas perbandingan Random Forest dan Double Random Forest dalam menganalisis angka putus sekolah siswa madrasah di Indonesia. Hal tersebut menunjukkan perlunya mengkaji kinerja kedua algoritma berdasarkan karakteristik data yang digunakan.

Perbedaan mekanisme pembelajaran antara Random Forest dan Double Random Forest dapat memengaruhi kemampuan model dalam menghasilkan prediksi. Oleh karena itu, diperlukan penelitian untuk membandingkan kinerja kedua algoritma tersebut. Pada permasalahan regresi, evaluasi kinerja model dapat dilakukan menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). Metrik tersebut digunakan untuk mengukur tingkat kesalahan prediksi serta kemampuan model dalam menjelaskan variasi data. Melalui perbandingan hasil evaluasi tersebut, dapat diketahui algoritma yang menghasilkan performa prediksi lebih baik sesuai dengan karakteristik data dan tujuan penelitian.

1.2 Rumusan Masalah

  1. Bagaimana cara memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree?
  2. Bagaimana cara megimplementasikan Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi?
  3. Bagaimana cara mengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest?

1.3 Tujuan

  1. Mahasiswa dapat memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
  2. Mahasiswa dapat megimplementasikan 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

BAB II TINJAUAN PUSTAKA

2.1 Random Forest

Random Forest merupakan algoritma machine learning berbasis ensemble learning yang menggabungkan sejumlah pohon keputusan (decision tree) untuk menghasilkan prediksi. Random Forest merupakan salah satu model yang digunakan dalam analisis klasifikasi dengan memanfaatkan proses pengacakan dalam pembentukan pohon-pohon keputusan. Pendekatan ini memungkinkan model mengatasi keterbatasan penggunaan satu pohon keputusan dan menghasilkan prediksi berdasarkan gabungan beberapa pohon (Khairunnisa, Notodiputro, dan Sartono, 2024).

Penggunaan Random Forest menghasilkan model prediksi yang mampu mengenali pola hubungan antara variabel prediktor dan variabel respons. Metode ini dapat digunakan untuk permasalahan klasifikasi maupun regresi. Pada klasifikasi, prediksi akhir ditentukan berdasarkan kelas yang memperoleh suara terbanyak dari seluruh pohon (majority voting), sedangkan pada regresi, prediksi akhir diperoleh dengan menghitung rata-rata hasil prediksi seluruh pohon keputusan (Siregar dkk., 2024).

Secara matematis, prediksi Random Forest untuk regresi dapat dirumuskan sebagai berikut (Fauzi, Soleh, dan Djuraidah, 2020): \[ \hat{f}{RF}(x) = \frac{1}{B}\sum{b=1}^{B}\hat{f}_b(x) \]

Keterangan:

  • \(\hat{f}_{RF}(x)\) adalah hasil prediksi Random Forest.
  • \(B\) adalah jumlah pohon keputusan.
  • \(\hat{f}_b(x)\) adalah hasil prediksi pohon keputusan ke-\(b\).
  • \(x\) adalah observasi yang akan diprediksi.

Sementara itu, prediksi Random Forest untuk klasifikasi ditentukan berdasarkan kelas yang paling sering muncul dari seluruh pohon keputusan, yang dapat dirumuskan sebagai berikut (Siregar dkk., 2024): \[ \hat{C}_{RF}(x) = \operatorname{mode}{\hat{C}_1(x), \hat{C}_2(x), \ldots, \hat{C}_B(x)} \]

Keterangan:

  • \(\hat{C}_{RF}(x)\) adalah kelas hasil prediksi Random Forest.
  • \(\hat{C}_b(x)\) adalah kelas hasil prediksi pohon keputusan ke-\(b\).
  • \(\operatorname{mode}\) adalah kelas yang paling sering muncul dari seluruh hasil prediksi pohon.

2.2 Double Random Forest

Double Random Forest merupakan metode pengembangan Random Forest yang ditujukan untuk mengatasi permasalahan underfitting pada kondisi tertentu. Underfitting merupakan keadaan ketika model belum mampu menangkap pola data secara memadai. Double Random Forest adalah metode yang dapat mengatasi permasalahan underfitting yang dialami Random Forest. Penggunaan Double Random Forest adalah untuk meningkatkan kemampuan model dalam menangkap pola data ketika Random Forest belum menghasilkan kecocokan model yang memadai. Namun, peningkatan kinerja tidak selalu terjadi pada setiap kondisi data sehingga evaluasi model tetap diperlukan (Purwanto, Sartono, dan Notodiputro, 2025).

Secara sederhana, proses Double Random Forest dilakukan sebagai berikut (Fransiska, 2026):

  1. Memulai setiap tree dengan seluruh data training, bukan satu bootstrap sample untuk seluruh tree.
  2. Pada node yang sedang diproses, mengambil bootstrap sample dari observasi yang mencapai node tersebut.
  3. Memilih mtry prediktor secara acak dan mencari split terbaik menggunakan bootstrap sample pada node.
  4. Setelah split terbaik ditemukan, bootstrap sample tidak diteruskan. Split tersebut diterapkan kembali pada data asli yang mencapai node, kemudian observasi asli dikirim ke child nodes.
  5. Mengulangi proses pada node berikutnya sampai aturan penghentian tercapai, lalu mengulangi untuk seluruh tree.
  6. Menggabungkan prediksi seluruh tree. Pada klasifikasi, hasil akhir diperoleh melalui majority voting, sedangkan pada regresi prediksi akhir diperoleh dengan merataratakan prediksi seluruh tree.

Karena setiap tree menggunakan seluruh data training untuk tumbuh, maka DRF cenderung dapat menghasilkan tree yang lebih besar. Pada saat yang sama, penggunaan bootstrap pada setiap node dan random feature subset tetap menambahkan keragaman pada aturan split. Konsekuensinya, DRF umumnya membutuhkan waktu komputasi lebih besar dibanding RF karena proses bootstrap dilakukan berulang pada banyak node.

BAB III METODE PENELITIAN

3.1 Sumber Data

Data yang digunakan dalam praktikum ini adalah data Friedman yang tersedia dalam package gbm pada RStudio. Data yang digunakan sebanyak 500 observasi yang diperoleh melalui pembangkitan data simulasi. Data digunakan untuk mempelajari hubungan nonlinear antara variabel prediktor dan variabel respons. Oleh karena itu, data dapat digunakan untuk menganalisis kemampuan metode Random Forest Regression dalam memodelkan hubungan antara variabel prediktor dan variabel respon.

3.2 Variabel Penelitian

Variabel penelitian terdiri atas variabel respon dan variabel prediktor. Variabel respons yang digunakan adalah \(Y\), yaitu variabel yang akan diprediksi menggunakan model Random Forest Regression. Sedangkan, variabel prediktor terdiri atas \(X_1\) sampai \(X_{10}\) yang digunakan sebagai variabel input dalam proses pemodelan.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis Random Forest Regression pada data Friedman adalah sebagai berikut:

  1. Persiapan data.
  2. Memeriksa struktur data.
  3. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30%.
  4. Membentuk model Random Forest Regression dengan nilai mtry yang digunakan adalah 2, 3, dan 5, sedangkan nilai num.trees yang digunakan adalah 200, 500, dan 1.000.
  5. Menghasilkan prediksi pada data testing menggunakan setiap model yang telah dibentuk.
  6. Mengevaluasi model dengan menghitung nilai MSE, RMSE, MAE, dan \(R^2\) pada data testing.
  7. Membandingkan nilai Out-of-Bag Mean Squared Error (OOB MSE) dan OOB (\(R^2\)) dari setiap model.
  8. Menentukan model terbaik berdasarkan hasil evaluasi data testing dan OOB.
  9. Membuat residual plot pada model terbaik untuk mengevaluasi pola kesalahan prediksi.
  10. Menganalisis variable importance untuk mengetahui tingkat kepentingan setiap variabel prediktor dalam model.
  11. Kesimpulan dan interpretasi.

BAB IV HASIL DAN PEMBAHASAN

Pada batasan masalah diminta untuk melakukan analisis Gradient Boosting pada data Friedman dengan nilai shrinkage sebesar 0,01, 0,05, dan 0,10 dan kemudian menghitung matrik evaluasinya.

4.1 Library dan Statistik Deskriptif

Tahap awal dilakukan dengan memuat library mlbench, caret dan ranger yang diperlukan dalam analisis dan membangkitkan data Friedman menggunakan fungsi mlbench.friedman1() dengan jumlah observasi sebanyak 500

Sintaks yang digunakan adalah sebagai berikut:

# Membentuk dataset
# Library
library(mlbench)
library(caret)
library(ranger)

set.seed(43)
reg.data <- as.data.frame(
  mlbench.friedman1(500)
)

# Memeriksa data
str(reg.data)
## 'data.frame':    500 obs. of  11 variables:
##  $ x.1 : num  0.485 0.9108 0.0577 0.7054 0.3135 ...
##  $ x.2 : num  0.784 0.783 0.622 0.991 0.821 ...
##  $ x.3 : num  0.552 0.482 0.628 0.372 0.692 ...
##  $ x.4 : num  0.7418 0.256 0.0205 0.1976 0.4869 ...
##  $ x.5 : num  0.529 0.418 0.164 0.381 0.276 ...
##  $ x.6 : num  0.335 0.984 0.967 0.434 0.6 ...
##  $ x.7 : num  0.318 0.979 0.121 0.491 0.144 ...
##  $ x.8 : num  0.0811 0.981 0.3779 0.7815 0.5555 ...
##  $ x.9 : num  0.484 0.87 0.755 0.659 0.138 ...
##  $ x.10: num  0.371 0.932 0.95 0.861 0.925 ...
##  $ y   : num  19.56 10.51 2.13 13.49 12.95 ...
summary(reg.data)
##       x.1               x.2                 x.3                x.4           
##  Min.   :0.00159   Min.   :0.0009057   Min.   :0.004887   Min.   :5.975e-05  
##  1st Qu.:0.23906   1st Qu.:0.2415145   1st Qu.:0.262739   1st Qu.:2.341e-01  
##  Median :0.50556   Median :0.4720259   Median :0.539835   Median :4.710e-01  
##  Mean   :0.50020   Mean   :0.4892460   Mean   :0.518677   Mean   :4.870e-01  
##  3rd Qu.:0.75056   3rd Qu.:0.7420183   3rd Qu.:0.775278   3rd Qu.:7.304e-01  
##  Max.   :0.99682   Max.   :0.9981246   Max.   :0.996720   Max.   :9.988e-01  
##       x.5                x.6                 x.7                 x.8          
##  Min.   :0.005383   Min.   :7.002e-05   Min.   :0.0006859   Min.   :0.005763  
##  1st Qu.:0.250913   1st Qu.:2.424e-01   1st Qu.:0.2566174   1st Qu.:0.215280  
##  Median :0.481947   Median :5.140e-01   Median :0.5224313   Median :0.507561  
##  Mean   :0.496211   Mean   :5.008e-01   Mean   :0.5104499   Mean   :0.501394  
##  3rd Qu.:0.747287   3rd Qu.:7.583e-01   3rd Qu.:0.7565035   3rd Qu.:0.773431  
##  Max.   :0.998196   Max.   :9.980e-01   Max.   :0.9983174   Max.   :0.999434  
##       x.9                x.10                y          
##  Min.   :0.003499   Min.   :0.001607   Min.   : 0.3648  
##  1st Qu.:0.251473   1st Qu.:0.263305   1st Qu.:10.6206  
##  Median :0.518338   Median :0.503962   Median :13.9701  
##  Mean   :0.510534   Mean   :0.500716   Mean   :14.1566  
##  3rd Qu.:0.767103   3rd Qu.:0.747404   3rd Qu.:17.6052  
##  Max.   :0.996703   Max.   :0.999982   Max.   :27.1551
dim(reg.data)
## [1] 500  11
head(reg.data)
##          x.1       x.2        x.3        x.4       x.5       x.6       x.7
## 1 0.48503768 0.7843542 0.55210401 0.74182849 0.5291208 0.3349633 0.3184348
## 2 0.91076604 0.7826194 0.48223042 0.25599970 0.4177946 0.9844605 0.9791091
## 3 0.05767389 0.6221422 0.62819779 0.02046484 0.1639038 0.9666580 0.1210342
## 4 0.70539841 0.9914532 0.37225848 0.19763034 0.3812875 0.4336756 0.4911194
## 5 0.31349510 0.8210087 0.69171620 0.48690436 0.2755178 0.6003613 0.1438703
## 6 0.54303264 0.3900782 0.01639266 0.11404397 0.9354717 0.3373063 0.4343538
##          x.8       x.9      x.10         y
## 1 0.08111583 0.4841657 0.3709264 19.556235
## 2 0.98098380 0.8701462 0.9317184 10.506158
## 3 0.37793808 0.7549262 0.9499757  2.134789
## 4 0.78147925 0.6592182 0.8613697 13.494760
## 5 0.55553879 0.1381987 0.9249460 12.946349
## 6 0.87313455 0.3850465 0.8800210 16.621116

Hasil pemeriksaan awal menunjukkan bahwa data yang diguankan sebanyak 500 observasi dengan 1 variabel respon yaitu \(y\) dan 10 variabel prediktor yaitu \(X1\) sampai \(X10\).

4.2 Splitting Data

Splitting data merupakan proses membagi dataset menjadi data training dan data testing. Data training digunakan untuk membentuk model, sedangkan data testing digunakan untuk mengevaluasi kemampuan model pada data yang tidak digunakan selama proses pelatihan. Pembagian dataset dilakukan dengan proporsi 70% data training dan 30% data testing.

Sintaks yang digunakan adalah sebagai berikut:

# Membagi data training dan testing
set.seed(43)
idx.reg <- createDataPartition(reg.data$y,p = 0.70,list = FALSE)
reg.train <- reg.data[idx.reg, ]
reg.test  <- reg.data[-idx.reg, ]

# Memeriksa jumlah data
dim(reg.train)
## [1] 352  11
dim(reg.test)
## [1] 148  11

Hasil pembagian menunjukkan bahwa data training terdiri atas 352 observasi, sedangkan data testing terdiri atas 148 observasi. Data training digunakan untuk membangun model Random Forest Regression, sementara data testing digunakan untuk menghitung MSE, RMSE, MAE, dan \(R^2\).

4.3 Membentuk Model Random Forest Regression*

Pembentukan model Random Forest Regression dilakukan menggunakan tiga nilai parameter mtry, yaitu 2, 3, dan 5, serta tiga jumlah pohon (num.trees), yaitu 200, 500, dan 1000. Kombinasi kedua parameter tersebut menghasilkan sembilan model yang dibangun menggunakan parameter lainnya yang sama.

Berikut sintaks yang digunakan untuk membentuk model Random Forest Regression:

# Menentukan kombinasi parameter
kombinasi.rf <- expand.grid(
  mtry = c(2, 3, 5),
  num.trees = c(200, 500, 1000)
)

# Menyiapkan tempat penyimpanan model
daftar.rf <- list()

# Membentuk sembilan model
for (i in 1:nrow(kombinasi.rf)) {
  set.seed(43)
  rf.reg <- ranger(
    y ~ .,
    data = reg.train,
    num.trees = kombinasi.rf$num.trees[i],
    mtry = kombinasi.rf$mtry[i],
    min.node.size = 5,
    replace = TRUE,
    sample.fraction = 1,
    importance = "permutation",
    seed = 234
  )

  # Menyimpan model
  nama.model <- paste0("Model_", i)
  daftar.rf[[nama.model]] <- rf.reg
}

# Menampilkan kombinasi parameter
print(kombinasi.rf)
##   mtry num.trees
## 1    2       200
## 2    3       200
## 3    5       200
## 4    2       500
## 5    3       500
## 6    5       500
## 7    2      1000
## 8    3      1000
## 9    5      1000

Berdasarkan hasil pembentukan model Random Forest Regression, diperoleh sembilan model dengan kombinasi parameter mtry dan num.trees yang berbeda. Model 1 hingga Model 3 menggunakan 200 pohon dengan nilai mtry masing-masing 2, 3, dan 5. Model 4 hingga Model 6 menggunakan 500 pohon dengan variasi mtry yang sama dan itu, model 7 hingga Model 9 menggunakan 1.000 pohon dengan nilai mtry masing-masing 2, 3, dan 5.

4.4 Evaluasi Out-of-Bag (OOB)

Evaluasi Out-of-Bag (OOB) dilakukan untuk mengetahui tingkat kesalahan prediksi model Random Forest Regression menggunakan data yang tidak digunakan dalam pembentukan setiap pohon. Hasil evaluasi OOB digunakan untuk membandingkan kinerja model berdasarkan nilai OOB MSE dan OOB \(R^2\)

Sintaks yang digunakan untuk melakukan evaluasi Out-of-Bag (OOB) adalah sebagai berikut:

# Menyiapkan tabel hasil OOB
hasil.oob <- data.frame()

# Mengambil nilai OOB dari setiap model
for (i in 1:length(daftar.rf)) {

  rf.reg <- daftar.rf[[i]]

  hasil.oob <- rbind(
    hasil.oob,
    data.frame(
      Model = paste0("Model_", i),
      mtry = kombinasi.rf$mtry[i],
      num.trees = kombinasi.rf$num.trees[i],
      OOB_MSE = rf.reg$prediction.error,
      OOB_R2 = rf.reg$r.squared
    )
  )
}

# Menampilkan hasil evaluasi OOB
print(hasil.oob)
##     Model mtry num.trees  OOB_MSE    OOB_R2
## 1 Model_1    2       200 6.644348 0.7273726
## 2 Model_2    3       200 5.615644 0.7695818
## 3 Model_3    5       200 4.997003 0.7949656
## 4 Model_4    2       500 6.778203 0.7218803
## 5 Model_5    3       500 5.639571 0.7686001
## 6 Model_6    5       500 4.992775 0.7951391
## 7 Model_7    2      1000 6.707970 0.7247621
## 8 Model_8    3      1000 5.707137 0.7658277
## 9 Model_9    5      1000 4.964332 0.7963061

Berdasarkan hasil evaluasi Out-of-Bag (OOB), diperoleh 9 model Random Forest Regression dengan kombinasi parameter mtry sebesar 2, 3, dan 5 serta num.trees sebesar 200, 500, dan 1000. Hasil menunjukkan bahwa nilai mtry memengaruhi kinerja model, yaitu ketika nilai mtry meningkat dari 2 menjadi 5, nilai OOB MSE cenderung menurun dan nilai OOB \(R^2\) meningkat.

Model dengan nilai OOB MSE terendah adalah Model 9, dengan mtry sebesar 5 dan num.trees sebanyak 1000, yang menghasilkan OOB MSE sebesar 4,964332 dan OOB \(R^2\) sebesar 0,7963061. Hasil menunjukkan bahwa Model 9 memiliki kesalahan prediksi OOB paling rendah dan mampu menjelaskan sekitar 79,63% variasi pada variabel respons berdasarkan evaluasi OOB. Sedangkan, Model 1 dengan mtry sebesar 2 dan num.trees sebanyak 200 menghasilkan OOB MSE tertinggi sebesar 6,644348 dan OOB \(R^2\) sebesar 0,7273726. Hasil menunjukkan bahwa kombinasi mtry sebesar 5 memberikan kinerja OOB yang lebih baik dibandingkan nilai mtry sebesar 2 dan 3 pada ketiga jumlah pohon yang diuji. Tetapi, model 9 tetap menjadi model terbaik berdasarkan evaluasi OOB, sehingga kinerjanya masih perlu dibandingkan dengan hasil evaluasi pada data testing untuk menentukan model akhir.

4.5 Prediksi pada Data Testing

Pada tahap ini, setiap model Random Forest Regression digunakan untuk memprediksi nilai variabel respons pada data testing. Nilai prediksi kemudian dibandingkan dengan nilai aktual untuk memperoleh residual atau selisih antara nilai aktual dan nilai prediksi.

Sintaks yang digunakan untuk melakukan prediksi pada data testing adalah sebagai berikut:

# Menyiapkan tabel hasil prediksi
hasil.prediksi <- data.frame()

# Melakukan prediksi menggunakan setiap model
for (i in 1:length(daftar.rf)) {

  rf.reg <- daftar.rf[[i]]

  pred.rf.reg <- predict(
    rf.reg,
    data = reg.test
  )$predictions

  actual.reg <- reg.test$y

  hasil.prediksi <- rbind(
    hasil.prediksi,
    data.frame(
      Model = paste0("Model_", i),
      Aktual = actual.reg,
      Prediksi = pred.rf.reg,
      Residual = actual.reg - pred.rf.reg
    )
  )
}

# Menampilkan 10 hasil prediksi pertama
head(hasil.prediksi, 10)
##      Model    Aktual Prediksi   Residual
## 1  Model_1 10.506158 15.11032 -4.6041575
## 2  Model_1 13.535856 14.35936 -0.8235064
## 3  Model_1 19.712992 16.19793  3.5150655
## 4  Model_1  9.395308 12.94947 -3.5541633
## 5  Model_1 23.323631 17.54996  5.7736760
## 6  Model_1 11.873848 12.87283 -0.9989858
## 7  Model_1 17.011324 15.47186  1.5394654
## 8  Model_1  9.989311 15.34380 -5.3544904
## 9  Model_1 11.287532 10.97691  0.3106259
## 10 Model_1  9.964898 12.88698 -2.9220852

Berdasarkan hasil prediksi pada data testing, model Random Forest Regression menghasilkan nilai prediksi yang bervariasi dibandingkan dengan nilai aktual. Perbedaan antara nilai aktual dan nilai prediksi ditunjukkan oleh residual, yang dapat bernilai positif maupun negatif. Residual positif menunjukkan bahwa nilai prediksi lebih rendah daripada nilai aktual, sedangkan residual negatif menunjukkan bahwa nilai prediksi lebih tinggi daripada nilai aktual. Hasil ini menunjukkan bahwa model mampu menghasilkan prediksi, tetapi masih terdapat kesalahan pada beberapa observasi.

4.6 Evaluasi Kinerja Model

Evaluasi kinerja model Random Forest Regression dilakukan untuk mengetahui kemampuan setiap model dalam memprediksi nilai variabel respons pada data testing. Evaluasi dilakukan menggunakan empat metrik, yaitu Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)).

# Menyiapkan tabel evaluasi model
evaluasi.rf <- data.frame()

# Menghitung metrik evaluasi setiap model
for (i in 1:length(daftar.rf)) {

  rf.reg <- daftar.rf[[i]]

  # Prediksi data testing
  pred.rf.reg <- predict(
    rf.reg,
    data = reg.test
  )$predictions

  actual.reg <- reg.test$y

  # Menghitung MSE
  MSE.rf <- mean(
    (actual.reg - pred.rf.reg)^2
  )

  # Menghitung RMSE
  RMSE.rf <- sqrt(MSE.rf)

  # Menghitung MAE
  MAE.rf <- mean(
    abs(actual.reg - pred.rf.reg)
  )

  # Menghitung R-Square
  R2.rf <- 1 -
    sum((actual.reg - pred.rf.reg)^2) /
    sum((actual.reg - mean(actual.reg))^2)

  # Menyimpan hasil evaluasi
  evaluasi.rf <- rbind(
    evaluasi.rf,
    data.frame(
      Model = paste0("Model_", i),
      mtry = kombinasi.rf$mtry[i],
      num.trees = kombinasi.rf$num.trees[i],
      MSE = MSE.rf,
      RMSE = RMSE.rf,
      MAE = MAE.rf,
      R_Square = R2.rf
    )
  )
}

# Menampilkan hasil evaluasi
print(evaluasi.rf)
##     Model mtry num.trees      MSE     RMSE      MAE  R_Square
## 1 Model_1    2       200 6.732072 2.594624 2.068280 0.7114043
## 2 Model_2    3       200 5.693536 2.386113 1.889617 0.7559251
## 3 Model_3    5       200 5.090699 2.256258 1.814286 0.7817680
## 4 Model_4    2       500 6.897385 2.626287 2.091493 0.7043175
## 5 Model_5    3       500 5.702196 2.387927 1.897869 0.7555539
## 6 Model_6    5       500 5.132958 2.265603 1.811066 0.7799564
## 7 Model_7    2      1000 6.933342 2.633124 2.088038 0.7027761
## 8 Model_8    3      1000 5.812364 2.410885 1.911443 0.7508311
## 9 Model_9    5      1000 5.146095 2.268501 1.809644 0.7793932
# Mengurutkan model berdasarkan MSE terkecil
evaluasi.urut <- evaluasi.rf[
  order(evaluasi.rf$MSE),
]

print(evaluasi.urut)
##     Model mtry num.trees      MSE     RMSE      MAE  R_Square
## 3 Model_3    5       200 5.090699 2.256258 1.814286 0.7817680
## 6 Model_6    5       500 5.132958 2.265603 1.811066 0.7799564
## 9 Model_9    5      1000 5.146095 2.268501 1.809644 0.7793932
## 2 Model_2    3       200 5.693536 2.386113 1.889617 0.7559251
## 5 Model_5    3       500 5.702196 2.387927 1.897869 0.7555539
## 8 Model_8    3      1000 5.812364 2.410885 1.911443 0.7508311
## 1 Model_1    2       200 6.732072 2.594624 2.068280 0.7114043
## 4 Model_4    2       500 6.897385 2.626287 2.091493 0.7043175
## 7 Model_7    2      1000 6.933342 2.633124 2.088038 0.7027761

Berdasarkan hasil evaluasi kinerja sembilan model Random Forest Regression, diperoleh nilai MSE, RMSE, MAE, dan \(R^2\) yang berbeda pada setiap kombinasi parameter mtry dan num.trees. Hasil menunjukkan bahwa pemilihan parameter memengaruhi kinerja model dalam memprediksi data testing.

Model dengan kinerja terbaik berdasarkan nilai MSE, RMSE, dan MAE terendah serta nilai (\(R^2\)) tertinggi adalah Model 3, dengan parameter mtry sebesar 5 dan num.trees sebanyak 200. Model menghasilkan nilai MSE sebesar 5,090699, RMSE sebesar 2,256258, MAE sebesar 1,814286, dan (\(R^2\)) sebesar 0,7817680. Nilai tersebut menunjukkan bahwa model mampu menjelaskan sekitar 78,18% variasi pada variabel respons dalam data testing.

4.7 Membuat Residual Plot

Residual plot dibuat untuk mengevaluasi pola kesalahan prediksi dari model Random Forest Regression terbaik. Grafik menunjukkan hubungan antara nilai prediksi dan residual yang diperoleh dari selisih nilai aktual dengan nilai prediksi pada data testing.

Sintaks yang digunakan untuk membuat residual plot adalah sebagai berikut:

# Residual Plot
# Menentukan model terbaik
model.terbaik <- evaluasi.urut$Model[1]

# Mengambil model terbaik
rf.terbaik <- daftar.rf[[model.terbaik]]

# Melakukan prediksi pada data testing
pred.terbaik <- predict(
  rf.terbaik,
  data = reg.test
)$predictions

# Menghitung residual
residual.terbaik <- reg.test$y - pred.terbaik

# Membuat residual plot
plot(
  pred.terbaik,
  residual.terbaik,
  main = "Residual Plot Random Forest",
  xlab = "Nilai Prediksi",
  ylab = "Residual",
  pch = 19
)

# Menambahkan garis horizontal pada residual nol
abline(h = 0, lty = 2)

Berdasarkan residual plot, titik-titik residual tersebar di atas dan di bawah garis nol tanpa membentuk pola yang jelas.Penyebaran residual terlihat cukup bervariasi pada berbagai nilai prediksi. Hal ini menunjukkan bahwa model Random Forest Regression telah menghasilkan prediksi dengan kesalahan positif dan negatif, meskipun masih terdapat beberapa observasi dengan residual yang cukup besar.

4.8 Analisis Variable Importance

Analisis variable importance dilakukan untuk mengetahui tingkat kepentingan setiap variabel prediktor dalam model Random Forest Regression terbaik. Variabel dengan nilai importance lebih tinggi menunjukkan kontribusi relatif yang lebih besar terhadap kemampuan prediksi model.

Sintaks yang digunakan untuk menganalisis variable importance adalah sebagai berikut:

# Variable Importance
# Mengambil nilai variable importance
nilai.importance <- rf.terbaik$variable.importance

# Membuat tabel variable importance
importance.rf <- data.frame(
  Variabel = names(nilai.importance),
  Importance = as.numeric(nilai.importance)
)

# Mengurutkan berdasarkan nilai importance tertinggi
importance.rf <- importance.rf[
  order(importance.rf$Importance, decreasing = TRUE),
]

# Menampilkan tabel variable importance
print(importance.rf)
##    Variabel   Importance
## 4       x.4 13.868554057
## 1       x.1  9.562238839
## 2       x.2  7.349354004
## 5       x.5  2.309158786
## 3       x.3  0.884041869
## 6       x.6  0.105821187
## 7       x.7  0.045255465
## 10     x.10  0.003148992
## 9       x.9 -0.000546319
## 8       x.8 -0.043702725
# Membuat grafik variable importance
barplot(
  height = importance.rf$Importance,
  names.arg = importance.rf$Variabel,
  main = "Variable Importance Random Forest",
  xlab = "Variabel Prediktor",
  ylab = "Nilai Importance",
  las = 2
)

Berdasarkan hasil analisis variable importance pada model Random Forest Regression terbaik, variabel \(X_4\) memiliki tingkat kepentingan tertinggi dengan nilai importance sebesar 13,8686, diikuti oleh \(X_1\) sebesar 9,5622 dan \(X_2\) sebesar 7,3494. Selanjutnya, variabel \(X_3\) dan \(X_4\) memiliki nilai importance masing-masing sebesar 2,3092 dan 0,8840. Sementara itu, variabel \(X_6\), \(X_7\), \(X_10\),\(X_9\), dan \(X_8\) memiliki nilai importance yang mendekati nol.

Hasil menunjukkan bahwa \(X_4\), \(X_1\), dan \(X_2\) merupakan variabel prediktor yang paling penting dalam model, sedangkan variabel lainnya memberikan kontribusi relatif lebih kecil terhadap kemampuan prediksi. Nilai importance negatif pada \(X_9\) dan \(X_8\) menunjukkan bahwa pengacakan variabel tersebut tidak meningkatkan kesalahan prediksi, sehingga kontribusi prediktifnya sangat kecil pada model ini.

BAB V KESIMPULAN

5.1 Kesimpulan

Metode Random Forest dan Double Random Forest merupakan metode ensemble learning berbasis decision tree yang menggabungkan beberapa pohon keputusan untuk menghasilkan prediksi. Kedua metode tersebut memiliki mekanisme pembentukan model yang bertujuan meningkatkan kemampuan prediksi dan mengurangi kesalahan. Pemahaman terhadap prinsip kerja kedua metode menjadi dasar dalam penerapannya pada berbagai permasalahan analisis data.

Implementasi metode Random Forest dan Double Random Forest dapat dilakukan menggunakan bahasa pemrograman R, baik untuk permasalahan klasifikasi maupun regresi. Tahapan implementasi meliputi persiapan data, pembagian data menjadi training dan testing, pembentukan model, penentuan parameter, serta proses prediksi. Melalui tahapan tersebut, kedua metode dapat diterapkan untuk menghasilkan model sesuai dengan jenis permasalahan yang dianalisis.

Evaluasi performa model dilakukan menggunakan metrik yang sesuai dengan jenis permasalahan, seperti akurasi, presisi, recall, dan F1-score untuk klasifikasi, serta MSE, RMSE, MAE, dan \(R^2\) untuk regresi. Selain itu, Out-of-Bag (OOB) error digunakan untuk memperkirakan kesalahan prediksi model tanpa memerlukan data validasi tambahan. Hasil evaluasi tersebut dapat digunakan untuk membandingkan kinerja metode Random Forest dan Double Random Forest serta menentukan metode yang memberikan hasil prediksi lebih baik.

Berdasarkan hasil penelitian, metode Random Forest Regression berhasil diterapkan pada data simulasi Friedman sebanyak 500 observasi dengan sembilan kombinasi parameter mtry dan num.trees. Berdasarkan evaluasi pada data testing, diperoleh Model 3 dengan parameter mtry = 5 dan num.trees = 200 sebagai model terbaik, yang menghasilkan MSE sebesar 5,090699, RMSE sebesar 2,256258, MAE sebesar 1,814286, dan \(R^2\) sebesar 0,781768. Sementara itu, evaluasi OOB menunjukkan bahwa Model 9 memiliki nilai OOB MSE terendah sebesar 4,964332 dan OOB \(R^2\) sebesar 0,7963061. Hasil analisis variable importance menunjukkan bahwa x.4, x.1, dan x.2 merupakan variabel prediktor yang paling berpengaruh terhadap kemampuan prediksi model. Dengan demikian, metode Random Forest Regression mampu menghasilkan prediksi yang cukup baik, dengan Model 3 sebagai model terbaik berdasarkan evaluasi data testing.

DAFTAR PUSTAKA

Breiman, L. (2001). Random forests. Machine Learning, 45, 5–32. https://doi.org/10.1023/A:1010933404324

Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Matematika 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). https://doi.org/10.15294/sji.v11i1.48721

Siregar, D., Wardana, B. M., Baihaqy, A. S., Naimah, L., Putri, A. N., Meidianingsih, Q., & Safitri, D. (2024). Determination of important variables in divorce type classification using the Random Forest method with SMOTE. Jurnal Statistika dan Aplikasinya, 8(2), 231–246. https://journal.unj.ac.id/unj/index.php/statistika/article/view/50579

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. https://doi.org/10.30598/barekengvol19iss1pp227-236