BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Machine learning merupakan salah satu pendekatan dalam analisis data yang digunakan untuk mempelajari pola dari data dan menghasilkan prediksi berdasarkan proses pembelajaran. Salah satu pendekatan yang dapat digunakan untuk meningkatkan kemampuan prediksi adalah ensemble learning, yaitu metode yang menggabungkan beberapa model dasar untuk menghasilkan prediksi yang lebih baik. Salah satu metode ensemble learning berbasis pohon keputusan (decision tree) adalah Random Forest, yang membangun sejumlah pohon keputusan melalui proses bootstrap sampling dan pemilihan prediktor secara acak pada setiap node. Penggabungan hasil prediksi dari seluruh pohon dilakukan menggunakan majority voting untuk klasifikasi dan rata-rata prediksi untuk regresi. Konsep penggabungan sejumlah pohon keputusan tersebut menjadi salah satu karakteristik utama Random Forest dalam meningkatkan kemampuan generalisasi model (Fauzi dkk., 2020).

Random Forest dapat diterapkan pada permasalahan klasifikasi maupun regresi. Pengembangan metode ini menghasilkan pendekatan Double Random Forest (DRF), yang menggunakan seluruh data latih dalam proses pembentukan setiap pohon, sedangkan bootstrap sampling dilakukan pada setiap node untuk menentukan aturan pemisahan terbaik. Perbedaan mekanisme pembentukan pohon tersebut menyebabkan DRF cenderung menghasilkan pohon yang lebih besar dibandingkan Random Forest, tetapi membutuhkan waktu komputasi yang lebih lama. Penelitian Khikmah dkk. (2024) membahas perbandingan beberapa algoritma ensemble learning berbasis pohon keputusan untuk klasifikasi ketahanan pangan rumah tangga. Penerapan Random Forest dalam permasalahan klasifikasi juga dilakukan oleh Fauzi dkk. (2020) untuk mengelompokkan status ketenagakerjaan di Jawa Barat. Penelitian tersebut menunjukkan bahwa metode Random Forest dapat digunakan untuk membangun model klasifikasi berdasarkan sejumlah variabel prediktor.

Penerapan Random Forest dan Double Random Forest memerlukan evaluasi untuk mengetahui kemampuan model dalam menghasilkan prediksi. Salah satu ukuran evaluasi internal yang dapat digunakan adalah Out-of-Bag (OOB) error, yaitu kesalahan prediksi yang dihitung menggunakan observasi yang tidak digunakan dalam pembentukan pohon tertentu. Pada kasus klasifikasi, evaluasi performa model dapat dilakukan menggunakan confusion matrix, accuracy, precision, recall, specificity, dan F1-score. Sementara itu, pada kasus regresi, evaluasi dapat dilakukan menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). Ilma dkk. (2025) membahas penggunaan pendekatan Out-of-Bag dalam estimasi interval prediksi berbasis Random Forest untuk kasus regresi. Berbagai ukuran evaluasi tersebut diperlukan untuk mengetahui kemampuan prediksi model serta membandingkan kinerja Random Forest dan Double Random Forest berdasarkan karakteristik permasalahan yang dianalisis.

1.2 Rumusan Masalah

  1. Bagaimana memahami konsep Random Forest dan Double Random Forest sebagai metode ensemble learning berbasis decision tree?
  2. Bagaimana mengimplementasikan Random Forest dan Double Random Forest untuk kasus klasifikasi dan regresi menggunakan R?
  3. Bagaimana mengevaluasi performa model, memahami Out-of-Bag (OOB) error, serta membandingkan kinerja Random Forest dan Double Random Forest?

1.3 Tujuan

  1. Mahasiswa dapat memahami Random Forest dan Double Random Forest sebagai metode ensemble learning berbasis decision tree.
  2. Mahasiswa dapat mengimplementasikan Random Forest dan Double Random Forest untuk kasus klasifikasi dan regresi menggunakan R.
  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

Machine learning merupakan pendekatan dalam analisis data yang memungkinkan komputer mempelajari pola dan hubungan berdasarkan data untuk menghasilkan prediksi. Proses pembelajaran dilakukan dengan membentuk model menggunakan data pelatihan (training data), kemudian model tersebut digunakan untuk memprediksi hasil pada data baru. Secara umum, permasalahan machine learning dapat dibedakan menjadi klasifikasi dan regresi. Klasifikasi digunakan untuk memprediksi kelas atau kategori suatu observasi, sedangkan regresi digunakan untuk memprediksi nilai numerik. Pemilihan metode pembelajaran perlu disesuaikan dengan karakteristik data dan tujuan analisis agar model dapat menghasilkan prediksi yang sesuai.

Salah satu pendekatan dalam machine learning adalah ensemble learning, yaitu metode yang menggabungkan beberapa model dasar (base learner) untuk menghasilkan satu model gabungan. Pendekatan ini bertujuan meningkatkan kemampuan prediksi dan mengurangi kesalahan yang mungkin dihasilkan oleh penggunaan satu model saja. Model dasar yang digunakan dapat berupa pohon keputusan (decision tree) yang dibentuk dari data pelatihan. Hasil prediksi dari setiap model kemudian digabungkan menggunakan mekanisme tertentu untuk memperoleh prediksi akhir. Penggabungan beberapa model tersebut menjadi dasar pengembangan metode ensemble learning seperti Bagging, Random Forest, dan Boosting (Fransiska, 2026).

Secara umum, metode ensemble learning dapat dibedakan berdasarkan mekanisme pembentukan modelnya, yaitu Bagging dan Boosting. Bagging atau Bootstrap Aggregating membentuk beberapa model menggunakan sampel hasil pengambilan ulang (resampling) dari data pelatihan. Setiap model dibentuk secara relatif independen, kemudian hasil prediksinya digabungkan menggunakan majority voting untuk klasifikasi atau rata-rata untuk regresi. Sementara itu, Boosting membangun model secara berurutan dengan memperhatikan kesalahan prediksi dari model sebelumnya. Perbedaan mekanisme tersebut menyebabkan Bagging berfokus pada pengurangan variansi melalui agregasi model, sedangkan Boosting berfokus pada perbaikan kesalahan prediksi secara bertahap (Fransiska, 2026).

Salah satu penerapan ensemble learning berbasis pohon keputusan dilakukan oleh Khikmah dkk. (2024) melalui perbandingan metode Random Forest, Gradient Boosting, Rotation Forest, dan Extremely Randomized Tree untuk klasifikasi pengalaman kerawanan pangan rumah tangga di Jawa Barat. Penelitian tersebut menggunakan data Survei Sosial Ekonomi Nasional tahun 2020 dan menunjukkan bahwa kombinasi Random Forest dengan teknik random undersampling menghasilkan metode klasifikasi terbaik pada data yang diteliti. Penelitian tersebut memperlihatkan bahwa penggabungan sejumlah pohon keputusan dapat digunakan sebagai pendekatan dalam membangun model klasifikasi serta membandingkan kemampuan prediksi berbagai metode ensemble learning.

2.2 Random Forest

Random Forest (RF) merupakan metode ensemble learning berbasis pohon keputusan yang membangun banyak pohon (decision trees) dan menggabungkan hasil prediksinya untuk meningkatkan akurasi serta mengurangi variansi model. Metode ini merupakan pengembangan dari Bagging dengan menambahkan proses pemilihan prediktor secara acak pada setiap node. Pemilihan prediktor secara acak bertujuan mengurangi korelasi antar-pohon sehingga setiap pohon memiliki karakteristik yang berbeda. Penggabungan hasil prediksi dari sejumlah pohon tersebut diharapkan menghasilkan model dengan kemampuan generalisasi yang lebih baik (Fransiska, 2026).

Proses pembentukan Random Forest diawali dengan melakukan bootstrap sampling, yaitu pengambilan sampel secara acak dengan pengembalian dari data pelatihan. Misalkan tersedia data pelatihan sebanyak \(n\) observasi, maka setiap sampel bootstrap dibentuk dengan mengambil \(n\) observasi dari data tersebut. Karena pengambilan dilakukan dengan pengembalian, satu observasi dapat terambil lebih dari satu kali, sedangkan observasi lainnya mungkin tidak terambil. Secara rata-rata, proporsi observasi unik yang masuk ke dalam satu sampel bootstrap mendekati \(63,2\%\) dari keseluruhan data pelatihan. Sampel tersebut kemudian digunakan untuk membentuk satu pohon keputusan (Fransiska, 2026).

Selain bootstrap sampling, Random Forest menerapkan random feature selection, yaitu pemilihan sejumlah prediktor secara acak pada setiap node. Jika terdapat \(p\) prediktor dalam data pelatihan, maka hanya sejumlah \(mtry\) prediktor yang dipilih secara acak untuk dipertimbangkan dalam menentukan pemisahan terbaik. Pemisahan dilakukan berdasarkan kriteria tertentu sesuai dengan jenis permasalahan, seperti Gini untuk klasifikasi dan variance untuk regresi. Proses tersebut dilakukan pada setiap node hingga pohon memenuhi aturan penghentian yang telah ditentukan. Penggunaan random feature selection bertujuan mengurangi kemiripan antar-pohon sehingga agregasi prediksi dapat bekerja lebih efektif (Fransiska, 2026).

Secara matematis, prediksi Random Forest untuk kasus klasifikasi diperoleh melalui mekanisme majority voting. Misalkan terdapat \(B\) pohon keputusan yang dibentuk, maka prediksi akhir dapat dirumuskan sebagai berikut.

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

dengan \(\hat{G}_{RF}(x)\) merupakan prediksi kelas akhir, \(G_b(x)\) merupakan prediksi kelas dari pohon ke-\(b\), dan \(B\) merupakan jumlah pohon yang dibentuk. Prediksi akhir ditentukan berdasarkan kelas yang memperoleh suara terbanyak dari seluruh pohon keputusan.

Pada kasus regresi, prediksi akhir Random Forest diperoleh dengan menghitung rata-rata hasil prediksi dari seluruh pohon keputusan. Persamaan prediksi regresi Random Forest dapat dituliskan sebagai berikut.

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

dengan \(\hat{f}_{RF}(x)\) merupakan prediksi akhir untuk variabel respons, \(T_b(x)\) merupakan hasil prediksi pohon ke-\(b\), dan \(B\) merupakan jumlah pohon dalam model. Penggunaan rata-rata prediksi bertujuan menghasilkan nilai prediksi gabungan dari seluruh pohon keputusan yang dibentuk (Fransiska, 2026).

Penerapan Random Forest untuk klasifikasi telah dilakukan oleh Fauzi dkk. (2021) dalam penelitian mengenai klasifikasi angkatan kerja di Jawa Barat tahun 2018. Penelitian tersebut menggunakan data Sakernas 2018 dengan membagi data menjadi 80% data pelatihan dan 20% data pengujian. Hasil penelitian menunjukkan bahwa variabel status perkawinan dan tingkat pendidikan memiliki kontribusi besar dalam proses klasifikasi status ketenagakerjaan. Penelitian tersebut memperlihatkan bahwa Random Forest dapat digunakan untuk mengklasifikasikan observasi berdasarkan sejumlah karakteristik prediktor.

Penerapan Random Forest juga dilakukan oleh Nurpiana dan Wijayanto (2022) melalui perbandingan algoritma Support Vector Machine, Conditional Inference Trees, dan Random Forest untuk klasifikasi capaian belajar siswa SMP di Indonesia. Penelitian tersebut menggunakan data dari 514 kabupaten/kota dan membandingkan kemampuan ketiga metode dalam mengklasifikasikan kategori capaian belajar. Selain itu, Sukarna dkk. (2023) membandingkan Logistic Model Tree dan Random Forest untuk klasifikasi status kemiskinan kabupaten/kota di Indonesia. Hasil penelitian tersebut menunjukkan bahwa Random Forest memberikan kinerja klasifikasi yang lebih baik dibandingkan Logistic Model Tree pada data yang dianalisis. Kedua penelitian tersebut memperlihatkan penerapan Random Forest dalam berbagai permasalahan klasifikasi di Indonesia.

Salah satu konsep penting dalam Random Forest adalah Out-of-Bag (OOB) error. OOB merupakan kesalahan prediksi yang dihitung menggunakan observasi yang tidak terpilih dalam sampel bootstrap untuk membentuk pohon tertentu. Dalam proses bootstrap sampling, sekitar \(36,8\%\) observasi rata-rata tidak terambil dan disebut sebagai observasi OOB. Prediksi OOB untuk setiap observasi diperoleh dengan menggunakan pohon-pohon yang tidak melibatkan observasi tersebut dalam proses pembentukannya. Nilai OOB dapat digunakan sebagai evaluasi internal model tanpa harus menyediakan data pengujian tambahan untuk menghitung ukuran kesalahan tersebut (Fransiska, 2026).

Secara matematis, prediksi OOB untuk observasi ke-\(i\) pada kasus regresi dapat dirumuskan sebagai berikut.

\[ \hat{y}_{i}^{OOB}= \frac{1}{|B_i|} \sum_{b\in B_i}T_b(x_i) \]

dengan \(\hat{y}_{i}^{OOB}\) merupakan prediksi OOB untuk observasi ke-\(i\), \(B_i\) merupakan himpunan pohon yang tidak menggunakan observasi ke-\(i\) dalam pembentukan sampelnya, \(|B_i|\) merupakan jumlah pohon dalam himpunan tersebut, dan \(T_b(x_i)\) merupakan prediksi pohon ke-\(b\) terhadap observasi ke-\(i\). Pada klasifikasi, prediksi OOB diperoleh melalui majority voting dari pohon-pohon yang tidak menggunakan observasi tersebut.

Evaluasi OOB dapat digunakan untuk mengukur kesalahan prediksi model. Pada klasifikasi, OOB error menunjukkan proporsi observasi yang salah diklasifikasikan berdasarkan prediksi OOB. Sementara itu, pada regresi, OOB error dapat dihitung menggunakan Mean Squared Error (MSE) antara nilai aktual dan prediksi OOB. Ilma dkk. (2025) membahas penggunaan pendekatan Out-of-Bag Prediction Interval dalam pembentukan interval prediksi berbasis Random Forest dengan prediktor yang berkorelasi. Penelitian tersebut menunjukkan bahwa pendekatan OOB dapat dimanfaatkan dalam analisis ketidakpastian hasil prediksi pada permasalahan regresi.

2.3 Double Random Forest dan Evaluasi Model

Double Random Forest (DRF) merupakan pengembangan metode Random Forest yang diperkenalkan oleh Han, Kim, dan Lee pada tahun 2020. Metode ini dikembangkan untuk mengatasi kondisi underfitting pada Random Forest ketika pohon keputusan yang dihasilkan belum cukup besar. Perbedaan utama antara Random Forest dan Double Random Forest terletak pada mekanisme pengambilan sampel dalam pembentukan pohon. Random Forest menggunakan satu sampel bootstrap untuk membentuk keseluruhan pohon, sedangkan Double Random Forest menggunakan seluruh data pelatihan untuk membentuk setiap pohon dan menerapkan bootstrap sampling pada setiap node untuk menentukan aturan pemisahan terbaik (Fransiska, 2026).

Proses pembentukan Double Random Forest diawali dengan menggunakan seluruh observasi dalam data pelatihan sebagai data awal setiap pohon. Pada setiap node, dilakukan pengambilan sampel bootstrap dari observasi yang mencapai node tersebut. Selanjutnya, sejumlah prediktor dipilih secara acak berdasarkan parameter \(mtry\) untuk menentukan pemisahan terbaik. Setelah aturan pemisahan diperoleh, sampel bootstrap tidak diteruskan ke node berikutnya. Aturan pemisahan yang telah ditentukan diterapkan kembali pada seluruh observasi asli yang mencapai node tersebut sehingga observasi dapat diteruskan ke node anak (child nodes). Proses tersebut diulangi pada setiap node hingga memenuhi aturan penghentian yang telah ditentukan (Fransiska, 2026).

Secara umum, tahapan pembentukan Double Random Forest dapat dijelaskan sebagai berikut.

  1. Memulai pembentukan setiap pohon menggunakan seluruh data pelatihan.
  2. Mengambil sampel bootstrap dari observasi yang mencapai node yang sedang diproses.
  3. Memilih sejumlah prediktor secara acak berdasarkan parameter \(mtry\).
  4. Menentukan aturan pemisahan terbaik menggunakan sampel bootstrap pada node tersebut.
  5. Menerapkan aturan pemisahan pada seluruh observasi asli yang mencapai node.
  6. Mengulangi proses pembentukan pada node berikutnya hingga memenuhi aturan penghentian.
  7. Menggabungkan hasil prediksi seluruh pohon menggunakan majority voting untuk klasifikasi atau rata-rata prediksi untuk regresi.

Perbedaan mekanisme pembentukan pohon menyebabkan Random Forest dan Double Random Forest memiliki karakteristik yang berbeda. Random Forest menggunakan sampel bootstrap pada awal pembentukan setiap pohon sehingga jumlah observasi unik yang digunakan dalam satu pohon rata-rata sekitar \(63,2\%\) dari data pelatihan. Sebaliknya, Double Random Forest menggunakan seluruh data pelatihan untuk menumbuhkan setiap pohon, sedangkan bootstrap sampling hanya digunakan sementara dalam menentukan aturan pemisahan pada setiap node. Mekanisme tersebut membuat Double Random Forest cenderung menghasilkan pohon yang lebih besar, tetapi membutuhkan waktu komputasi lebih lama dibandingkan Random Forest (Fransiska, 2026).

Beberapa parameter penting yang digunakan dalam pembentukan Random Forest dan Double Random Forest meliputi jumlah pohon (num.trees), jumlah prediktor yang dipilih secara acak (mtry), ukuran minimum node (min.node.size), mekanisme pengambilan sampel (replace dan sample.fraction), aturan pemisahan (splitrule), serta pengukuran kepentingan variabel (importance). Parameter num.trees menentukan jumlah pohon yang dibentuk dalam model, sedangkan mtry menentukan jumlah prediktor yang dipertimbangkan secara acak pada setiap node. Parameter min.node.size mengatur jumlah minimum observasi dalam node terminal, sedangkan importance digunakan untuk mengetahui kontribusi masing-masing prediktor terhadap pembentukan model (Fransiska, 2026).

Evaluasi performa Random Forest dan Double Random Forest dilakukan untuk mengetahui kemampuan kedua metode dalam menghasilkan prediksi. Evaluasi disesuaikan dengan jenis permasalahan yang dianalisis, yaitu klasifikasi atau regresi. Pada klasifikasi, evaluasi dapat dilakukan menggunakan confusion matrix, accuracy, precision, recall, specificity, dan F1-score. Sementara itu, pada regresi, evaluasi dapat dilakukan menggunakan MSE, RMSE, MAE, dan koefisien determinasi (\(R^2\)). Perbandingan hasil evaluasi kedua metode dapat digunakan untuk mengetahui model yang memberikan kemampuan prediksi lebih baik pada data yang dianalisis (Fransiska, 2026).

Pada kasus klasifikasi, confusion matrix merupakan tabel yang membandingkan kelas aktual dengan kelas hasil prediksi. Tabel tersebut terdiri atas empat komponen, yaitu True Positive (TP), True Negative (TN), False Positive (FP), dan False Negative (FN). Keempat komponen tersebut digunakan untuk menghitung ukuran evaluasi klasifikasi sebagai berikut.

  1. Accuracy merupakan proporsi seluruh observasi yang diklasifikasikan dengan benar.

\[ Accuracy=\frac{TP+TN}{TP+TN+FP+FN} \]

  1. Precision merupakan proporsi prediksi positif yang benar-benar termasuk kelas positif.

\[ Precision=\frac{TP}{TP+FP} \]

  1. Recall atau sensitivitas merupakan proporsi observasi positif aktual yang berhasil diprediksi sebagai positif.

\[ Recall=\frac{TP}{TP+FN} \]

  1. Specificity merupakan proporsi observasi negatif aktual yang berhasil diprediksi sebagai negatif.

\[ Specificity=\frac{TN}{TN+FP} \]

  1. F1-score merupakan rata-rata harmonik antara precision dan recall.

\[ F1=2\frac{Precision\times Recall} {Precision+Recall} \]

Ukuran evaluasi tersebut memberikan informasi yang berbeda mengenai kemampuan model dalam melakukan klasifikasi. Nilai accuracy, precision, recall, specificity, dan F1-score yang semakin besar menunjukkan performa klasifikasi yang semakin baik. Nurpiana dan Wijayanto (2022) menggunakan beberapa ukuran evaluasi klasifikasi untuk membandingkan Random Forest dengan metode klasifikasi lainnya. Penggunaan berbagai ukuran tersebut membantu memberikan gambaran mengenai kemampuan model dalam mengklasifikasikan observasi ke dalam kategori yang sesuai.

Pada kasus regresi, evaluasi dilakukan dengan mengukur selisih antara nilai aktual dan nilai prediksi. Beberapa ukuran evaluasi yang dapat digunakan adalah sebagai berikut.

  1. Mean Squared Error (MSE) merupakan rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi.

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

  1. Root Mean Squared Error (RMSE) merupakan akar kuadrat dari MSE sehingga memiliki satuan yang sama dengan variabel respons.

\[ RMSE=\sqrt{MSE} \]

  1. Mean Absolute Error (MAE) merupakan rata-rata nilai absolut selisih antara nilai aktual dan nilai prediksi.

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

  1. Koefisien determinasi (\(R^2\)) merupakan ukuran yang menggambarkan kemampuan model dalam menjelaskan variasi nilai aktual berdasarkan hasil prediksi.

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

dengan \(y_i\) merupakan nilai aktual observasi ke-\(i\), \(\hat{y}_i\) merupakan nilai prediksi, \(\bar{y}\) merupakan rata-rata nilai aktual, dan \(n\) merupakan jumlah observasi. Nilai MSE, RMSE, dan MAE yang semakin kecil menunjukkan kesalahan prediksi yang semakin rendah. Sementara itu, nilai \(R^2\) yang semakin besar menunjukkan kemampuan model yang semakin baik dalam menjelaskan variasi variabel respons. Ilma dkk. (2025) juga membahas evaluasi model Random Forest untuk regresi melalui pendekatan interval prediksi dengan mempertimbangkan korelasi antar-prediktor.

Selain ukuran evaluasi tersebut, variable importance dapat digunakan untuk mengetahui kontribusi masing-masing prediktor dalam pembentukan model. Pada Random Forest, salah satu pendekatan yang dapat digunakan adalah permutation importance, yaitu mengukur perubahan kinerja model setelah nilai suatu prediktor diacak. Perubahan kinerja yang lebih besar menunjukkan bahwa prediktor tersebut memiliki kontribusi yang lebih penting terhadap kemampuan prediksi model. Informasi ini dapat digunakan untuk mengidentifikasi prediktor yang berperan dalam proses klasifikasi maupun regresi (Fransiska, 2026).

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data yang digunakan dalam praktikum ini adalah data kuantitatif. Data kuantitatif merupakan data yang dinyatakan dalam bentuk angka sehingga dapat digunakan untuk melakukan perhitungan dan analisis statistik. Data yang digunakan mencakup variabel prediktor numerik dan variabel respons numerik yang sesuai untuk analisis regresi.

Data yang digunakan dalam praktikum ini adalah data Friedman yang dibangkitkan menggunakan fungsi mlbench.friedman1() dari paket mlbench dalam program R. Data dibangkitkan sebanyak 200 observasi dengan menggunakan set.seed(234) agar proses pembentukan data dapat direproduksi. Data tersebut terdiri dari sepuluh variabel prediktor dan satu variabel respons. Selanjutnya, data dibagi menjadi data training sebesar 70% dan data testing sebesar 30%. Data training digunakan untuk membentuk model Random Forest Regression, sedangkan data testing digunakan untuk mengevaluasi kemampuan model dalam melakukan prediksi (Fransiska, 2026).

3.2 Variabel Penelitian

Variabel penelitian yang digunakan dalam praktikum ini terdiri dari sebelas variabel, yaitu sepuluh variabel prediktor (\(x_1\) hingga \(x_{10}\)) dan satu variabel respons (\(y\)). Seluruh variabel berbentuk numerik sehingga dapat digunakan dalam pemodelan regresi menggunakan metode Random Forest. Variabel \(x_1\), \(x_2\), \(x_3\), \(x_4\), \(x_5\), \(x_6\), \(x_7\), \(x_8\), \(x_9\), dan \(x_{10}\) merupakan variabel prediktor yang digunakan untuk menjelaskan variasi pada variabel respons. Sementara itu, variabel \(y\) merupakan variabel respons numerik yang menjadi sasaran prediksi dalam pemodelan. Hubungan antara variabel prediktor dan variabel respons dipelajari melalui pembentukan sejumlah pohon keputusan yang kemudian digabungkan untuk menghasilkan prediksi akhir.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan dalam praktikum Random Forest untuk kasus regresi adalah sebagai berikut:

  1. Membuka aplikasi RStudio.
  2. Memanggil paket ranger, mlbench, dan caret yang digunakan dalam proses pembentukan data, pemodelan, dan pembagian data.
  3. Membangkitkan data Friedman sebanyak 200 observasi menggunakan fungsi mlbench.friedman1() dengan set.seed(234).
  4. Memeriksa struktur, ringkasan, jumlah observasi, dan jumlah variabel pada data yang digunakan.
  5. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% menggunakan fungsi createDataPartition() dengan set.seed(234).
  6. Menentukan kombinasi parameter model Random Forest yang akan digunakan, yaitu nilai minimum number of variables randomly sampled as candidates at each split (mtry) sebesar 2, 3, dan 5 serta jumlah pohon keputusan (num.trees) sebesar 200, 500, dan 1.000.
  7. Membentuk sembilan model Random Forest Regression berdasarkan seluruh kombinasi nilai mtry dan num.trees menggunakan fungsi ranger() pada data training.
  8. Memperoleh nilai Out-of-Bag Mean Squared Error (OOB MSE) dari masing-masing model sebagai evaluasi internal untuk mengukur kesalahan prediksi selama proses pembentukan model.
  9. Melakukan prediksi terhadap data testing menggunakan masing-masing model yang telah terbentuk.
  10. Membandingkan nilai aktual dan nilai prediksi serta menghitung residual dari setiap model.
  11. Mengevaluasi kinerja prediksi setiap model menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)).
  12. Membuat visualisasi perbandingan nilai aktual dan prediksi untuk mengetahui kedekatan hasil prediksi terhadap nilai aktual.
  13. Membuat residual plot untuk mengamati pola kesalahan prediksi pada setiap model.
  14. Mengidentifikasi tingkat kepentingan variabel (variable importance) berdasarkan hasil pemodelan Random Forest untuk mengetahui kontribusi relatif setiap variabel prediktor dalam model.
  15. Membandingkan hasil evaluasi dari sembilan kombinasi parameter berdasarkan nilai OOB MSE, MSE, RMSE, MAE, dan \(R^2\), serta hasil visualisasi residual plot dan variable importance.
  16. Menentukan kombinasi parameter yang menghasilkan kinerja prediksi terbaik berdasarkan hasil evaluasi data testing dan menginterpretasikan hasil analisis berdasarkan ukuran kesalahan prediksi, pola residual, serta tingkat kepentingan variabel.

BAB IV HASIL DAN PEMBAHASAN

4.1 Pembentukan dan Pemeriksaan Data

Pembentukan data dilakukan menggunakan fungsi mlbench.friedman1() dari paket mlbench. Data dibangkitkan sebanyak 200 observasi dengan 10 variabel prediktor, yaitu x.1 sampai x.10, dan satu variabel respons, yaitu y. Pembangkitan data dilakukan menggunakan set.seed(234) agar hasil yang diperoleh dapat direproduksi. Pemeriksaan data dilakukan menggunakan fungsi str(), summary(), dan dim() untuk mengetahui struktur, ringkasan statistik, serta ukuran data.

library(ranger)
library(mlbench)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
# B1. Membentuk dataset Friedman
set.seed(234)
reg.data <- as.data.frame(mlbench.friedman1(200))

# Melihat struktur data
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 ...
# Melihat ringkasan statistik
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
# Melihat jumlah observasi dan variabel
dim(reg.data)
## [1] 200  11

Berdasarkan hasil pemeriksaan struktur data, diperoleh 200 observasi dan 11 variabel yang terdiri atas 10 variabel prediktor serta satu variabel respons. Seluruh variabel bertipe numerik sehingga dapat digunakan dalam pemodelan regresi Random Forest. Variabel y digunakan sebagai variabel respons, sedangkan variabel x.1 hingga x.10 digunakan sebagai variabel prediktor.

Hasil ringkasan statistik menunjukkan bahwa seluruh prediktor berada pada rentang 0 sampai 1. Variabel respons y memiliki nilai minimum sebesar 3,082 dan maksimum sebesar 26,146. Nilai kuartil pertama sebesar 10,593, median sebesar 13,810, kuartil ketiga sebesar 18,063, dan rata-rata sebesar 14,270. Nilai rata-rata yang sedikit lebih besar daripada median menunjukkan sebaran respons yang sedikit condong ke kanan, dengan rentang nilai yang cukup lebar. Informasi ini menjadi gambaran awal mengenai karakteristik data sebelum dilakukan pemodelan.

4.2 Pembagian Data Pelatihan dan Pengujian

Pembagian data dilakukan untuk memisahkan data yang digunakan dalam pembentukan model dan data yang digunakan untuk mengevaluasi kemampuan prediksi model. Proporsi pembagian yang digunakan adalah 70% untuk data pelatihan (training) dan 30% untuk data pengujian (testing). Pembagian dilakukan menggunakan fungsi createDataPartition() dari paket caret dengan variabel respons y sebagai dasar pembagian. Penggunaan set.seed(234) bertujuan agar pembagian data dapat direproduksi.

# B2. Membagi 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 ukuran data
dim(reg.train)
## [1] 140  11
dim(reg.test)
## [1] 60 11
actual.reg <- reg.test$y

Hasil pembagian menunjukkan bahwa data pelatihan terdiri atas 140 observasi dan 11 variabel, sedangkan data pengujian terdiri atas 60 observasi dan 11 variabel. Data pelatihan digunakan untuk membentuk model Random Forest Regression, sedangkan data pengujian digunakan untuk mengukur kemampuan prediksi model terhadap observasi yang tidak digunakan dalam proses pelatihan.

4.3 Pembentukan Model Random Forest Regression

Pemodelan dilakukan menggunakan fungsi ranger() dari paket ranger. Dua parameter yang dibandingkan adalah mtry dan num.trees. Parameter mtry menyatakan jumlah prediktor yang dipilih secara acak sebagai kandidat pada setiap pemisahan simpul, dengan nilai 2, 3, dan 5. Parameter num.trees menyatakan jumlah pohon yang dibentuk dalam hutan, dengan nilai 200, 500, dan 1000. Kombinasi kedua parameter menghasilkan sembilan model.

Parameter lain dibuat sama pada seluruh model agar perbedaan hasil hanya berasal dari perbedaan mtry dan num.trees. Parameter min.node.size = 5 menetapkan ukuran minimum simpul terminal, replace = TRUE dan sample.fraction = 1 menggunakan bootstrap dengan ukuran sampel sama dengan data pelatihan, serta importance = "permutation" digunakan untuk menghitung tingkat kepentingan variabel berbasis permutasi. Pemanggilan set.seed(234) sebelum setiap model dan argumen seed = 234 pada ranger() digunakan agar hasil dapat direproduksi.

# B3. Grid kombinasi parameter
grid <- expand.grid(mtry = c(2, 3, 5),
                    num.trees = c(200, 500, 1000))
grid$Model <- paste0("mtry=", grid$mtry, " | trees=", grid$num.trees)

hasil.list <- vector("list", nrow(grid))
pred.list  <- vector("list", nrow(grid))
imp.list   <- vector("list", nrow(grid))
names(pred.list) <- names(imp.list) <- grid$Model

# B4. Membentuk model, prediksi, dan evaluasi
for (i in seq_len(nrow(grid))) {
  set.seed(234)
  rf <- 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
  )

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

  # Ukuran evaluasi data testing
  MSE  <- mean((actual.reg - pred)^2)
  RMSE <- sqrt(MSE)
  MAE  <- mean(abs(actual.reg - pred))
  R2   <- 1 - sum((actual.reg - pred)^2) /
    sum((actual.reg - mean(actual.reg))^2)

  hasil.list[[i]] <- data.frame(
    Model     = grid$Model[i],
    mtry      = grid$mtry[i],
    num.trees = grid$num.trees[i],
    OOB_MSE   = rf$prediction.error,
    OOB_R2    = rf$r.squared,
    MSE_Test  = MSE,
    RMSE_Test = RMSE,
    MAE_Test  = MAE,
    R2_Test   = R2
  )
  pred.list[[i]] <- pred
  imp.list[[i]]  <- rf$variable.importance
}

Hasil pemodelan menunjukkan bahwa kesembilan model berhasil dibentuk. Setiap model menghasilkan prediksi untuk data pengujian, nilai Out-of-Bag (OOB) error, serta nilai tingkat kepentingan variabel. Evaluasi model dilakukan secara internal melalui OOB MSE pada subbab berikutnya, kemudian secara eksternal menggunakan data pengujian.

4.4 Evaluasi Internal Model Berdasarkan OOB MSE

Out-of-Bag (OOB) error merupakan evaluasi internal pada Random Forest. Pada setiap pohon, sebagian observasi tidak terambil dalam sampel bootstrap. Observasi tersebut digunakan untuk memprediksi dan menghitung galat tanpa memerlukan data terpisah. Pada regresi, ukuran ini disebut OOB MSE, sedangkan OOB \(R^2\) menunjukkan proporsi variasi respons yang dijelaskan berdasarkan prediksi OOB.

# Tabel perbandingan seluruh model
perbandingan <- do.call(rbind, hasil.list)
rownames(perbandingan) <- NULL

# Evaluasi OOB
round(perbandingan[, c("Model", "OOB_MSE", "OOB_R2")[-1]], 4)

Tabel 4.1 Hasil Evaluasi OOB Setiap Model

mtry num.trees OOB MSE OOB \(R^2\)
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

Berdasarkan Tabel 4.1, OOB MSE terkecil diperoleh pada model dengan mtry = 5 dan num.trees = 1000, yaitu 6,8260, dengan OOB \(R^2\) sebesar 0,7430. OOB MSE terbesar diperoleh pada model dengan mtry = 2 dan num.trees = 200, yaitu 8,2222. Pada setiap jumlah pohon, OOB MSE menurun ketika mtry dinaikkan dari 2 ke 3 lalu ke 5.

Penambahan jumlah pohon juga menurunkan OOB MSE pada setiap nilai mtry, tetapi penurunannya semakin kecil. Pada mtry = 5, OOB MSE turun dari 7,0632 (200 pohon) menjadi 6,8750 (500 pohon), kemudian hanya turun 0,0490 menjadi 6,8260 pada 1000 pohon. Hal ini menunjukkan bahwa kinerja model mulai stabil setelah jumlah pohon mencapai sekitar 500.

4.5 Prediksi Data Pengujian dan Perhitungan Residual

Prediksi dilakukan terhadap 60 observasi pada data pengujian untuk setiap model. Model terbaik ditentukan berdasarkan RMSE data pengujian yang terkecil. Tabel nilai aktual, prediksi, dan residual disajikan untuk model terbaik tersebut, yaitu model dengan mtry = 5 dan num.trees = 1000.

Residual merupakan selisih antara nilai aktual dan nilai prediksi. Residual dihitung menggunakan persamaan:

\[e_i = y_i - \hat{y}_i\]

dengan \(e_i\) menyatakan residual observasi ke-\(i\), \(y_i\) menyatakan nilai aktual, dan \(\hat{y}_i\) menyatakan nilai prediksi. Residual positif menunjukkan bahwa nilai aktual lebih besar daripada nilai prediksi, sedangkan residual negatif menunjukkan bahwa nilai prediksi lebih besar daripada nilai aktual.

# B5. Menentukan model terbaik berdasarkan RMSE testing terkecil
best.idx <- which.min(perbandingan$RMSE_Test)

cat("Model terbaik berdasarkan RMSE testing:",
    perbandingan$Model[best.idx], "\n")
## Model terbaik berdasarkan RMSE testing: mtry=5 | trees=1000
# B6. Aktual, prediksi, dan residual model terbaik
pred.best <- pred.list[[best.idx]]

hasil.best <- data.frame(
  Aktual   = actual.reg,
  Prediksi = pred.best,
  Residual = actual.reg - pred.best
)

head(hasil.best, 10)

Tabel 4.2 Contoh Nilai Aktual, Prediksi, dan Residual (Model mtry = 5, num.trees = 1000)

No Aktual Prediksi Residual
1 10,232 12,546 −2,313
2 11,845 10,282 1,563
3 10,336 12,782 −2,447
4 16,727 13,724 3,004
5 25,077 20,444 4,633
6 15,447 14,442 1,005
7 15,643 12,797 2,846
8 7,111 12,578 −5,467
9 13,351 15,527 −2,175
10 12,872 14,890 −2,018

Berdasarkan Tabel 4.2, selisih antara nilai aktual dan prediksi bervariasi pada setiap observasi. Residual terbesar pada sepuluh observasi pertama terjadi pada observasi ke-8, yaitu −5,467, ketika nilai aktual rendah (7,111) diprediksi jauh lebih tinggi (12,578). Sebaliknya, pada observasi ke-5 nilai aktual yang tinggi (25,077) diprediksi lebih rendah (20,444) sehingga residualnya positif sebesar 4,633. Pola ini mengindikasikan bahwa model cenderung menghasilkan prediksi yang lebih mendekati nilai tengah respons.

4.6 Evaluasi dan Pemilihan Model Terbaik

Evaluasi dilakukan menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi \((R^2)\) pada data pengujian. Nilai MSE, RMSE, dan MAE yang lebih kecil menunjukkan kesalahan prediksi yang lebih rendah, sedangkan nilai \(R^2\) yang lebih besar menunjukkan bahwa model menjelaskan proporsi variasi respons yang lebih tinggi.

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

\[\mathrm{RMSE}=\sqrt{\mathrm{MSE}}\]

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

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

# B7. Evaluasi data testing seluruh model
print(round(perbandingan[, c("mtry", "num.trees", "MSE_Test",
                             "RMSE_Test", "MAE_Test", "R2_Test")], 4))
##   mtry num.trees MSE_Test RMSE_Test MAE_Test R2_Test
## 1    2       200   7.8700    2.8054   2.3414  0.6717
## 2    3       200   7.8139    2.7953   2.2981  0.6740
## 3    5       200   7.6596    2.7676   2.2726  0.6805
## 4    2       500   8.1774    2.8596   2.3832  0.6589
## 5    3       500   7.8278    2.7978   2.3058  0.6734
## 6    5       500   7.3826    2.7171   2.2312  0.6920
## 7    2      1000   8.1181    2.8492   2.3794  0.6613
## 8    3      1000   7.7780    2.7889   2.2996  0.6755
## 9    5      1000   7.1925    2.6819   2.2054  0.6999
print(round(perbandingan[best.idx, -1], 4))
##   mtry num.trees OOB_MSE OOB_R2 MSE_Test RMSE_Test MAE_Test R2_Test
## 9    5      1000   6.826  0.743   7.1925    2.6819   2.2054  0.6999

Tabel 4.3 Hasil Evaluasi Data Pengujian Setiap Model

mtry num.trees MSE RMSE MAE \(R^2\)
2 200 7,8700 2,8054 2,3414 0,6717
3 200 7,8139 2,7953 2,2981 0,6740
5 200 7,6596 2,7676 2,2726 0,6805
2 500 8,1774 2,8596 2,3832 0,6589
3 500 7,8278 2,7978 2,3058 0,6734
5 500 7,3826 2,7171 2,2312 0,6920
2 1000 8,1181 2,8492 2,3794 0,6613
3 1000 7,7780 2,7889 2,2996 0,6755
5 1000 7,1925 2,6819 2,2054 0,6999

Berdasarkan Tabel 4.3, model dengan mtry = 5 dan num.trees = 1000 menghasilkan MSE sebesar 7,1925, RMSE sebesar 2,6819, dan MAE sebesar 2,2054. Ketiga nilai tersebut merupakan yang terkecil di antara kesembilan model. Model ini juga menghasilkan \(R^2\) terbesar, yaitu 0,6999, sehingga dipilih sebagai model terbaik. Nilai tersebut menunjukkan bahwa sekitar 69,99% variasi nilai aktual pada data pengujian dapat dijelaskan oleh prediksi model, sedangkan sisanya, sekitar 30,01%, tidak dijelaskan oleh model.

Pengaruh mtry terlihat lebih jelas daripada pengaruh num.trees. Pada seluruh jumlah pohon, nilai mtry = 5 menghasilkan MSE yang lebih kecil dibandingkan mtry = 3 dan mtry = 2. Rata-rata MSE data pengujian untuk mtry = 2, 3, dan 5 berturut-turut sekitar 8,0552; 7,8066; dan 7,4116. Dengan 1000 pohon, perpindahan dari mtry = 2 ke mtry = 5 menurunkan MSE dari 8,1181 menjadi 7,1925, atau sekitar 11,4%.

Pengaruh jumlah pohon relatif kecil dan tidak selalu searah. Pada mtry = 5, penambahan pohon dari 200 ke 1000 menurunkan MSE dari 7,6596 menjadi 7,1925. Pada mtry = 3, perubahan MSE sangat kecil (7,8139; 7,8278; dan 7,7780). Pada mtry = 2, MSE pada 500 pohon (8,1774) bahkan lebih besar daripada pada 200 pohon (7,8700). Fluktuasi ini wajar karena data pengujian hanya terdiri atas 60 observasi sehingga hasilnya sensitif terhadap beberapa observasi dengan galat besar.

Secara kualitatif, kemungkinan penyebab keunggulan mtry yang lebih besar adalah struktur data Friedman, yaitu hanya lima dari sepuluh prediktor (x.1 sampai x.5) yang memengaruhi y, sedangkan x.6 sampai x.10 merupakan variabel noise. Pada mtry = 2, peluang kedua kandidat pada suatu simpul sama-sama berasal dari variabel noise sekitar 22%, sedangkan pada mtry = 5 peluang tersebut sangat kecil (kurang dari 1%). Dengan demikian, mtry yang lebih besar memberi kesempatan lebih besar bagi variabel yang informatif untuk terpilih sebagai pemisah.

4.7 Visualisasi Nilai Aktual dan Prediksi

Visualisasi nilai aktual dan prediksi digunakan untuk menilai kedekatan hasil prediksi terhadap nilai aktual. Nilai aktual ditempatkan pada sumbu horizontal dan nilai prediksi pada sumbu vertikal. Garis diagonal putus-putus menunjukkan kondisi ketika nilai prediksi sama dengan nilai aktual.

# B8. Plot aktual vs prediksi (9 model)
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, col = "red")
}

par(mfrow = c(1, 1))

Berdasarkan grafik, titik pengamatan pada seluruh model menunjukkan kecenderungan naik mengikuti garis diagonal, yang berarti model mampu menangkap hubungan antara prediktor dan respons. Meskipun demikian, terdapat pola yang sama pada semua kombinasi parameter. Pada nilai aktual yang rendah (di bawah sekitar 10), prediksi berada di atas garis diagonal sehingga nilai respons dioverestimasi. Pada nilai aktual yang tinggi (di atas sekitar 20), prediksi berada di bawah garis diagonal dan cenderung mendatar di sekitar 19 sampai 21 sehingga nilai respons diunderestimasi. Pola ini umum pada Random Forest karena prediksi merupakan rata-rata dari banyak pohon sehingga cenderung tertarik ke nilai tengah respons.

Dari sisi perbandingan antarmodel, model dengan mtry = 5 terlihat memiliki titik yang lebih dekat dengan garis diagonal dan rentang prediksi yang sedikit lebih lebar dibandingkan model dengan mtry = 2. Perbedaan antara 200, 500, dan 1000 pohon pada mtry yang sama tampak kecil secara visual. Hal ini sejalan dengan Tabel 4.3 yang menunjukkan bahwa pengaruh mtry lebih dominan daripada pengaruh num.trees.

4.8 Analisis Plot Residual

Plot residual digunakan untuk memeriksa pola kesalahan prediksi model. Nilai prediksi ditempatkan pada sumbu horizontal dan residual pada sumbu vertikal. Garis horizontal pada residual nol digunakan sebagai acuan untuk melihat apakah residual tersebar acak di sekitar nol atau menunjukkan pola tertentu.

# B9. Residual plot (9 model)
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, col = "red")
}

par(mfrow = c(1, 1))

Berdasarkan grafik, residual pada seluruh model tersebar di atas dan di bawah garis nol dengan rentang sekitar −6 hingga 6. Tidak terlihat bentuk corong yang jelas sehingga tidak ada indikasi kuat bahwa ragam galat berubah secara sistematis terhadap nilai prediksi.

Pada model dengan mtry = 2, terlihat kecenderungan residual negatif pada nilai prediksi yang rendah (sekitar 11–13) dan residual positif pada nilai prediksi yang tinggi (di atas sekitar 18). Pola ini menunjukkan bahwa model mengoverestimasi nilai yang rendah dan mengunderestimasi nilai yang tinggi, sesuai dengan temuan pada grafik aktual dan prediksi. Pada model dengan mtry = 5, kecenderungan tersebut sedikit berkurang dan residual tampak lebih seimbang di sekitar nol, meskipun residual positif yang cukup besar masih muncul pada nilai prediksi di atas sekitar 19. Hal ini mendukung hasil evaluasi numerik bahwa mtry = 5 memberikan kinerja yang lebih baik, walaupun model belum sepenuhnya bebas dari kesalahan prediksi yang sistematis pada ujung rentang respons.

4.9 Analisis Tingkat Kepentingan Variabel

Tingkat kepentingan variabel (variable importance) dihitung menggunakan metode permutasi. Nilai ini menunjukkan seberapa besar kesalahan prediksi meningkat ketika nilai suatu prediktor diacak sehingga hubungannya dengan respons terputus. Semakin besar nilainya, semakin penting variabel tersebut. Nilai mendekati nol atau negatif menunjukkan bahwa variabel tidak memberikan kontribusi yang berarti terhadap prediksi.

# B10. Variable importance model terbaik
importance.best <- sort(imp.list[[best.idx]], decreasing = TRUE)
print(round(importance.best, 4))
##     x.4     x.1     x.2     x.3     x.5     x.6    x.10     x.8     x.9     x.7 
## 12.9314  9.3875  3.8211  1.8255  0.9720  0.1000  0.0976 -0.0096 -0.0802 -0.1430
barplot(importance.best, las = 2, col = "steelblue",
        main = paste("Variable Importance -", grid$Model[best.idx]),
        ylab = "Permutation Importance")

# Variable importance seluruh model
par(mfrow = c(3, 3), mar = c(5, 4, 3, 1))
for (i in seq_len(nrow(grid))) {
  imp <- sort(imp.list[[i]], decreasing = TRUE)
  barplot(imp, las = 2, col = "steelblue",
          main = grid$Model[i], cex.main = 0.9, cex.names = 0.7,
          ylab = "Permutation Imp.")
}

par(mfrow = c(1, 1))

# Tabel importance semua model
imp.mat <- do.call(cbind, imp.list)
print(round(imp.mat, 4))
##      mtry=2 | trees=200 mtry=3 | trees=200 mtry=5 | trees=200
## x.1              7.0564             7.9614             9.4340
## x.2              4.1035             3.4578             3.2554
## x.3              2.6306             1.7999             1.6639
## x.4             10.3007            10.9366            12.3287
## x.5              1.4976             0.8012             0.8824
## x.6              0.2439            -0.1421             0.2234
## x.7             -0.1685            -0.2916            -0.1249
## x.8              0.0160             0.0552             0.1128
## x.9             -0.2266            -0.1151            -0.1027
## x.10             0.2389             0.1206            -0.1028
##      mtry=2 | trees=500 mtry=3 | trees=500 mtry=5 | trees=500
## x.1              7.2812             8.1718             9.2110
## x.2              3.9788             3.5563             3.4368
## x.3              2.7030             2.2339             1.7405
## x.4              9.5898            11.0137            12.7425
## x.5              1.3159             1.0121             0.8821
## x.6              0.0871            -0.1326             0.1440
## x.7             -0.2258            -0.1669            -0.1648
## x.8             -0.0801            -0.1014            -0.0339
## x.9              0.0352            -0.0368            -0.0768
## x.10             0.2882             0.1533             0.0325
##      mtry=2 | trees=1000 mtry=3 | trees=1000 mtry=5 | trees=1000
## x.1               7.3275              8.1834              9.3875
## x.2               3.8267              3.5780              3.8211
## x.3               2.5764              2.2834              1.8255
## x.4               9.4642             10.9812             12.9314
## x.5               1.2285              1.0931              0.9720
## x.6              -0.0503             -0.1254              0.1000
## x.7              -0.2479             -0.1486             -0.1430
## x.8              -0.1915             -0.1094             -0.0096
## x.9               0.0270             -0.1269             -0.0802
## x.10              0.0591              0.0788              0.0976

Tabel 4.4 Tingkat Kepentingan Variabel pada Model Terbaik

Variabel Permutation importance
x.4 12,9314
x.1 9,3875
x.2 3,8211
x.3 1,8255
x.5 0,9720
x.6 0,1000
x.10 0,0976
x.8 −0,0096
x.9 −0,0802
x.7 −0,1430

Berdasarkan Tabel 4.4, variabel x.4 memiliki tingkat kepentingan terbesar, yaitu 12,9314, diikuti oleh x.1 sebesar 9,3875, x.2 sebesar 3,8211, x.3 sebesar 1,8255, dan x.5 sebesar 0,9720. Kelima variabel tersebut memiliki nilai yang jelas berada di atas variabel lainnya. Variabel x.6 sampai x.10 memiliki nilai di sekitar nol (antara −0,1430 dan 0,1000), sehingga kontribusinya terhadap prediksi dapat dianggap tidak berarti. Nilai negatif yang kecil pada x.7, x.8, dan x.9 berarti bahwa pengacakan variabel tersebut tidak menurunkan ketepatan prediksi, bahkan sedikit memperbaikinya secara kebetulan.

Hasil ini sesuai dengan struktur data Friedman 1, yaitu respons dibentuk dari x.1 sampai x.5, sedangkan x.6 sampai x.10 merupakan variabel noise. Model Random Forest berhasil membedakan prediktor informatif dari prediktor noise. Variabel x.1 dan x.2 merupakan bagian dari suku nonlinier yang melibatkan interaksi keduanya, x.3 berpengaruh secara kuadratik, serta x.4 dan x.5 berpengaruh secara linier. Tingkat kepentingan x.5 yang lebih kecil dibandingkan x.4 menunjukkan bahwa kontribusinya terhadap variasi respons lebih kecil.

Tabel tingkat kepentingan seluruh model menunjukkan urutan yang konsisten, yaitu x.4, x.1, x.2, x.3, dan x.5 pada kesembilan kombinasi mtry dan num.trees. Perbedaan antarmodel hanya terlihat pada besarnya nilai. Misalnya, nilai x.4 meningkat dari sekitar 9,4–10,3 pada mtry = 2 menjadi sekitar 12,3–12,9 pada mtry = 5, sedangkan nilai x.2 sedikit menurun seiring kenaikan mtry. Interpretasi ini terbatas pada kontribusi variabel dalam pembentukan model dan tidak menunjukkan hubungan sebab-akibat.

4.10 Perbandingan RMSE Data Pengujian dan OOB MSE

Perbandingan RMSE data pengujian dan OOB MSE dilakukan untuk melihat kesesuaian antara evaluasi eksternal pada data pengujian dan evaluasi internal berbasis OOB. Setiap kombinasi parameter diberi warna yang berbeda agar mudah dibandingkan pada kedua grafik.

# B11. Grafik RMSE testing dan OOB MSE (warna per kombinasi)
warna.model <- hcl.colors(nrow(grid), palette = "Dark 3")

par(mfrow = c(1, 2), mar = c(9, 4, 3, 1))
barplot(perbandingan$RMSE_Test, names.arg = perbandingan$Model,
        las = 2, cex.names = 0.7, col = warna.model,
        main = "RMSE Data Testing", ylab = "RMSE")
barplot(perbandingan$OOB_MSE, names.arg = perbandingan$Model,
        las = 2, cex.names = 0.7, col = warna.model,
        main = "OOB MSE", ylab = "OOB MSE")

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)

Berdasarkan grafik, RMSE data pengujian berada pada rentang sekitar 2,68 hingga 2,86, sedangkan OOB MSE berada pada rentang sekitar 6,83 hingga 8,22. Pada kedua ukuran, model dengan mtry = 5 menghasilkan batang yang paling rendah, dan model dengan mtry = 5 serta num.trees = 1000 menjadi yang terendah. Dengan demikian, evaluasi internal berbasis OOB dan evaluasi pada data pengujian memberikan kesimpulan yang sejalan mengenai pengaruh mtry.

Nilai OOB MSE dan MSE data pengujian tidak identik karena keduanya dihitung dari data yang berbeda. OOB MSE dihitung dari 140 observasi pelatihan, sedangkan MSE data pengujian dihitung dari 60 observasi. Pada model terbaik, OOB MSE sebesar 6,8260 dan MSE data pengujian sebesar 7,1925 sehingga selisihnya relatif kecil. Perbedaan kecil tersebut menunjukkan tidak ada indikasi overfitting yang berat pada model terbaik. Satu perbedaan pola yang perlu dicatat adalah OOB MSE selalu menurun ketika jumlah pohon bertambah, sedangkan MSE data pengujian pada mtry = 2 tidak mengikuti pola tersebut. Hal ini kemungkinan terjadi karena data pengujian berjumlah kecil sehingga lebih sensitif terhadap variasi.

Secara keseluruhan, penerapan Random Forest Regression pada data Friedman menunjukkan bahwa mtry memberikan pengaruh yang lebih jelas dibandingkan num.trees. Model dengan mtry = 5 dan num.trees = 1000 merupakan model terbaik, dengan OOB MSE 6,8260, MSE data pengujian 7,1925, RMSE 2,6819, MAE 2,2054, dan \(R^2\) 0,6999. Variabel x.4 menjadi prediktor terpenting, diikuti oleh x.1, x.2, x.3, dan x.5, sedangkan x.6 sampai x.10 tidak memberikan kontribusi yang berarti. Plot aktual dan residual menunjukkan bahwa model masih cenderung mengoverestimasi nilai respons yang rendah dan mengunderestimasi nilai respons yang tinggi.

BAB V KESIMPULAN

5.1 Kesimpulan

Random Forest merupakan metode ensemble learning berbasis decision tree yang membentuk banyak pohon keputusan dari sampel bootstrap dan memilih sebagian prediktor secara acak pada setiap pemisahan simpul. Hasil prediksi akhir diperoleh dengan menggabungkan prediksi seluruh pohon, yaitu melalui suara terbanyak pada klasifikasi atau rata-rata pada regresi. Double Random Forest merupakan pengembangan dari Random Forest yang bertujuan meningkatkan kemampuan model melalui pembentukan pohon yang lebih beragam. Pemahaman mengenai kedua metode ini memberikan dasar untuk mengetahui bagaimana penggabungan banyak pohon keputusan dapat mengurangi ketidakstabilan satu pohon tunggal dalam menyelesaikan permasalahan prediksi.

Random Forest dan Double Random Forest dapat diimplementasikan menggunakan bahasa pemrograman R untuk menyelesaikan permasalahan klasifikasi maupun regresi. Pada kasus klasifikasi, model digunakan untuk memprediksi kelas suatu observasi, sedangkan pada kasus regresi, model digunakan untuk memprediksi nilai numerik. Implementasi dilakukan dengan menyiapkan data, membagi data menjadi data pelatihan dan pengujian, menentukan variabel respons dan prediktor, memilih parameter model seperti mtry dan num.trees, serta membentuk model berdasarkan data yang tersedia.

Evaluasi performa model merupakan tahapan penting untuk mengetahui kemampuan model dalam menghasilkan prediksi. Pada Random Forest, evaluasi dapat dilakukan secara internal menggunakan Out-of-Bag (OOB) error tanpa memerlukan data terpisah, serta secara eksternal menggunakan data pengujian. Pada kasus regresi, ukuran evaluasi yang dapat digunakan meliputi Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). Pada kasus klasifikasi, evaluasi dapat dilakukan menggunakan ukuran seperti akurasi, presisi, sensitivitas, spesifisitas, dan F1-score. Hasil evaluasi tersebut dapat digunakan sebagai dasar untuk membandingkan Random Forest dengan Double Random Forest serta memilih model yang memiliki performa terbaik.

Berdasarkan hasil analisis pada Bab IV, model Random Forest Regression terbaik pada data Friedman diperoleh pada kombinasi mtry = 5 dan num.trees = 1000. Model tersebut menghasilkan OOB MSE sebesar 6,8260 dengan OOB \(R^2\) sebesar 0,7430, serta pada data pengujian menghasilkan MSE sebesar 7,1925, RMSE sebesar 2,6819, MAE sebesar 2,2054, dan \(R^2\) sebesar 0,6999. Pengaruh mtry terlihat lebih jelas dibandingkan pengaruh num.trees, sedangkan penambahan jumlah pohon memberikan perbaikan yang kecil dan cenderung stabil setelah sekitar 500 pohon. Hasil analisis variable importance menunjukkan bahwa variabel x.4 memiliki kontribusi terbesar, yaitu 12,9314, diikuti oleh x.1 sebesar 9,3875, sedangkan variabel x.6 sampai x.10 memiliki kontribusi mendekati nol. Plot aktual dan residual menunjukkan bahwa model masih cenderung mengoverestimasi nilai respons yang rendah dan mengunderestimasi nilai respons yang tinggi. Dengan demikian, pemodelan Random Forest Regression pada data Friedman menunjukkan bahwa pemilihan parameter dan evaluasi model, baik secara internal melalui OOB maupun pada data pengujian, berperan penting dalam memperoleh model dengan kemampuan prediksi yang baik.

DAFTAR PUSTAKA

Fauzi, A. S., Rizki, M., Rendi, R., Nurul, R., Novitasari, T., & Nooraeni, R. (2021). Workforce classification in West Java 2018 with random forest. Jurnal Matematika, Statistika dan Komputasi, 17(2), 240–251. https://doi.org/10.20956/jmsk.v17i2.11680

Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Matematika Universitas Bengkulu.

Ilma, M., Sartono, B., & Wijayanto, H. (2025). Performance of prediction interval estimators based on random forest models with correlated predictors. Jurnal Matematika UNAND, 14(4), 320–332. https://doi.org/10.25077/jmua.14.4.320-332.2025

Khikmah, K. N., Sartono, B., Susetyo, B., & Dito, G. A. (2024). Performance comparative study of machine learning classification algorithms for food insecurity experience by households in West Java. Jurnal Online Informatika, 9(1), 128–137. https://doi.org/10.15575/join.v9i1.1012

Nurpiana, A., & Wijayanto, A. W. (2022). Comparison of models for classification of learning achievement of middle school students in Indonesia in 2019 using the support vector machine algorithm, conditional inference trees, and random forest. Jurnal Matematika, Statistika dan Komputasi, 18(3), 447–455. https://doi.org/10.20956/j.v18i3.19208

Sukarna, S., Notodiputro, K. A., & Sartono, B. (2023). Comparison of logistic model tree and random forest on classification for poverty in Indonesia. Media Statistika, 16(2), 112–123. https://doi.org/10.14710/medstat.16.2.112-123