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.
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.
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.
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.
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.
\[ Accuracy=\frac{TP+TN}{TP+TN+FP+FN} \]
\[ Precision=\frac{TP}{TP+FP} \]
\[ Recall=\frac{TP}{TP+FN} \]
\[ Specificity=\frac{TN}{TN+FP} \]
\[ 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.
\[ MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \]
\[ RMSE=\sqrt{MSE} \]
\[ 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} \]
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).
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).
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.
Langkah-langkah analisis yang dilakukan dalam praktikum Random Forest untuk kasus regresi adalah sebagai berikut:
ranger, mlbench, dan
caret yang digunakan dalam proses pembentukan data,
pemodelan, dan pembagian data.mlbench.friedman1() dengan
set.seed(234).createDataPartition() dengan
set.seed(234).mtry) sebesar 2,
3, dan 5 serta jumlah pohon keputusan (num.trees) sebesar
200, 500, dan 1.000.mtry dan
num.trees menggunakan fungsi ranger() pada
data training.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.
## 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 ...
## 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
## [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.
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
## [1] 60 11
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.
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.
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.
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.
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
## 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.
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")
}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.
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")
}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.
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.
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")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.
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.
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