BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Machine learning merupakan bagian dari kecerdasan buatan yang memungkinkan komputer mempelajari pola dari data untuk melakukan prediksi maupun pengelompokan. Salah satu pendekatan yang banyak digunakan adalah ensemble learning, yaitu penggabungan sejumlah model pembelajaran untuk menghasilkan prediksi yang lebih stabil. Random Forest merupakan salah satu metode ensemble learning berbasis pohon keputusan yang menggabungkan prinsip bootstrap aggregating (bagging) dan pemilihan subset prediktor secara acak pada setiap proses pemisahan simpul.

Random Forest membentuk banyak pohon keputusan dari sampel bootstrap. Pada setiap simpul, hanya sebagian variabel prediktor yang dipertimbangkan sebagai kandidat pemisah. Untuk kasus regresi, hasil prediksi dari seluruh pohon digabungkan melalui nilai rata-rata, sedangkan pada klasifikasi umumnya digunakan suara mayoritas. Pengacakan sampel dan prediktor tersebut bertujuan mengurangi korelasi antarpohon sehingga gabungan pohon dapat menghasilkan prediksi yang lebih baik dibandingkan satu pohon keputusan.

Pengembangan dari Random Forest juga mencakup Double Random Forest (DRF). Han dkk. (2020) memperkenalkan DRF dengan mekanisme bootstrap pada setiap simpul selama pembentukan pohon, bukan hanya satu kali pada akar pohon. Pendekatan tersebut dirancang untuk membentuk pohon yang lebih besar dan beragam pada kondisi tertentu. Penelitian lanjutan juga mengembangkan pendekatan oblique dan rotation double random forest untuk meningkatkan keragaman pohon melalui transformasi ruang prediktor (Ganaie dkk., 2022). Dengan demikian, Random Forest dan Double Random Forest merupakan metode yang berkaitan, tetapi memiliki mekanisme pembentukan pohon yang berbeda.

Pada praktikum ini, analisis komputasi difokuskan pada Random Forest Regression menggunakan data simulasi Friedman. Data Friedman memiliki hubungan respons dan prediktor yang bersifat nonlinier serta memuat prediktor yang tidak informatif, sehingga dapat digunakan untuk mengamati kemampuan model dalam menangkap pola nonlinier. Model dibandingkan berdasarkan kombinasi nilai mtry sebesar 2, 3, dan 5 serta jumlah pohon (num.trees) sebesar 200, 500, dan 1000. Evaluasi dilakukan menggunakan MSE, RMSE, MAE, koefisien determinasi (\(R^2\)), OOB MSE, residual plot, dan variable importance. Melalui praktikum ini, mahasiswa diharapkan memahami konsep Random Forest dan Double Random Forest serta mampu menerapkan dan mengevaluasi model Random Forest pada kasus regresi menggunakan R.

1.2 Rumusan Masalah

  1. Bagaimana cara memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree?
  2. Bagaimana cara mengimplementasikan 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 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.

BAB II TINJAUAN PUSTAKA

2.1 Ensemble Learning

Ensemble learning merupakan pendekatan pembelajaran mesin yang menggabungkan prediksi dari beberapa model dasar untuk menghasilkan satu prediksi akhir (Dietterich, 2000). Penggabungan tersebut dapat mengurangi ketidakstabilan model dan meningkatkan kemampuan generalisasi (Dietterich, 2000; Hastie dkk., 2009). Salah satu bentuk ensemble learning adalah bagging, yaitu membangun model dari beberapa sampel bootstrap yang diambil dari data pelatihan (Breiman, 1996). Prediksi akhir regresi diperoleh dengan merata-ratakan prediksi seluruh model, sedangkan klasifikasi umumnya menggunakan suara mayoritas (Breiman, 1996; James dkk., 2021).

2.2 Random Forest

Random Forest merupakan metode ensemble yang membangun sejumlah pohon keputusan menggunakan sampel bootstrap dan subset prediktor yang dipilih secara acak (Breiman, 2001). Setiap pohon dibentuk secara relatif independen. Penggunaan subset prediktor pada setiap simpul membantu mengurangi kemiripan antarpohon, sehingga penggabungan prediksi dapat mengurangi varians model (Breiman, 2001; James dkk., 2021).

Misalkan terdapat \(B\) pohon keputusan yang dibentuk dari data pelatihan. Untuk regresi, prediksi Random Forest pada pengamatan dengan vektor prediktor \(x\) dirumuskan sebagai berikut (Hastie dkk., 2009):

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

dengan \(\hat{f}_b(x)\) merupakan prediksi dari pohon ke-\(b\), sedangkan \(B\) adalah jumlah pohon dalam hutan (Hastie dkk., 2009). Untuk klasifikasi, kelas akhir umumnya ditentukan berdasarkan kelas yang memperoleh suara terbanyak dari seluruh pohon (Breiman, 2001).

Parameter penting Random Forest antara lain num.trees, yaitu jumlah pohon yang dibangun; mtry, yaitu jumlah prediktor yang dipertimbangkan secara acak pada setiap pemisahan simpul; serta min.node.size, yaitu ukuran minimum simpul terminal (Wright & Ziegler, 2017). Nilai mtry yang kecil meningkatkan pengacakan prediktor, sedangkan nilai yang lebih besar memungkinkan lebih banyak kandidat variabel dipertimbangkan pada setiap pemisahan (Probst dkk., 2019). Pemilihan parameter dapat memengaruhi akurasi dan kompleksitas model (Probst dkk., 2019).

2.3 Double Random Forest

Double Random Forest (DRF) merupakan pengembangan dari Random Forest yang mengubah mekanisme pengambilan sampel selama pembentukan pohon (Han dkk., 2020). Pada Random Forest standar, satu sampel bootstrap digunakan untuk membangun satu pohon (Breiman, 2001). Sementara itu, DRF yang diperkenalkan oleh Han dkk. (2020) melakukan bootstrap pada setiap simpul ketika menentukan aturan pemisahan, termasuk pada akar pohon. Mekanisme tersebut memungkinkan pohon tumbuh menggunakan informasi observasi yang lebih luas dan menghasilkan struktur pohon yang lebih besar pada kondisi tertentu (Han dkk., 2020).

Perbedaan mekanisme tersebut ditujukan untuk mengatasi kondisi ketika Random Forest standar menghasilkan pohon yang belum cukup besar atau mengalami underfitting (Han dkk., 2020). DRF bukan sekadar Random Forest dengan jumlah pohon dua kali lebih banyak. Istilah double merujuk pada penggunaan proses pengambilan sampel secara berulang pada tahap pembentukan pohon (Han dkk., 2020). Pengembangan lain, seperti oblique dan rotation double random forest, menggabungkan mekanisme DRF dengan transformasi atau rotasi ruang prediktor pada simpul pohon (Ganaie dkk., 2022).

2.4 Out-of-Bag (OOB) Error

Dalam proses bootstrap, setiap pohon dibentuk menggunakan sampel yang diambil dengan pengembalian dari data pelatihan. Sebagian observasi tidak terpilih dalam sampel bootstrap untuk pohon tertentu. Observasi yang tidak terpilih tersebut disebut Out-of-Bag (OOB) dan dapat digunakan untuk mengevaluasi prediksi pohon tanpa memerlukan satu set validasi terpisah (Breiman, 2001; James dkk., 2021).

Untuk regresi, OOB Mean Squared Error dapat dituliskan sebagai berikut (James dkk., 2021):

\[ OOB\ MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_{i,OOB})^2 \]

dengan \(y_i\) merupakan nilai aktual dan \(\hat{y}_{i,OOB}\) merupakan prediksi observasi ke-\(i\) yang dihitung dari pohon-pohon yang tidak menggunakan observasi tersebut dalam sampel bootstrap (James dkk., 2021). OOB error dapat digunakan sebagai evaluasi internal selama pembentukan Random Forest (Breiman, 2001). Meskipun demikian, evaluasi pada data testing yang benar-benar dipisahkan tetap diperlukan untuk menilai kemampuan prediksi pada data yang tidak digunakan dalam pelatihan (Smith dkk., 2024).

2.5 Variable Importance

Variable importance merupakan ukuran yang digunakan untuk melihat kontribusi relatif setiap prediktor terhadap hasil prediksi model (Breiman, 2001). Salah satu pendekatan yang umum digunakan adalah permutation importance (Wright & Ziegler, 2017). Pada pendekatan ini, nilai suatu prediktor diacak, kemudian perubahan kesalahan prediksi diamati. Jika pengacakan suatu prediktor menyebabkan kesalahan meningkat, prediktor tersebut memiliki kontribusi terhadap kemampuan prediksi model (Breiman, 2001). Ukuran kepentingan variabel berguna untuk memahami prediktor yang paling berkontribusi, tetapi tidak dapat langsung ditafsirkan sebagai hubungan sebab-akibat (Strobl dkk., 2007).

2.6 Ukuran Evaluasi Model Regresi

Evaluasi regresi dilakukan dengan membandingkan nilai aktual dan nilai prediksi pada data testing (James dkk., 2021). Ukuran evaluasi yang digunakan dalam praktikum ini meliputi (Hyndman & Koehler, 2006):

Mean Squared Error (MSE) merupakan rata-rata kuadrat selisih nilai aktual dan prediksi (James dkk., 2021).

\[ MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \]

Root Mean Squared Error (RMSE) merupakan akar kuadrat MSE dan memiliki satuan yang sama dengan respons (Willmott & Matsuura, 2005).

\[ RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2} \]

Mean Absolute Error (MAE) merupakan rata-rata nilai absolut selisih nilai aktual dan prediksi (Willmott & Matsuura, 2005).

\[ MAE=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i| \]

Koefisien determinasi (\(R^2\)) menunjukkan proporsi variasi respons yang dapat dijelaskan oleh model (James dkk., 2021).

\[ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2} {\sum_{i=1}^{n}(y_i-\bar{y})^2} \]

Nilai MSE, RMSE, dan MAE yang lebih kecil menunjukkan kesalahan prediksi yang lebih rendah (Hyndman & Koehler, 2006). Nilai \(R^2\) yang lebih besar menunjukkan kemampuan model yang lebih baik dalam menjelaskan variasi respons. Nilai \(R^2\) dapat bernilai negatif apabila prediksi model pada data uji lebih buruk daripada prediksi menggunakan rata-rata respons data uji (James dkk., 2021).

BAB III METODE PENELITIAN

3.1 Sumber Data

Data yang digunakan adalah data simulasi Friedman yang dibangkitkan menggunakan fungsi mlbench.friedman1() dari paket mlbench dalam program R (Leisch & Dimitriadou, 2024). Data terdiri atas sepuluh variabel prediktor (\(X_1,\ldots,X_{10}\)) dan satu variabel respons numerik (\(Y\)). Pembangkitan data dilakukan sebanyak 1.000 observasi. Data Friedman digunakan karena memiliki pola hubungan nonlinier antara prediktor dan respons serta beberapa prediktor yang tidak informatif.

Respons pada data Friedman dibentuk oleh persamaan berikut (Friedman, 1991):

\[ Y=10\sin(\pi X_1X_2)+20(X_3-0{,}5)^2+10X_4+5X_5+\varepsilon \]

dengan \(X_1,\ldots,X_{10}\) berdistribusi seragam pada interval [0, 1] dan \(\varepsilon\) merupakan galat acak berdistribusi normal dengan simpangan baku 1 (sd = 1). Berdasarkan persamaan tersebut, hanya \(X_1\) sampai \(X_5\) yang memengaruhi respons, sedangkan \(X_6\) sampai \(X_{10}\) merupakan prediktor yang tidak informatif.

3.2 Variabel Penelitian

Variabel Keterangan
\(Y\) Variabel respons numerik yang diprediksi
\(X_1,\ldots,X_{10}\) Sepuluh variabel prediktor pada data Friedman
mtry Jumlah prediktor yang dipertimbangkan pada setiap pemisahan simpul
num.trees Jumlah pohon yang dibentuk dalam Random Forest

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan adalah sebagai berikut.

  1. Membuka aplikasi RStudio dan memanggil paket yang diperlukan.
  2. Membangkitkan data Friedman sebanyak 1.000 observasi menggunakan fungsi mlbench.friedman1().
  3. Memeriksa struktur, ringkasan statistik, dan keberadaan nilai hilang pada data.
  4. Membagi data menjadi data training sebesar 80% dan data testing sebesar 20% menggunakan set.seed(234).
  5. Membentuk sembilan model Random Forest Regression berdasarkan kombinasi mtry sebesar 2, 3, dan 5 serta num.trees sebesar 200, 500, dan 1000.
  6. Melakukan prediksi pada data testing untuk setiap model.
  7. Menghitung MSE, RMSE, MAE, dan \(R^2\) pada data testing serta mencatat OOB MSE dari setiap model.
  8. Membandingkan performa model melalui tabel evaluasi, residual plot, dan variable importance.
  9. Menentukan model terbaik berdasarkan hasil evaluasi dan menginterpretasikan hasil analisis.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Persiapan Data

Paket mlbench digunakan untuk membangkitkan data Friedman, ranger digunakan untuk membentuk model Random Forest, sedangkan dplyr, tidyr, ggplot2, dan knitr digunakan untuk pengolahan data, visualisasi, serta penyajian hasil.

# Instal paket jika belum tersedia:
# install.packages(c("mlbench", "ranger", "dplyr", "tidyr", "ggplot2", "knitr"))

library(mlbench)
library(ranger)
library(dplyr)
library(tidyr)
library(ggplot2)
library(knitr)

# Membangkitkan data simulasi Friedman
set.seed(234)
data_friedman <- mlbench.friedman1(n = 1000, sd = 1)
data_friedman <- as.data.frame(data_friedman)

head(data_friedman)
##          x.1       x.2         x.3         x.4        x.5        x.6       x.7
## 1 0.74562000 0.2761835 0.077996212 0.172081056 0.18625795 0.06679016 0.3463721
## 2 0.78171242 0.6426889 0.320190865 0.631658023 0.08349904 0.77180754 0.3080644
## 3 0.02003711 0.9873938 0.967770780 0.804429963 0.22333695 0.64791751 0.6502673
## 4 0.77608539 0.8425175 0.167261944 0.008992943 0.26031592 0.23493175 0.6340176
## 5 0.06691009 0.7327976 0.369795339 0.261133095 0.20119368 0.17158940 0.3941911
## 6 0.64479512 0.4302338 0.006615464 0.773696859 0.63979112 0.96461657 0.9707886
##          x.8       x.9       x.10         y
## 1 0.07157006 0.4752933 0.13868054 11.465738
## 2 0.71483408 0.5965775 0.80690110 14.907177
## 3 0.46882941 0.7349675 0.41666208 14.853880
## 4 0.73573328 0.1351517 0.03941805 13.021960
## 5 0.46004389 0.9950917 0.78918644  6.638268
## 6 0.62609475 0.5691647 0.52862538 25.189397
str(data_friedman)
## 'data.frame':    1000 obs. of  11 variables:
##  $ x.1 : num  0.7456 0.7817 0.02 0.7761 0.0669 ...
##  $ x.2 : num  0.276 0.643 0.987 0.843 0.733 ...
##  $ x.3 : num  0.078 0.32 0.968 0.167 0.37 ...
##  $ x.4 : num  0.17208 0.63166 0.80443 0.00899 0.26113 ...
##  $ x.5 : num  0.1863 0.0835 0.2233 0.2603 0.2012 ...
##  $ x.6 : num  0.0668 0.7718 0.6479 0.2349 0.1716 ...
##  $ x.7 : num  0.346 0.308 0.65 0.634 0.394 ...
##  $ x.8 : num  0.0716 0.7148 0.4688 0.7357 0.46 ...
##  $ x.9 : num  0.475 0.597 0.735 0.135 0.995 ...
##  $ x.10: num  0.1387 0.8069 0.4167 0.0394 0.7892 ...
##  $ y   : num  11.47 14.91 14.85 13.02 6.64 ...

Data terdiri atas y sebagai variabel respons dan x.1 sampai x.10 sebagai variabel prediktor. Ringkasan statistik digunakan untuk melihat karakteristik awal data.

summary(data_friedman)
##       x.1                x.2                x.3                 x.4          
##  Min.   :0.001198   Min.   :0.001884   Min.   :1.477e-05   Min.   :0.000531  
##  1st Qu.:0.252244   1st Qu.:0.229962   1st Qu.:2.536e-01   1st Qu.:0.249890  
##  Median :0.502501   Median :0.493678   Median :5.008e-01   Median :0.500833  
##  Mean   :0.490455   Mean   :0.493386   Mean   :5.001e-01   Mean   :0.501039  
##  3rd Qu.:0.724930   3rd Qu.:0.750807   3rd Qu.:7.444e-01   3rd Qu.:0.738471  
##  Max.   :0.999850   Max.   :0.999021   Max.   :9.992e-01   Max.   :0.998386  
##       x.5                x.6                 x.7                 x.8           
##  Min.   :0.001774   Min.   :0.0001198   Min.   :0.0009038   Min.   :0.0005495  
##  1st Qu.:0.248165   1st Qu.:0.2485552   1st Qu.:0.2435999   1st Qu.:0.2685956  
##  Median :0.513857   Median :0.5008499   Median :0.4886027   Median :0.5252676  
##  Mean   :0.504918   Mean   :0.5015384   Mean   :0.4973700   Mean   :0.5123303  
##  3rd Qu.:0.761429   3rd Qu.:0.7458245   3rd Qu.:0.7520365   3rd Qu.:0.7569608  
##  Max.   :0.998546   Max.   :0.9993431   Max.   :0.9968358   Max.   :0.9999746  
##       x.9                 x.10                 y          
##  Min.   :0.0006859   Min.   :0.0006466   Min.   :-0.1529  
##  1st Qu.:0.2620676   1st Qu.:0.2527644   1st Qu.:10.7287  
##  Median :0.5036696   Median :0.4925590   Median :14.2324  
##  Mean   :0.5044159   Mean   :0.4960867   Mean   :14.2698  
##  3rd Qu.:0.7498544   3rd Qu.:0.7418533   3rd Qu.:17.7313  
##  Max.   :0.9996305   Max.   :0.9931607   Max.   :28.8621

Pemeriksaan nilai hilang dan duplikasi dilakukan untuk memastikan kondisi data sebelum pemodelan.

colSums(is.na(data_friedman))
##  x.1  x.2  x.3  x.4  x.5  x.6  x.7  x.8  x.9 x.10    y 
##    0    0    0    0    0    0    0    0    0    0    0
sum(duplicated(data_friedman))
## [1] 0

Hasil pemeriksaan menunjukkan bahwa data terdiri atas 1000 observasi dan 11 variabel (sepuluh prediktor dan satu respons). Jumlah nilai hilang pada seluruh variabel adalah 0 dan jumlah baris duplikat adalah 0. Dengan demikian, data tidak memerlukan imputasi maupun penghapusan observasi sehingga seluruh observasi dapat langsung digunakan pada tahap pemodelan.

4.2 Eksplorasi Data

Distribusi variabel respons diamati menggunakan histogram. Diagram pencar digunakan untuk melihat pola hubungan respons dengan beberapa prediktor.

ggplot(data_friedman, aes(x = y)) +
  geom_histogram(bins = 30, color = "white") +
  labs(
    title = "Distribusi Variabel Respons Friedman",
    x = "Nilai Y",
    y = "Frekuensi"
  ) +
  theme_minimal()
Gambar 1. Distribusi variabel respons Y

Gambar 1. Distribusi variabel respons Y

Gambar 1 memperlihatkan bahwa nilai Y berada pada rentang -0.15 sampai 28.86 dengan rata-rata 14.27, median 14.23, dan simpangan baku 5.02. Koefisien kemiringan sebesar 0.11 yang mendekati nol, sehingga sebaran Y relatif simetris dan tidak memerlukan transformasi sebelum pemodelan. Karena Random Forest tidak mensyaratkan distribusi tertentu pada respons, bentuk sebaran ini tidak menjadi hambatan pada tahap pemodelan.

data_friedman %>%
  select(y, x.1, x.2, x.3, x.4, x.5) %>%
  pivot_longer(
    cols = starts_with("x."),
    names_to = "Prediktor",
    values_to = "Nilai_X"
  ) %>%
  ggplot(aes(x = Nilai_X, y = y)) +
  geom_point(alpha = 0.45) +
  geom_smooth(method = "loess", se = FALSE) +
  facet_wrap(~ Prediktor, scales = "free_x") +
  labs(
    title = "Hubungan Respons dengan Lima Prediktor Pertama",
    x = "Nilai prediktor",
    y = "Y"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Gambar 2. Hubungan Y dengan X1 sampai X5

Gambar 2. Hubungan Y dengan X1 sampai X5

Gambar 2 menampilkan hubungan Y dengan lima prediktor pertama beserta kurva penghalus loess. Koefisien korelasi linear Pearson antara Y dan x.1 sampai x.5 berturut-turut adalah 0.38, 0.40, 0.03, 0.58, 0.30. Prediktor x.4 dan x.5 menunjukkan hubungan linear positif (korelasi 0.58 dan 0.30), sesuai dengan persamaan pembangkit data yang memuat suku linear 10·x4 dan 5·x5. Korelasi linear x.3 hanya sebesar 0.03, mendekati nol, padahal x.3 berperan melalui suku kuadratik 20(x3 − 0,5)². Hal ini menunjukkan bahwa hubungan yang berbentuk lengkung tidak tertangkap oleh korelasi linear. Prediktor x.1 dan x.2 berperan melalui suku interaksi 10 sin(π·x1·x2) sehingga hubungan marginal masing-masing terhadap Y relatif lemah (korelasi 0.38 dan 0.40), dan baru terlihat jelas apabila kedua prediktor dipertimbangkan bersama. Kombinasi hubungan linear, kuadratik, dan interaksi tersebut membuat model linear sederhana kurang memadai dan menjadi alasan penggunaan metode berbasis pohon.

Pola hubungan yang tidak sepenuhnya linier dapat menjadi alasan penggunaan metode berbasis pohon. Data Friedman juga memuat prediktor yang tidak informatif sehingga hasil variable importance dapat digunakan untuk mengamati kemampuan model dalam mengenali prediktor yang berkontribusi.

4.3 Pembagian Data Training dan Testing

Data dibagi menjadi 80% data training dan 20% data testing. Data training digunakan untuk membentuk model, sedangkan data testing digunakan untuk mengevaluasi kemampuan prediksi pada observasi yang tidak digunakan selama pelatihan. Seed 234 digunakan tepat sebelum proses pengambilan indeks sampel agar pembagian data dapat direproduksi.

set.seed(234)

n <- nrow(data_friedman)
id_train <- sample(seq_len(n), size = floor(0.80 * n))

data_train <- data_friedman[id_train, ]
data_test <- data_friedman[-id_train, ]

cat("Jumlah data keseluruhan:", nrow(data_friedman), "\n")
## Jumlah data keseluruhan: 1000
cat("Jumlah data training:", nrow(data_train), "\n")
## Jumlah data training: 800
cat("Jumlah data testing:", nrow(data_test), "\n")
## Jumlah data testing: 200

Pembagian data menghasilkan 800 observasi training (80%) dan 200 observasi testing (20%), sesuai proporsi yang ditetapkan. Data testing yang berjumlah 200 observasi relatif kecil sehingga nilai MSE, RMSE, MAE, dan \(R^2\) pada data testing dapat bervariasi apabila pembagian data diubah. Oleh karena itu, selisih kecil antarmodel pada pembahasan berikutnya perlu ditafsirkan secara hati-hati.

4.4 Pembentukan Model Random Forest Regression

Pemodelan dilakukan menggunakan fungsi ranger() dari paket ranger. Parameter mtry dibandingkan pada nilai 2, 3, dan 5, sedangkan num.trees dibandingkan pada 200, 500, dan 1000. Kombinasi tersebut menghasilkan sembilan model. Parameter importance = "permutation" digunakan untuk menghitung kepentingan variabel berdasarkan pengacakan prediktor. OOB error dihitung secara internal oleh model menggunakan observasi yang tidak terpilih dalam sampel bootstrap masing-masing pohon.

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

model_list <- vector("list", nrow(kombinasi))
nama_model <- paste0("mtry_", kombinasi$mtry,
                     "_trees_", kombinasi$num.trees)
names(model_list) <- nama_model

for (i in seq_len(nrow(kombinasi))) {
  set.seed(234)

  model_list[[i]] <- ranger(
    formula = y ~ .,
    data = data_train,
    num.trees = kombinasi$num.trees[i],
    mtry = kombinasi$mtry[i],
    importance = "permutation",
    seed = 234,
    num.threads = 1
  )
}

hasil_parameter <- kombinasi
hasil_parameter$Model <- nama_model

kable(hasil_parameter[, c("Model", "mtry", "num.trees")],
      caption = "Sembilan Kombinasi Parameter Random Forest")
Sembilan Kombinasi Parameter Random Forest
Model mtry num.trees
mtry_2_trees_200 2 200
mtry_3_trees_200 3 200
mtry_5_trees_200 5 200
mtry_2_trees_500 2 500
mtry_3_trees_500 3 500
mtry_5_trees_500 5 500
mtry_2_trees_1000 2 1000
mtry_3_trees_1000 3 1000
mtry_5_trees_1000 5 1000

Setiap model dibangun menggunakan data training yang sama. Penggunaan seed yang sama bertujuan menjaga proses pengacakan agar dapat direproduksi. Perbedaan hasil antarmodel selanjutnya diamati berdasarkan nilai OOB MSE dan evaluasi pada data testing.

4.5 Prediksi dan Evaluasi Model

Prediksi dilakukan pada data testing untuk seluruh kombinasi model. Metrik evaluasi yang digunakan adalah MSE, RMSE, MAE, dan \(R^2\). Nilai OOB MSE diperoleh dari komponen prediction.error pada objek model ranger() untuk regresi.

hitung_metrik <- function(aktual, prediksi) {
  mse <- mean((aktual - prediksi)^2)
  rmse <- sqrt(mse)
  mae <- mean(abs(aktual - prediksi))
  r2 <- 1 - sum((aktual - prediksi)^2) /
    sum((aktual - mean(aktual))^2)

  data.frame(
    MSE = mse,
    RMSE = rmse,
    MAE = mae,
    R2 = r2
  )
}

prediksi_list <- vector("list", length(model_list))
names(prediksi_list) <- names(model_list)
hasil_list <- vector("list", length(model_list))

for (i in seq_along(model_list)) {
  prediksi <- predict(model_list[[i]], data = data_test)$predictions
  prediksi_list[[i]] <- prediksi

  metrik <- hitung_metrik(data_test$y, prediksi)

  hasil_list[[i]] <- data.frame(
    Model = names(model_list)[i],
    mtry = kombinasi$mtry[i],
    num.trees = kombinasi$num.trees[i],
    OOB_MSE = model_list[[i]]$prediction.error,
    metrik
  )
}

hasil_evaluasi <- bind_rows(hasil_list) %>%
  arrange(RMSE)

kable(hasil_evaluasi, digits = 4,
      caption = "Perbandingan OOB MSE dan Performa pada Data Testing")
Perbandingan OOB MSE dan Performa pada Data Testing
Model mtry num.trees OOB_MSE MSE RMSE MAE R2
mtry_5_trees_1000 5 1000 4.0102 4.1630 2.0404 1.6046 0.8269
mtry_5_trees_500 5 500 4.0387 4.1796 2.0444 1.6152 0.8262
mtry_5_trees_200 5 200 4.1066 4.2566 2.0632 1.6312 0.8230
mtry_3_trees_1000 3 1000 4.4599 4.5041 2.1223 1.6677 0.8127
mtry_3_trees_500 3 500 4.4965 4.5164 2.1252 1.6771 0.8122
mtry_3_trees_200 3 200 4.5715 4.5913 2.1427 1.6891 0.8091
mtry_2_trees_1000 2 1000 5.3141 5.3636 2.3159 1.8326 0.7770
mtry_2_trees_500 2 500 5.2784 5.3822 2.3199 1.8344 0.7762
mtry_2_trees_200 2 200 5.4169 5.4468 2.3338 1.8344 0.7735

MSE, RMSE, dan MAE yang lebih kecil menunjukkan kesalahan prediksi yang lebih rendah. Nilai \(R^2\) yang lebih besar menunjukkan proporsi variasi respons yang lebih mampu dijelaskan oleh model. OOB MSE merupakan evaluasi internal yang dihitung dari observasi out-of-bag, sedangkan MSE testing dihitung menggunakan data testing yang dipisahkan sebelum pemodelan. Kedua nilai tersebut tidak harus sama karena berasal dari observasi evaluasi yang berbeda.

Model dengan RMSE testing terkecil dipilih sebagai model terbaik berdasarkan kriteria utama. Metrik lainnya dan OOB MSE tetap diperiksa untuk memperoleh gambaran performa yang lebih menyeluruh.

model_terbaik <- hasil_evaluasi %>% slice(1)

cat("Model terbaik berdasarkan RMSE testing:", model_terbaik$Model, "\n")
## Model terbaik berdasarkan RMSE testing: mtry_5_trees_1000
cat("mtry:", model_terbaik$mtry, "\n")
## mtry: 5
cat("Jumlah pohon:", model_terbaik$num.trees, "\n")
## Jumlah pohon: 1000
cat("OOB MSE:", round(model_terbaik$OOB_MSE, 4), "\n")
## OOB MSE: 4.0102
cat("MSE testing:", round(model_terbaik$MSE, 4), "\n")
## MSE testing: 4.163
cat("RMSE testing:", round(model_terbaik$RMSE, 4), "\n")
## RMSE testing: 2.0404
cat("MAE testing:", round(model_terbaik$MAE, 4), "\n")
## MAE testing: 1.6046
cat("R-squared testing:", round(model_terbaik$R2, 4), "\n")
## R-squared testing: 0.8269

Tabel di atas memuat hasil evaluasi sembilan kombinasi parameter yang diurutkan dari RMSE testing terkecil. RMSE testing berkisar dari 2.0404 pada model mtry_5_trees_1000 hingga 2.3338 pada model mtry_2_trees_200, sehingga selisih RMSE antara model terbaik dan terburuk adalah 0.2935 atau 12.6% dari RMSE model terburuk. Model terbaik menghasilkan MSE sebesar 4.1630 dan MAE sebesar 1.6046, yang berarti rata-rata selisih absolut antara nilai aktual dan prediksi pada data testing adalah 1.6046 satuan Y. MAE yang lebih kecil daripada RMSE (rasio MAE terhadap RMSE sebesar 0.79) merupakan hal yang wajar karena RMSE memberi bobot lebih besar pada galat yang besar; rasio yang mendekati 0,8 umumnya menunjukkan sebaran galat yang mendekati normal tanpa didominasi pengamatan ekstrem.

Nilai \(R^2\) pada data testing berkisar dari 0.7735 hingga 0.8269. Pada model terbaik, \(R^2\) sebesar 0.8269 berarti sekitar 82.7% variasi Y pada data testing dapat dijelaskan oleh model, sedangkan sekitar 17.3% variasi belum terjelaskan. Simpangan baku Y pada data testing adalah 4.92, sehingga RMSE model terbaik setara dengan 41.5% dari simpangan baku tersebut. Data Friedman dibangkitkan dengan galat acak yang bersimpangan baku 1 (sd = 1), sehingga galat yang tidak dapat dihilangkan oleh model apa pun berada di sekitar 1 pada skala RMSE. RMSE model terbaik berada sekitar 1.04 satuan di atas nilai tersebut, sehingga masih terdapat ruang perbaikan model.

Pemilihan model terbaik pada praktikum ini mengacu pada RMSE testing terkecil, sedangkan OOB MSE dari setiap model dibahas tersendiri pada subbab 4.7 sebagai evaluasi internal.

4.6 Perbandingan Metrik Evaluasi

Grafik berikut membandingkan MSE, RMSE, dan MAE testing pada sembilan kombinasi parameter. Skala sumbu dibuat bebas pada setiap panel agar pola perubahan masing-masing metrik dapat diamati dengan lebih jelas.

hasil_evaluasi %>%
  select(Model, MSE, RMSE, MAE) %>%
  pivot_longer(
    cols = c(MSE, RMSE, MAE),
    names_to = "Metrik",
    values_to = "Nilai"
  ) %>%
  ggplot(aes(x = Model, y = Nilai, fill = Model)) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ Metrik, scales = "free_y") +
  labs(
    title = "Perbandingan Kesalahan Prediksi",
    x = "Kombinasi model",
    y = "Nilai metrik"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Gambar 3. Perbandingan MSE, RMSE, dan MAE pada data testing

Gambar 3. Perbandingan MSE, RMSE, dan MAE pada data testing

ggplot(hasil_evaluasi,
       aes(x = reorder(Model, R2), y = R2)) +
  geom_col() +
  coord_flip() +
  labs(
    title = "R-squared untuk Setiap Kombinasi Model",
    x = "Model",
    y = expression(R^2)
  ) +
  theme_minimal()
Gambar 4. Perbandingan R-squared pada data testing

Gambar 4. Perbandingan R-squared pada data testing

Gambar 3 menunjukkan bahwa model dengan batang terendah pada panel MSE dan RMSE adalah mtry_5_trees_1000, sedangkan batang tertinggi dimiliki model mtry_2_trees_200. Karena RMSE merupakan akar kuadrat dari MSE, kedua ukuran tersebut selalu mengurutkan model dengan cara yang sama. Pada panel MAE, model dengan nilai terkecil adalah mtry_5_trees_1000, yang sama dengan model terbaik menurut RMSE, sehingga kesimpulan pemilihan model konsisten pada ketiga ukuran kesalahan.

Gambar 4 memperlihatkan nilai \(R^2\) dengan model teratas mtry_5_trees_1000 sebesar 0.8269 dan model terbawah mtry_2_trees_200 sebesar 0.7735. Rentang \(R^2\) antarmodel hanya 0.0534, yang menunjukkan bahwa kesembilan kombinasi parameter menghasilkan kemampuan penjelasan variasi yang relatif berdekatan. Pada data testing yang sama, \(R^2 = 1 - SSE/SST\) dengan SST yang tetap, sehingga urutan model berdasarkan \(R^2\) identik dengan urutan berdasarkan MSE.

Pengaruh mtry dapat dilihat dari rata-rata RMSE pada setiap nilainya, yaitu 2.3232 untuk mtry = 2, 2.1301 untuk mtry = 3, dan 2.0493 untuk mtry = 5, sehingga rata-rata RMSE menurun seiring bertambahnya mtry. Penurunan tersebut sejalan dengan struktur data Friedman yang hanya memuat lima prediktor informatif di antara sepuluh prediktor. Pada mtry = 2, peluang kedua kandidat pemisah pada suatu simpul sama-sama prediktor tidak informatif adalah sekitar 22%, pada mtry = 3 sekitar 8%, dan pada mtry = 5 sekitar 0,4%, sehingga mtry yang lebih besar lebih sering menyediakan prediktor informatif sebagai kandidat pemisah (Breiman, 2001).

Pengaruh jumlah pohon dapat dilihat dari rata-rata RMSE sebesar 2.1799 pada 200 pohon, 2.1632 pada 500 pohon, dan 2.1595 pada 1000 pohon. Perubahan dari 200 ke 1000 pohon adalah penurunan sebesar 0.94%. Perubahan yang sangat kecil ini sejalan dengan sifat Random Forest, yaitu galat generalisasi cenderung konvergen ketika jumlah pohon bertambah (Breiman, 2001). Dengan demikian, penambahan pohon di atas 200 tidak banyak mengubah akurasi, sedangkan waktu komputasi terus meningkat, dan selisih kecil antarjumlah pohon dapat berasal dari variasi pengacakan.

Rentang rata-rata RMSE antarnilai mtry sebesar 0.2739 dibandingkan 0.0204 antarjumlah pohon. Pada data ini mtry berpengaruh lebih besar terhadap performa dibandingkan jumlah pohon. Kesimpulan tersebut berasal dari satu kali pembagian data dan satu nilai seed sehingga perbedaan yang kecil sebaiknya tidak ditafsirkan berlebihan.

4.7 Analisis OOB MSE

OOB MSE merupakan ukuran kesalahan prediksi internal Random Forest. Pada setiap pohon, observasi yang tidak masuk ke sampel bootstrap digunakan untuk memperoleh prediksi OOB. Prediksi OOB dari pohon-pohon yang relevan kemudian digunakan untuk menghitung galat. Nilai OOB MSE yang lebih rendah menunjukkan kesalahan internal yang lebih kecil.

hasil_evaluasi %>%
  select(Model, OOB_MSE, MSE) %>%
  pivot_longer(
    cols = c(OOB_MSE, MSE),
    names_to = "Jenis_Evaluasi",
    values_to = "Nilai"
  ) %>%
  ggplot(aes(x = Model, y = Nilai, fill = Jenis_Evaluasi)) +
  geom_col(position = "dodge") +
  labs(
    title = "Perbandingan OOB MSE dan MSE Testing",
    x = "Model",
    y = "Mean Squared Error",
    fill = "Evaluasi"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Gambar 5. Perbandingan OOB MSE dan MSE testing

Gambar 5. Perbandingan OOB MSE dan MSE testing

Gambar 5 membandingkan OOB MSE yang dihitung pada data training dengan MSE yang dihitung pada data testing untuk setiap model. OOB MSE berkisar dari 4.0102 pada model mtry_5_trees_1000 hingga 5.4169 pada model mtry_2_trees_200 (setara OOB RMSE 2.0026 hingga 2.3274), sedangkan MSE testing berkisar dari 4.1630 hingga 5.4468. Rata-rata OOB MSE seluruh model adalah 4.6325 dan rata-rata MSE testing adalah 4.7115. OOB MSE lebih besar daripada MSE testing pada 0 dari 9 model. Selisih ini dapat terjadi karena kedua nilai dihitung dari kumpulan observasi yang berbeda: OOB MSE dari 800 observasi training dengan prediksi dari sebagian pohon, sedangkan MSE testing dari 200 observasi dengan prediksi dari seluruh pohon.

Korelasi peringkat Spearman antara OOB MSE dan MSE testing pada sembilan model adalah 0.98, yang menunjukkan bahwa model dengan OOB MSE rendah umumnya juga memiliki MSE testing rendah, sehingga OOB MSE cukup andal sebagai petunjuk awal dalam membandingkan kombinasi parameter tanpa memerlukan data validasi terpisah. Model dengan OOB MSE terendah adalah mtry_5_trees_1000, yang sama dengan model terbaik menurut RMSE testing, sehingga kedua pendekatan evaluasi memberikan kesimpulan yang sama. Perbedaan kecil antarmodel pada kedua ukuran ini juga dipengaruhi oleh variasi pengacakan bootstrap.

4.8 Residual Plot

Residual merupakan selisih antara nilai aktual dan nilai prediksi. Residual dihitung sebagai \(e_i=y_i-\hat{y}_i\). Residual plot digunakan untuk melihat pola kesalahan prediksi. Model yang baik diharapkan memiliki residual yang menyebar di sekitar nol tanpa pola sistematis yang jelas.

hasil_residual <- data.frame(
  Aktual = data_test$y,
  Prediksi = prediksi_list[[model_terbaik$Model]]
) %>%
  mutate(Residual = Aktual - Prediksi)
ggplot(hasil_residual, aes(x = Prediksi, y = Residual)) +
  geom_point(alpha = 0.65) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_smooth(method = "loess", se = FALSE) +
  labs(
    title = paste("Residual Plot", model_terbaik$Model),
    x = "Nilai prediksi",
    y = "Residual"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Gambar 6. Residual plot model terbaik

Gambar 6. Residual plot model terbaik

Gambar 6 menampilkan residual model mtry_5_trees_1000 terhadap nilai prediksinya pada data testing. Residual memiliki rata-rata -0.2652 dan simpangan baku 2.0281, dengan rentang dari -8.21 sampai 4.61. Rata-rata yang sangat dekat dengan nol menunjukkan bahwa model tidak cenderung menaksir terlalu tinggi maupun terlalu rendah secara keseluruhan. Sebanyak 67.0% residual berada dalam rentang ±2 satuan Y. Proporsi ini dapat dibandingkan dengan sekitar 95% yang diharapkan apabila sisa galat hanya berupa galat acak bersimpangan baku 1; proporsi yang lebih rendah menandakan galat model masih melampaui galat acak data.

Untuk memeriksa pola sistematis, observasi dibagi menjadi tiga kelompok nilai prediksi (rendah, sedang, dan tinggi). Rata-rata residual pada ketiga kelompok tersebut berturut-turut adalah -0.8387, -0.2340, dan 0.2776. Rata-rata residual pada ketiga kelompok relatif kecil dan tidak menunjukkan kecenderungan sistematis yang kuat, sehingga tidak tampak kegagalan model menangkap pola pada rentang prediksi tertentu. Korelasi antara nilai prediksi dan residual adalah 0.29, yang menunjukkan masih adanya hubungan linear antara besarnya prediksi dan arah kesalahan sehingga model belum sepenuhnya menangkap pola data. Korelasi antara nilai prediksi dan nilai absolut residual adalah -0.05, sehingga tidak terdapat indikasi kuat bahwa lebar sebaran residual berubah pada rentang prediksi yang berbeda (ragam galat relatif homogen).

4.9 Variable Importance

Variable importance digunakan untuk mengetahui prediktor yang memberikan kontribusi relatif besar terhadap prediksi model. Pada praktikum ini digunakan permutation importance. Nilai kepentingan yang lebih tinggi menunjukkan bahwa pengacakan prediktor tersebut lebih banyak mengurangi kemampuan prediksi model.

importance_terbaik <- sort(
  model_list[[model_terbaik$Model]]$variable.importance,
  decreasing = TRUE
)

data_importance <- data.frame(
  Variabel = names(importance_terbaik),
  Importance = as.numeric(importance_terbaik)
)
ggplot(data_importance,
       aes(x = reorder(Variabel, Importance), y = Importance)) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Variable Importance Random Forest",
    x = "Variabel prediktor",
    y = "Permutation importance"
  ) +
  theme_minimal()
Gambar 7. Variable importance model terbaik

Gambar 7. Variable importance model terbaik

Gambar 7 menampilkan permutation importance dari model mtry_5_trees_1000. Tiga prediktor dengan nilai tertinggi adalah x.4 (15.64), x.2 (10.77), dan x.1 (8.81). Dari lima prediktor dengan importance tertinggi, 5 merupakan prediktor yang memang berperan dalam persamaan pembangkit data (x.1 sampai x.5). Peringkat prediktor informatif tersebut berturut-turut adalah x.1 pada peringkat 3, x.2 pada peringkat 2, x.3 pada peringkat 5, x.4 pada peringkat 1, dan x.5 pada peringkat 4.

Prediktor tidak informatif (x.6 sampai x.10) memiliki importance antara -0.01 dan 0.07, sedangkan prediktor informatif memiliki importance antara 1.43 dan 15.64. Seluruh prediktor informatif memiliki importance lebih tinggi daripada seluruh prediktor tidak informatif, sehingga model berhasil membedakan prediktor yang berkontribusi dari prediktor yang hanya berperan sebagai noise. Nilai permutation importance dapat mendekati nol atau sedikit negatif pada prediktor yang tidak berkontribusi karena pengacakan nilainya tidak menurunkan, atau hanya mengubah secara acak, kemampuan prediksi.

Perbedaan besar importance antarprediktor informatif sesuai dengan bentuk persamaan pembangkit data. Prediktor x.4 berperan melalui suku linear dengan koefisien 10 dan x.5 dengan koefisien 5, x.3 berperan melalui suku kuadratik 20(x3 − 0,5)², sedangkan x.1 dan x.2 berperan secara bersama melalui interaksi 10 sin(π·x1·x2), sehingga kontribusi masing-masing prediktor terpisah lebih sulit dibedakan. Hasil ini menunjukkan kontribusi prediktif dalam model, bukan hubungan sebab-akibat (Strobl dkk., 2007). Selain itu, importance di atas dihitung dari satu model terbaik sehingga urutan prediktor dengan nilai yang berdekatan dapat berubah apabila model dibangun ulang dengan pengacakan yang berbeda.

4.10 Interpretasi Hasil Secara Keseluruhan

Berdasarkan evaluasi pada data testing, model dengan performa terbaik berdasarkan RMSE adalah mtry_5_trees_1000. Model tersebut menggunakan nilai mtry sebesar 5 dan jumlah pohon sebanyak 1000. Model menghasilkan OOB MSE sebesar 4.0102, MSE testing sebesar 4.1630, RMSE sebesar 2.0404, MAE sebesar 1.6046, serta \(R^2\) sebesar 0.8269. Sebagai pembanding, model dengan RMSE testing terbesar adalah mtry_2_trees_200 dengan RMSE sebesar 2.3338.

Model terbaik ditentukan berdasarkan RMSE testing terkecil karena ukuran tersebut menyatakan besarnya kesalahan prediksi dalam satuan yang sama dengan respons. MSE dan MAE digunakan sebagai ukuran pendukung, sedangkan \(R^2\) menunjukkan proporsi variasi respons yang dapat dijelaskan model. OOB MSE memberikan informasi tambahan mengenai kesalahan internal model. Dengan mempertimbangkan seluruh ukuran tersebut, perbandingan sembilan kombinasi parameter dapat memberikan gambaran mengenai pengaruh mtry dan num.trees terhadap performa Random Forest.

Pembahasan di atas dapat dikaitkan dengan rumusan masalah dan batasan analisis praktikum sebagai berikut.

  1. Memahami Random Forest dan Double Random Forest. Random Forest membentuk pohon dari sampel bootstrap dengan pemilihan prediktor acak pada setiap simpul (Breiman, 2001), sedangkan Double Random Forest melakukan bootstrap pada setiap simpul selama pembentukan pohon (Han dkk., 2020). Pemahaman konsep ini dirangkum pada Bab II.
  2. Mengimplementasikan model. Sesuai batasan analisis, implementasi dilakukan pada Random Forest Regression menggunakan fungsi ranger() pada data Friedman dengan sembilan kombinasi mtry dan num.trees. Implementasi untuk klasifikasi dan untuk Double Random Forest tidak termasuk dalam batasan analisis komputasi sehingga tidak dijalankan pada praktikum ini.
  3. Mengevaluasi performa dan memahami OOB error. Performa dievaluasi dengan MSE, RMSE, MAE, \(R^2\), residual plot, dan variable importance. OOB MSE berkisar dari 4.0102 hingga 5.4169 dan digunakan sebagai evaluasi internal yang melengkapi, bukan menggantikan, evaluasi pada data testing.

Perbandingan numerik antara Random Forest dan Double Random Forest tidak dilakukan karena Double Random Forest tidak diimplementasikan pada analisis ini. Perbandingan keduanya pada praktikum ini bersifat konseptual, yaitu pada mekanisme pengambilan sampel: satu sampel bootstrap per pohon pada Random Forest dan bootstrap pada setiap simpul pada Double Random Forest (Han dkk., 2020). Oleh karena itu, hasil numerik pada Bab IV hanya dapat digunakan untuk menilai performa Random Forest Regression pada sembilan kombinasi parameter, dan tidak dapat digunakan untuk menyimpulkan metode mana yang lebih unggul.

BAB V KESIMPULAN

Berdasarkan praktikum Random Forest Regression pada data Friedman, model dibangun menggunakan sembilan kombinasi parameter, yaitu mtry sebesar 2, 3, dan 5 serta num.trees sebesar 200, 500, dan 1000. Data dibagi menjadi 80% data training dan 20% data testing dengan menggunakan set.seed(234) agar proses pembagian dapat direproduksi. Performa model dievaluasi menggunakan MSE, RMSE, MAE, \(R^2\), dan OOB MSE.

Model terbaik berdasarkan RMSE terkecil pada data testing adalah mtry_5_trees_1000 dengan RMSE sebesar 2.0404, MAE sebesar 1.6046, dan \(R^2\) sebesar 0.8269, yang berarti sekitar 82.7% variasi respons pada data testing dapat dijelaskan oleh model. Rata-rata RMSE menurun seiring bertambahnya mtry, dan perubahan jumlah pohon dari 200 ke 1000 mengubah rata-rata RMSE sebesar 0.94%. OOB MSE digunakan sebagai evaluasi internal yang melengkapi evaluasi data testing, dengan korelasi peringkat Spearman terhadap MSE testing sebesar 0.98. Residual plot memberikan gambaran mengenai pola kesalahan prediksi, sedangkan variable importance menunjukkan bahwa 5 dari 5 prediktor dengan importance tertinggi merupakan prediktor informatif pada data Friedman.

Secara teori, Random Forest dan Double Random Forest memiliki mekanisme pembentukan pohon yang berbeda. Random Forest menggunakan sampel bootstrap pada pembentukan setiap pohon, sedangkan Double Random Forest menerapkan bootstrap pada setiap simpul ketika menentukan pemisahan. Praktikum komputasi ini dibatasi pada Random Forest Regression sesuai batasan analisis yang diberikan, sehingga hasil numerik yang diperoleh tidak dapat digunakan untuk menyimpulkan bahwa Random Forest lebih baik atau lebih buruk daripada Double Random Forest.

DAFTAR PUSTAKA

Breiman, L. (1996). Bagging predictors. Machine Learning, 24(2), 123–140. https://doi.org/10.1007/BF00058655

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

Dietterich, T. G. (2000). Ensemble methods in machine learning. Dalam Multiple classifier systems (MCS 2000) (Lecture Notes in Computer Science, Vol. 1857, hlm. 1–15). Springer. https://doi.org/10.1007/3-540-45014-9_1

Friedman, J. H. (1991). Multivariate adaptive regression splines. The Annals of Statistics, 19(1), 1–67. https://doi.org/10.1214/aos/1176347963

Ganaie, M. A., Tanveer, M., Suganthan, P. N., & Snasel, V. (2022). Oblique and rotation double random forest. Neural Networks, 153, 496–517. https://doi.org/10.1016/j.neunet.2022.06.012

Han, S., Kim, H., & Lee, Y.-S. (2020). Double random forest. Machine Learning, 109, 1569–1586. https://doi.org/10.1007/s10994-020-05889-1

Hastie, T., Tibshirani, R., & Friedman, J. (2009). The elements of statistical learning: Data mining, inference, and prediction (2nd ed.). Springer. https://doi.org/10.1007/978-0-387-84858-7

Hyndman, R. J., & Koehler, A. B. (2006). Another look at measures of forecast accuracy. International Journal of Forecasting, 22(4), 679–688. https://doi.org/10.1016/j.ijforecast.2006.03.001

James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An introduction to statistical learning: With applications in R (2nd ed.). Springer. https://doi.org/10.1007/978-1-0716-1418-1

Leisch, F., & Dimitriadou, E. (2024). mlbench: Machine learning benchmark problems. R package documentation. https://CRAN.R-project.org/package=mlbench

Probst, P., Wright, M. N., & Boulesteix, A.-L. (2019). Hyperparameters and tuning strategies for random forest. WIREs Data Mining and Knowledge Discovery, 9(3), e1301. https://doi.org/10.1002/widm.1301

Smith, H. L., Biggs, P. J., French, N. P., Smith, A. N. H., & Marshall, J. C. (2024). Out of (the) bag—encoding categorical predictors impacts out-of-bag samples. PeerJ Computer Science, 10, e2445. https://doi.org/10.7717/peerj-cs.2445

Strobl, C., Boulesteix, A.-L., Zeileis, A., & Hothorn, T. (2007). Bias in random forest variable importance measures: Illustrations, sources and a solution. BMC Bioinformatics, 8, 25. https://doi.org/10.1186/1471-2105-8-25

Willmott, C. J., & Matsuura, K. (2005). Advantages of the mean absolute error (MAE) over the root mean square error (RMSE) in assessing average model performance. Climate Research, 30(1), 79–82. https://doi.org/10.3354/cr030079

Wright, M. N., & Ziegler, A. (2017). ranger: A fast implementation of random forests for high dimensional data in C++ and R. Journal of Statistical Software, 77(1), 1–17. https://doi.org/10.18637/jss.v077.i01