Perkembangan teknologi penginderaan jauh, sistem informasi geografis, dan ketersediaan data geospasial berukuran besar telah meningkatkan penggunaan machine learning dalam pemodelan fenomena lingkungan dan sosial. Salah satu metode yang banyak digunakan ialah Random Forest (RF) karena mampu menangani hubungan nonlinear, interaksi antarvariabel, serta jumlah prediktor yang besar. Perkembangan penelitian tersebut terlihat dari telaah terhadap 94 artikel mengenai penggunaan machine learning untuk pemodelan fenomena lingkungan yang memiliki autokorelasi spasial. Hasil telaah menunjukkan bahwa autokorelasi spasial masih lebih sering dianalisis pada tahap eksplorasi data dan belum banyak dimasukkan ke dalam proses pembentukan model maupun validasi (Jemeļjanova et al., 2024). Kondisi ini menunjukkan bahwa penerapan RF dalam analisis spasial terus berkembang, tetapi masih menghadapi persoalan metodologis yang perlu dikaji secara lebih mendalam.
Permasalahan utama muncul karena data spasial pada lokasi yang berdekatan cenderung memiliki karakteristik yang saling berkaitan. Hubungan tersebut disebut autokorelasi spasial. Jika autokorelasi spasial diabaikan, proses pelatihan dan evaluasi model dapat menghasilkan estimasi kinerja yang terlalu optimistis. Milà et al. (2024) menunjukkan bahwa random k-fold cross-validation cenderung memilih model dengan prediktor spasial meskipun penggunaan prediktor tersebut tidak selalu sesuai dengan tujuan prediksi. Model yang baik untuk interpolasi juga belum tentu memiliki kinerja baik ketika digunakan untuk melakukan prediksi pada wilayah baru atau ekstrapolasi. Penelitian Kmoch et al. (2025) juga menemukan bahwa beberapa strategi RF yang memasukkan struktur spasial hanya memberikan peningkatan akurasi yang kecil dan belum selalu menghilangkan autokorelasi spasial pada residual. Kesalahan evaluasi tersebut dapat berdampak pada pembuatan peta prediksi yang kurang akurat, pengambilan keputusan berbasis wilayah yang keliru, serta kesimpulan yang tidak tepat mengenai faktor-faktor yang memengaruhi suatu fenomena.
RF memiliki keunggulan dalam mengurangi varians melalui proses bagging dan pemilihan prediktor secara acak pada setiap percabangan pohon. Namun, RF dapat mengalami underfitting ketika ukuran pohon yang terbentuk tidak cukup besar atau ketika struktur hubungan dalam data terlalu kompleks. Salah satu pengembangan dari RF ialah Double Random Forest (DRF), yang dirancang untuk menghasilkan keragaman dan ukuran pohon yang lebih sesuai dibandingkan RF pada kondisi tertentu. Khairunnisa et al. (2024) menemukan bahwa DRF dapat memberikan interpretabilitas yang lebih baik daripada RF, terutama pada data yang mengalami underfitting. Penelitian tersebut juga menunjukkan bahwa kajian mengenai interpretabilitas DRF masih relatif terbatas. Di bidang penginderaan jauh, Quan et al. (2022) mengembangkan DRF untuk menangani ketidakseimbangan kelas pada citra hiperspektral. Hasil pengujian pada tiga dataset menunjukkan bahwa metode tersebut efektif dibandingkan beberapa metode pembanding. Meskipun demikian, penelitian tersebut berfokus pada ketidakseimbangan kelas dan belum secara khusus menguji pengaruh autokorelasi spasial terhadap kinerja DRF.
Penelitian mengenai model berbasis RF untuk data spasial juga telah menghasilkan beberapa pengembangan. Georganos & Kalogirou (2022), misalnya, mengembangkan geographical random forest dengan pembobotan spasial pada proses bootstrapping. Model tersebut menghasilkan nilai koefisien determinasi sebesar 0,82, lebih tinggi dibandingkan RF biasa yang menghasilkan nilai 0,61 pada studi pemodelan pendapatan rumah tangga di wilayah Eropa. Temuan ini menunjukkan bahwa pembobotan spasial dapat meningkatkan kemampuan prediksi pada data yang memiliki heterogenitas spasial. Namun, model tersebut merupakan pengembangan RF berbasis geografis dan belum membandingkan kinerja RF dengan DRF. Selain itu, Milà et al. (2024) menegaskan bahwa manfaat prediktor spasial bergantung pada tujuan prediksi, pola pengambilan sampel, dan kekuatan autokorelasi spasial. Dengan demikian, hasil penelitian terdahulu belum memberikan kesimpulan yang memadai mengenai apakah DRF mampu memberikan kinerja yang lebih baik daripada RF ketika keduanya diterapkan pada data spasial dengan karakteristik wilayah yang berbeda.
Research gap tersebut memperlihatkan perlunya penelitian yang membandingkan RF dan DRF dalam kerangka analisis spasial secara sistematis. Perbandingan tidak cukup dilakukan hanya berdasarkan akurasi prediksi melalui pembagian data secara acak, tetapi juga perlu mempertimbangkan autokorelasi spasial, validasi silang spasial, pola persebaran sampel, serta autokorelasi pada residual model. Penelitian ini penting karena dapat menguji apakah keunggulan DRF dalam menangani underfitting dan meningkatkan keragaman pohon tetap berlaku ketika data memiliki ketergantungan spasial. Secara akademik, penelitian ini dapat memperluas kajian mengenai penerapan ensemble learning pada analisis spasial dan memberikan bukti empiris mengenai perbedaan RF dan DRF dalam kondisi data yang memiliki heterogenitas serta autokorelasi spasial. Secara praktis, hasil penelitian ini dapat membantu peneliti dan praktisi memilih metode yang lebih tepat untuk pemetaan, prediksi berbasis wilayah, pengelolaan lingkungan, perencanaan pembangunan, serta pengambilan keputusan yang menggunakan data spasial.
Berdasarkan latar belakang di atas dapat disimpulkan bahwa rumusan masalah sebagai berikut:
Berdasarkan rumusan masalah di atas, tujuan penelitian yang dapat disimpulkan sebagai berikut:
Adapun manfaat yang didapatkan dari penelitian ini adalah sebagai berikut:
Adapun batasan masalah pada penelitian ini yaitu, lakukan analisis Random Forest secara lengkap mulai dari persiapan data, pembentukan model, prediksi, evaluasi, visualisasi, dan interpretasi. Gunakan set.seed(234) agar hasil dapat direproduksi. NPM Ganjil: lakukan Random Forest Regression pada data Friedman. Bandingkan mtry = 2, 3, dan 5 dengan num.trees = 200, 500, dan 1000. Bandingkan performa data testing berdasarkan MSE, RMSE, MAE, R2, residual plot, dan variable importance. Tampilkan pula OOB MSE sebagai evaluasi internal model.
Adapun sistematika penulisan dari praktikum ini adalah sebagai berikut:
BAB I PENDAHULUAN
Bab ini merupakan bab yang memuat latar belakang penelitian, rumusan masalah, tujuan dan manfaat penelitian, batasan masalah penelitian, dan sistematika penelitian.
BAB II TINJAUAN PUSTAKA
Bab ini merupakan bab yang memuat pengertian dari teori yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.
BAB III METODE PENELITIAN
Bab ini merupakan bab yang memuat uraian mengenai jenis dan sumber penelitian, variabel penelitian, dan analisis data.
BAB IV HASIL DAN PEMBAHASAN
Bab ini merupakan bab yang memuat hasil analisis, pembahasan dari hasil yang telah diperoleh, dan interpretasi.
BAB V KESIMPULAN DAN SARAN
Bab ini merupakan bab yang memuat rangkuman dari hasil keseluruhan dan saran yang diberikan oleh penulis terhadap hasil maupun analisis yang telah dilakukan.
DAFTAR PUSTAKA
Machine learning merupakan pendekatan komputasi yang memungkinkan sistem mempelajari pola dari data untuk menghasilkan prediksi atau keputusan tanpa harus diprogram secara eksplisit untuk setiap aturan. Dalam penelitian statistik dan ilmu data, machine learning digunakan untuk memodelkan hubungan antara variabel prediktor dan variabel respons, terutama ketika hubungan tersebut bersifat nonlinear atau melibatkan interaksi antarkomponen data. Penggunaan machine learning berkembang dalam berbagai bidang karena algoritmanya dapat digunakan untuk klasifikasi, regresi, pendeteksian pola, dan pengambilan keputusan berbasis data (Mienye & Sun, 2022; Zhang et al., 2022).
Secara umum, machine learning dapat dibedakan menjadi pembelajaran terawasi (supervised learning), pembelajaran tidak terawasi (unsupervised learning), dan pembelajaran semi-terawasi. Penelitian yang menggunakan bagging umumnya termasuk dalam pembelajaran terawasi karena model dibangun berdasarkan data pelatihan yang memiliki variabel respons atau label. Pada pembelajaran terawasi, model mempelajari fungsi pemetaan antara himpunan prediktor dan respons. Untuk permasalahan klasifikasi, respons berbentuk kategori, sedangkan pada regresi respons berbentuk numerik kontinu.
Tujuan utama pemodelan machine learning bukan hanya memperoleh kecocokan yang baik terhadap data pelatihan, tetapi juga menghasilkan kemampuan generalisasi yang baik pada data baru. Model yang terlalu kompleks dapat mengalami overfitting, yaitu ketika model sangat sesuai dengan data pelatihan tetapi kurang mampu memprediksi data pengujian. Sebaliknya, model yang terlalu sederhana dapat mengalami underfitting. Oleh karena itu, pemilihan algoritma, pengaturan hiperparameter, pembagian data, dan validasi model merupakan bagian penting dalam penelitian machine learning (Zhao et al., 2025).
Random Forest (RF) merupakan metode ensemble yang menggabungkan banyak pohon keputusan untuk menghasilkan satu prediksi. Setiap pohon dibentuk melalui proses pengacakan data dan pengacakan variabel prediktor. Hasil klasifikasi diperoleh melalui suara mayoritas, sedangkan hasil regresi diperoleh melalui rata-rata prediksi seluruh pohon. Khairunnisa et al. (2024) menjelaskan bahwa RF menggunakan dua proses randomisasi utama, yaitu pengambilan sampel data dengan pengembalian (bootstrap sampling) dan pemilihan subset prediktor secara acak pada setiap simpul.
Misalkan terdapat sebanyak \(B\) pohon keputusan. Untuk masalah regresi, prediksi RF dapat dituliskan sebagai:
\[\hat{f}_{RF}(x) = \frac{1}{B}\sum_{b=1}^{B} T_b(x),\]
di mana \(T_b(x)\) merupakan prediksi pohon ke-\(b\) terhadap observasi dengan vektor prediktor \(x\). Untuk masalah klasifikasi, RF memilih kelas dengan frekuensi suara terbanyak dari seluruh pohon.
Pembentukan RF dimulai dengan mengambil beberapa sampel bootstrap dari data pelatihan. Setiap sampel digunakan untuk membentuk satu pohon keputusan. Pada setiap simpul, model tidak mengevaluasi seluruh variabel prediktor, tetapi hanya mengevaluasi sebagian prediktor yang dipilih secara acak. Prosedur ini mengurangi kemiripan antar pohon. Ketika pohon-pohon yang relatif berbeda digabungkan, kesalahan prediksi agregat dapat berkurang.
RF juga dapat menggunakan observasi yang tidak masuk ke dalam sampel bootstrap sebagai data out-of-bag (OOB). Data OOB dapat digunakan untuk memperoleh estimasi kinerja internal tanpa membentuk data validasi terpisah. Meskipun demikian, penggunaan OOB atau random cross-validation tidak otomatis menghasilkan evaluasi yang sahih untuk data spasial. Milà et al. (2024) menunjukkan bahwa random k-fold cross-validation dapat menguntungkan model dengan prediktor spasial meskipun prediktor tersebut tidak sesuai untuk tujuan prediksi tertentu.
RF memiliki beberapa kelebihan. Metode ini dapat memodelkan hubungan nonlinear, menangani interaksi antarvariabel, menggunakan prediktor numerik maupun kategorik, dan relatif tahan terhadap pencilan. RF juga tidak mensyaratkan bentuk hubungan tertentu antara prediktor dan respons. Karakteristik tersebut menjadikan RF sesuai untuk data lingkungan dan sosial yang kompleks.
Namun, RF memiliki keterbatasan. Prediksi RF sulit dijelaskan secara langsung karena dihasilkan dari banyak pohon keputusan. Model juga dapat mengalami underfitting ketika struktur pohon tidak cukup besar untuk merepresentasikan pola data. Selain itu, RF standar tidak secara eksplisit memodelkan ketergantungan spasial. Apabila variabel spasial atau strategi validasi tidak dirancang dengan tepat, model dapat menghasilkan estimasi kinerja yang terlalu tinggi atau peta prediksi yang tidak stabil.
Double Random Forest (DRF) merupakan pengembangan dari metode RF yang mempertahankan gagasan ensemble dan randomisasi, tetapi menggunakan mekanisme pembentukan pohon yang berbeda. Khairunnisa et al. (2024) menjelaskan bahwa salah satu perbedaan penting DRF dan RF terletak pada penggunaan data pelatihan. RF menggunakan sampel bootstrap sebagai dasar pembentukan pohon, sedangkan DRF menggunakan seluruh data pelatihan pada proses tertentu sambil tetap menggunakan bootstrap dan pemilihan variabel secara acak untuk menentukan aturan pemisahan pada simpul.
Penggunaan seluruh data pelatihan dapat menghasilkan lebih banyak observasi unik pada setiap simpul. Dengan demikian, pohon pada DRF dapat tumbuh lebih besar dibandingkan pohon pada RF. Struktur tersebut ditujukan untuk mengatasi kondisi ketika RF mengalami underfitting. Dalam konteks ini, DRF tidak selalu menggantikan RF pada semua jenis data. Keunggulannya perlu diuji pada kondisi data tertentu, terutama ketika RF menghasilkan pohon yang terlalu sederhana atau ukuran pohon tidak memadai.
Perbedaan RF dan DRF dapat dilihat dari empat aspek. Pertama, RF membangun setiap pohon terutama dari sampel bootstrap, sedangkan DRF menggunakan seluruh data pelatihan pada mekanisme pembentukan pohonnya. Kedua, pohon DRF berpotensi berukuran lebih besar karena memiliki lebih banyak observasi unik. Ketiga, DRF mempertahankan pengacakan variabel dan pengacakan aturan pemisahan untuk menjaga keragaman antarpohon. Keempat, DRF diarahkan untuk meningkatkan kinerja pada data yang mengalami underfitting dalam RF (Khairunnisa et al., 2024).
Jenis data pada penelitian ini adalah data numerik. Data numerik adalah jenis data yang terdiri dari angka dan dapat diukur atau dihitung secara kuantitatif. Data ini digunakan untuk merepresentasikan nilai atau ukuran tertentu dalam berbagai konteks, seperti sains, ekonomi, statistik, dan matematika. Data numerik sering digunakan untuk melakukan perhitungan, analisis, dan visualisasi data.
Dalam laporan ini sumber data yang digunakan adalah sumber data dalam wujud data sekunder, yaitu data yang telah dikumpulkan dan disusun oleh pihak lain di luar praktikan itu sendiri. Data pada praktikum ini yaitu dataset Friedman yang tersedia di R, dimana penelitian ini menggunakan data kuantitatif simulasi yang dibangkitkan secara komputasional menggunakan fungsi mlbench.friedman1() dari paket mlbench pada perangkat lunak R.
Variabel adalah simbol, karakteristik, atau atribut yang dapat diukur atau diamati dalam sebuah penelitian atau eksperimen. Pada laporan ini terdapat 1 batasan masalah. Variabel penelitian yang digunakan terdiri atas satu variabel respons kontinu, yaitu \(Y\), dan sepuluh variabel prediktor numerik, yaitu \(X_1\) sampai \(X_{10}\). Variabel \(X_1\) sampai \(X_5\) memiliki hubungan dengan variabel respons, sedangkan \(X_6\) sampai \(X_{10}\) berperan sebagai variabel tambahan yang tidak memiliki pengaruh langsung terhadap respons.
Langkah-langkah yang digunakan pada penelitian untuk batasan masalah adalah sebagai berikut:
set.seed(234).library(ranger)
library(mlbench)
library(caret)
library(knitr)
set.seed(234)
reg.data <- as.data.frame(mlbench.friedman1(200))
str(reg.data)
## 'data.frame': 200 obs. of 11 variables:
## $ x.1 : num 0.7456 0.7817 0.02 0.7761 0.0669 ...
## $ x.2 : num 0.575 0.316 0.765 0.229 0.172 ...
## $ x.3 : num 0.0289 0.9375 0.7978 0.668 0.5974 ...
## $ x.4 : num 0.72 0.185 0.534 0.553 0.755 ...
## $ x.5 : num 0.875 0.704 0.952 0.478 0.533 ...
## $ x.6 : num 0.276 0.643 0.987 0.843 0.733 ...
## $ x.7 : num 0.9332 0.4018 0.0874 0.893 0.1024 ...
## $ x.8 : num 0.60746 0.00369 0.0106 0.44639 0.83494 ...
## $ x.9 : num 0.756 0.405 0.247 0.144 0.187 ...
## $ x.10: num 0.718 0.534 0.667 0.68 0.595 ...
## $ y : num 24.35 18.05 12.02 12.1 9.91 ...
summary(reg.data)
## x.1 x.2 x.3 x.4
## Min. :0.001198 Min. :0.004583 Min. :0.01021 Min. :0.00707
## 1st Qu.:0.274097 1st Qu.:0.255644 1st Qu.:0.24506 1st Qu.:0.20772
## Median :0.541847 Median :0.436813 Median :0.48965 Median :0.50295
## Mean :0.509759 Mean :0.465323 Mean :0.48570 Mean :0.48821
## 3rd Qu.:0.741416 3rd Qu.:0.651439 3rd Qu.:0.73476 3rd Qu.:0.76599
## Max. :0.993590 Max. :0.999850 Max. :0.99985 Max. :0.99761
## x.5 x.6 x.7 x.8
## Min. :0.008246 Min. :0.005504 Min. :0.001884 Min. :0.002496
## 1st Qu.:0.267523 1st Qu.:0.194431 1st Qu.:0.226788 1st Qu.:0.249826
## Median :0.522081 Median :0.446060 Median :0.491332 Median :0.480306
## Mean :0.503282 Mean :0.468544 Mean :0.503754 Mean :0.482050
## 3rd Qu.:0.751688 3rd Qu.:0.746035 3rd Qu.:0.780325 3rd Qu.:0.696675
## Max. :0.994604 Max. :0.999021 Max. :0.993044 Max. :0.995613
## x.9 x.10 y
## Min. :0.004483 Min. :0.005544 Min. : 3.082
## 1st Qu.:0.203254 1st Qu.:0.329160 1st Qu.:10.593
## Median :0.453476 Median :0.592614 Median :13.810
## Mean :0.471873 Mean :0.540708 Mean :14.270
## 3rd Qu.:0.742412 3rd Qu.:0.765353 3rd Qu.:18.063
## Max. :0.997436 Max. :0.998141 Max. :26.146
dim(reg.data)
## [1] 200 11
Data Friedman dibangkitkan sebanyak 200 observasi dengan 11 kolom,
yaitu 10 variabel prediktor (x.1 sampai x.10)
dan 1 variabel respons y. Seluruh variabel bertipe
numerik. Nilai prediktor berada pada rentang 0 sampai 1 karena
dibangkitkan dari sebaran seragam, sedangkan respons
y memiliki rata-rata 14.27 dan rentang 3.082 sampai
26.146.
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, ]
dim(reg.train)
## [1] 140 11
dim(reg.test)
## [1] 60 11
Pembagian data dengan createDataPartition menghasilkan
140 observasi training (70%) dan 60 observasi testing
(30%), sesuai proporsi 70:30. Penggunaan set.seed(234)
menjamin pembagian data dapat direproduksi.
grid <- expand.grid(
mtry = c(2, 3, 5),
num.trees = c(200, 500, 1000)
)
grid$Model <- paste0("mtry=", grid$mtry, ", trees=", grid$num.trees)
model.list <- vector("list", nrow(grid))
names(model.list) <- grid$Model
for (i in seq_len(nrow(grid))) {
set.seed(234)
model.list[[i]] <- ranger(
y ~ ., data = reg.train,
num.trees = grid$num.trees[i],
mtry = grid$mtry[i],
min.node.size = 5,
replace = TRUE,
sample.fraction = 1,
importance = "permutation",
seed = 234
)
}
# Contoh ringkasan satu model (mtry = 3, num.trees = 500)
model.list[["mtry=3, trees=500"]]
## Ranger result
##
## Call:
## ranger(y ~ ., data = reg.train, num.trees = grid$num.trees[i], mtry = grid$mtry[i], min.node.size = 5, replace = TRUE, sample.fraction = 1, importance = "permutation", seed = 234)
##
## Type: Regression
## Number of trees: 500
## Sample size: 140
## Number of independent variables: 10
## Mtry: 3
## Target node size: 5
## Variable importance mode: permutation
## Splitrule: variance
## OOB prediction error (MSE): 7.442423
## R squared (OOB): 0.7198089
Sembilan model dibentuk dari kombinasi mtry = 2, 3, 5 dan num.trees =
200, 500, 1000, sedangkan parameter lain dibuat tetap, yaitu
min.node.size = 5, replace = TRUE, dan
sample.fraction = 1. Nilai set.seed(234) dan
seed = 234 dipanggil sebelum setiap model agar perbedaan
hasil hanya berasal dari perbedaan parameter, bukan dari pengacakan.
oob.tbl <- data.frame(
mtry = grid$mtry,
num.trees = grid$num.trees,
OOB_MSE = sapply(model.list, function(m) m$prediction.error),
OOB_R2 = sapply(model.list, function(m) m$r.squared)
)
rownames(oob.tbl) <- NULL
kable(round(oob.tbl, 4), caption = "Tabel 4.1 OOB MSE dan OOB R-square sembilan model")
| mtry | num.trees | OOB_MSE | OOB_R2 |
|---|---|---|---|
| 2 | 200 | 8.2222 | 0.6905 |
| 3 | 200 | 7.7097 | 0.7097 |
| 5 | 200 | 7.0632 | 0.7341 |
| 2 | 500 | 8.1267 | 0.6940 |
| 3 | 500 | 7.4424 | 0.7198 |
| 5 | 500 | 6.8750 | 0.7412 |
| 2 | 1000 | 8.0553 | 0.6967 |
| 3 | 1000 | 7.3547 | 0.7231 |
| 5 | 1000 | 6.8260 | 0.7430 |
oob.best <- oob.tbl[which.min(oob.tbl$OOB_MSE), ]
Nilai OOB MSE menunjukkan kesalahan prediksi internal yang dihitung dari observasi yang tidak ikut terambil pada sampel bootstrap masing-masing pohon, sehingga tidak memerlukan data validasi terpisah. Berdasarkan Tabel 4.1, OOB MSE terkecil dimiliki model dengan mtry = 5 dan num.trees = 1000, yaitu sebesar 6.826 dengan OOB R-square 0.743. Sebaliknya, OOB MSE terbesar sebesar 8.2222. Selisih antara nilai terbesar dan terkecil adalah 1.3962.
pred.list <- lapply(model.list, function(m) {
predict(m, data = reg.test)$predictions
})
actual.reg <- reg.test$y
# Contoh tabel aktual, prediksi, dan residual (mtry = 3, num.trees = 500)
p.contoh <- pred.list[["mtry=3, trees=500"]]
hasil.rf.reg <- data.frame(
Aktual = actual.reg,
Prediksi = p.contoh,
Residual = actual.reg - p.contoh
)
kable(round(head(hasil.rf.reg, 10), 4),
caption = "Tabel 4.2 Sepuluh baris pertama hasil prediksi (mtry = 3, num.trees = 500)")
| Aktual | Prediksi | Residual |
|---|---|---|
| 10.2323 | 12.4553 | -2.2230 |
| 11.8453 | 10.6177 | 1.2276 |
| 10.3357 | 13.2295 | -2.8938 |
| 16.7273 | 13.3676 | 3.3597 |
| 25.0771 | 19.5281 | 5.5490 |
| 15.4469 | 14.2547 | 1.1922 |
| 15.6429 | 12.6247 | 3.0182 |
| 7.1108 | 12.8245 | -5.7136 |
| 13.3513 | 15.3894 | -2.0382 |
| 12.8720 | 14.6205 | -1.7486 |
eval.fun <- function(actual, pred) {
MSE <- mean((actual - pred)^2)
RMSE <- sqrt(MSE)
MAE <- mean(abs(actual - pred))
R2 <- 1 - sum((actual - pred)^2) / sum((actual - mean(actual))^2)
c(MSE = MSE, RMSE = RMSE, MAE = MAE, R_Square = R2)
}
eval.mat <- t(sapply(pred.list, eval.fun, actual = actual.reg))
eval.tbl <- data.frame(
Model = grid$Model,
mtry = grid$mtry,
num.trees = grid$num.trees,
OOB_MSE = oob.tbl$OOB_MSE,
eval.mat
)
rownames(eval.tbl) <- NULL
kable(cbind(eval.tbl[, 1:3], round(eval.tbl[, 4:8], 4)),
caption = "Tabel 4.3 Perbandingan performa data testing sembilan model")
| Model | mtry | num.trees | OOB_MSE | MSE | RMSE | MAE | R_Square |
|---|---|---|---|---|---|---|---|
| mtry=2, trees=200 | 2 | 200 | 8.2222 | 7.8700 | 2.8054 | 2.3414 | 0.6717 |
| mtry=3, trees=200 | 3 | 200 | 7.7097 | 7.8139 | 2.7953 | 2.2981 | 0.6740 |
| mtry=5, trees=200 | 5 | 200 | 7.0632 | 7.6596 | 2.7676 | 2.2726 | 0.6805 |
| mtry=2, trees=500 | 2 | 500 | 8.1267 | 8.1774 | 2.8596 | 2.3832 | 0.6589 |
| mtry=3, trees=500 | 3 | 500 | 7.4424 | 7.8278 | 2.7978 | 2.3058 | 0.6734 |
| mtry=5, trees=500 | 5 | 500 | 6.8750 | 7.3826 | 2.7171 | 2.2312 | 0.6920 |
| mtry=2, trees=1000 | 2 | 1000 | 8.0553 | 8.1181 | 2.8492 | 2.3794 | 0.6613 |
| mtry=3, trees=1000 | 3 | 1000 | 7.3547 | 7.7780 | 2.7889 | 2.2996 | 0.6755 |
| mtry=5, trees=1000 | 5 | 1000 | 6.8260 | 7.1925 | 2.6819 | 2.2054 | 0.6999 |
best.rmse <- eval.tbl[which.min(eval.tbl$RMSE), ]
best.mae <- eval.tbl[which.min(eval.tbl$MAE), ]
best.r2 <- eval.tbl[which.max(eval.tbl$R_Square), ]
konsisten <- identical(best.rmse$Model, best.mae$Model) &&
identical(best.rmse$Model, best.r2$Model)
# Rata-rata RMSE menurut mtry dan menurut num.trees
rmse.mtry <- tapply(eval.tbl$RMSE, eval.tbl$mtry, mean)
rmse.trees <- tapply(eval.tbl$RMSE, eval.tbl$num.trees, mean)
Tabel 4.3 memuat MSE, RMSE, MAE, dan R-square pada data testing untuk setiap kombinasi parameter. Model dengan RMSE terkecil adalah mtry=5, trees=1000 dengan MSE 7.1925, RMSE 2.6819, MAE 2.2054, dan R-square 0.6999. Model yang sama juga terbaik menurut MAE dan R-square, sehingga ketiga kriteria memberikan kesimpulan yang konsisten. Nilai R-square sebesar 0.6999 berarti model terbaik mampu menjelaskan sekitar 70% keragaman \(Y\) pada data testing.
Pengaruh mtry dapat dilihat dari rata-rata RMSE pada setiap nilai mtry, yaitu mtry = 2: 2.8381; mtry = 3: 2.794; mtry = 5: 2.7222. Pengaruh jumlah pohon dilihat dari rata-rata RMSE pada setiap num.trees, yaitu num.trees = 200: 2.7894; num.trees = 500: 2.7915; num.trees = 1000: 2.7733. Selisih RMSE terbesar antar nilai num.trees adalah 0.0182, sedangkan antar nilai mtry adalah 0.1159.
par(mfrow = c(3, 3), mar = c(4, 4, 3, 1))
for (i in seq_len(nrow(grid))) {
plot(actual.reg, pred.list[[i]], pch = 19,
xlab = "Nilai Aktual", ylab = "Nilai Prediksi",
main = grid$Model[i], cex.main = 0.9)
abline(a = 0, b = 1, lty = 2, lwd = 2)
}
Gambar 4.1 Plot nilai aktual vs prediksi sembilan model
par(mfrow = c(1, 1))
Garis putus-putus pada Gambar 4.1 adalah garis \(y = x\), yaitu kondisi ketika prediksi sama persis dengan nilai aktual. Semakin dekat titik-titik ke garis tersebut, semakin akurat prediksi model. Secara visual, hubungan antara nilai aktual dan prediksi tampak positif tetapi masih menyisakan sebaran yang cukup lebar di sekitar garis, sejalan dengan R-square pada Tabel 4.3 yang berkisar dari 0.6589 sampai 0.6999. Perlu diperhatikan bahwa RF cenderung menarik prediksi ke arah rata-rata sehingga nilai aktual yang sangat rendah atau sangat tinggi sering diprediksi kurang ekstrem.
par(mfrow = c(3, 3), mar = c(4, 4, 3, 1))
for (i in seq_len(nrow(grid))) {
res <- actual.reg - pred.list[[i]]
plot(pred.list[[i]], res, pch = 19,
xlab = "Nilai Prediksi", ylab = "Residual",
main = grid$Model[i], cex.main = 0.9)
abline(h = 0, lty = 2, lwd = 2)
}
Gambar 4.2 Residual plot sembilan model
par(mfrow = c(1, 1))
res.best <- actual.reg - pred.list[[best.rmse$Model]]
mean.res <- mean(res.best)
cor.res <- cor(pred.list[[best.rmse$Model]], res.best)
Pada model terbaik (mtry=5, trees=1000), rata-rata residual sebesar -0.2726 dan korelasi antara nilai prediksi dengan residual sebesar 0.3411. Rata-rata residual yang dekat dengan nol menunjukkan tidak ada bias sistematis yang besar. Residual yang menyebar acak di sekitar garis nol tanpa pola melengkung atau corong menandakan struktur data telah ditangkap dengan baik. Jika terdapat korelasi negatif antara prediksi dan residual, hal itu merupakan ciri khas RF yang menyusutkan prediksi ke arah rata-rata, sehingga nilai prediksi rendah cenderung memiliki residual positif dan nilai prediksi tinggi cenderung memiliki residual negatif.
par(mfrow = c(1, 2), mar = c(9, 4, 3, 1))
barplot(eval.tbl$RMSE, names.arg = eval.tbl$Model, las = 2, cex.names = 0.7,
main = "RMSE Data Testing", ylab = "RMSE", col = "steelblue")
barplot(eval.tbl$R_Square, names.arg = eval.tbl$Model, las = 2, cex.names = 0.7,
main = "R-Square Data Testing", ylab = "R-Square", col = "darkorange")
Gambar 4.3 Perbandingan RMSE dan R-square sembilan model pada data testing
par(mfrow = c(1, 1))
Gambar 4.3 memperlihatkan bahwa perbedaan antar kombinasi parameter relatif kecil. RMSE terendah sebesar 2.6819 dan RMSE tertinggi sebesar 2.8596.
imp.mat <- sapply(model.list, function(m) m$variable.importance)
kable(round(imp.mat, 4),
caption = "Tabel 4.4 Permutation importance setiap variabel pada sembilan model")
| mtry=2, trees=200 | mtry=3, trees=200 | mtry=5, trees=200 | mtry=2, trees=500 | mtry=3, trees=500 | mtry=5, trees=500 | mtry=2, trees=1000 | mtry=3, trees=1000 | mtry=5, trees=1000 | |
|---|---|---|---|---|---|---|---|---|---|
| x.1 | 7.0564 | 7.9614 | 9.4340 | 7.2812 | 8.1718 | 9.2110 | 7.3275 | 8.1834 | 9.3875 |
| x.2 | 4.1035 | 3.4578 | 3.2554 | 3.9788 | 3.5563 | 3.4368 | 3.8267 | 3.5780 | 3.8211 |
| x.3 | 2.6306 | 1.7999 | 1.6639 | 2.7030 | 2.2339 | 1.7405 | 2.5764 | 2.2834 | 1.8255 |
| x.4 | 10.3007 | 10.9366 | 12.3287 | 9.5898 | 11.0137 | 12.7425 | 9.4642 | 10.9812 | 12.9314 |
| x.5 | 1.4976 | 0.8012 | 0.8824 | 1.3159 | 1.0121 | 0.8821 | 1.2285 | 1.0931 | 0.9720 |
| x.6 | 0.2439 | -0.1421 | 0.2234 | 0.0871 | -0.1326 | 0.1440 | -0.0503 | -0.1254 | 0.1000 |
| x.7 | -0.1685 | -0.2916 | -0.1249 | -0.2258 | -0.1669 | -0.1648 | -0.2479 | -0.1486 | -0.1430 |
| x.8 | 0.0160 | 0.0552 | 0.1128 | -0.0801 | -0.1014 | -0.0339 | -0.1915 | -0.1094 | -0.0096 |
| x.9 | -0.2266 | -0.1151 | -0.1027 | 0.0352 | -0.0368 | -0.0768 | 0.0270 | -0.1269 | -0.0802 |
| x.10 | 0.2389 | 0.1206 | -0.1028 | 0.2882 | 0.1533 | 0.0325 | 0.0591 | 0.0788 | 0.0976 |
importance.best <- sort(model.list[[best.rmse$Model]]$variable.importance,
decreasing = TRUE)
barplot(importance.best, las = 2,
main = paste("Variable Importance -", best.rmse$Model),
ylab = "Permutation Importance", col = "steelblue")
Gambar 4.4 Variable importance model terbaik
top5 <- names(importance.best)[1:5]
top5.true <- all(top5 %in% paste0("x.", 1:5))
noise.max <- max(importance.best[paste0("x.", 6:10)])
signal.min <- min(importance.best[paste0("x.", 1:5)])
Pada model terbaik, variabel dengan kepentingan tertinggi berturut-turut adalah x.4, x.1, x.2, x.3, x.5. Kelima variabel teratas tersebut tepat sama dengan variabel yang secara teori membentuk respons Friedman (x.1 sampai x.5), sehingga model berhasil mengenali variabel yang relevan. Variabel tambahan x.6 sampai x.10 memiliki kepentingan tertinggi sebesar 0.1, sedangkan variabel relevan dengan kepentingan terendah memiliki nilai 0.972. Pada data Friedman, \(Y = 10\sin(\pi X_1 X_2) + 20(X_3 - 0.5)^2 + 10X_4 + 5X_5 + \varepsilon\), sehingga variabel dengan koefisien dan kontribusi yang lebih besar secara teori diharapkan memiliki kepentingan yang lebih tinggi. Tabel 4.4 juga memperlihatkan apakah urutan kepentingan variabel stabil pada sembilan kombinasi parameter.
terbaik <- eval.tbl[which.min(eval.tbl$RMSE), ]
kable(cbind(terbaik[, 1:3], round(terbaik[, 4:8], 4)),
caption = "Tabel 4.5 Model terbaik berdasarkan RMSE data testing", row.names = FALSE)
| Model | mtry | num.trees | OOB_MSE | MSE | RMSE | MAE | R_Square |
|---|---|---|---|---|---|---|---|
| mtry=5, trees=1000 | 5 | 1000 | 6.826 | 7.1925 | 2.6819 | 2.2054 | 0.6999 |
Berdasarkan seluruh evaluasi, model terbaik adalah mtry=5, trees=1000 dengan OOB MSE 6.826, MSE testing 7.1925, RMSE 2.6819, MAE 2.2054, dan R-square 0.6999. Nilai OOB MSE dan MSE testing tidak harus sama karena OOB dihitung dari data training melalui observasi di luar sampel bootstrap, sedangkan MSE testing dihitung dari 60 observasi yang tidak pernah dipakai dalam pelatihan. Selisih keduanya sebesar 0.3665. Dengan data testing yang relatif kecil, selisih ini wajar karena MSE testing memiliki variabilitas penarikan sampel yang lebih besar.
Mengenai pengaruh mtry, nilai mtry menentukan jumlah prediktor yang dipertimbangkan pada setiap pemisahan simpul. Nilai mtry yang kecil membuat pohon lebih beragam dan korelasi antarpohon lebih rendah, tetapi setiap pohon lebih mungkin kehilangan variabel penting. Nilai mtry yang besar membuat pohon lebih mirip satu sama lain. Pada data ini terdapat 10 prediktor dengan hanya 5 yang relevan, sehingga pengaruh mtry perlu dibaca bersama rata-rata RMSE per mtry pada bagian 4.5. Mengenai jumlah pohon, penambahan num.trees pada dasarnya menurunkan varians prediksi dan menstabilkan OOB error sampai titik tertentu, tetapi tidak menurunkan bias sehingga peningkatannya cenderung menjadi kecil pada jumlah pohon yang besar.
Random Forest merupakan metode ensemble learning yang menggabungkan banyak pohon keputusan melalui proses bootstrap sampling dan pemilihan variabel secara acak. Metode ini mampu menangani hubungan nonlinear, interaksi antarvariabel, serta jumlah prediktor yang banyak. Namun, Random Forest masih memiliki keterbatasan, seperti sulitnya interpretasi model, kemungkinan mengalami underfitting, serta belum secara otomatis memperhitungkan autokorelasi spasial pada data.
Double Random Forest merupakan pengembangan dari Random Forest yang dirancang untuk meningkatkan keragaman dan ukuran pohon melalui mekanisme pembentukan model yang berbeda. Beberapa penelitian menunjukkan bahwa Double Random Forest dapat memberikan kinerja yang baik pada data yang mengalami underfitting, data tidak seimbang, dan data berdimensi tinggi. Dalam analisis spasial, Random Forest juga dapat dikembangkan dengan menambahkan prediktor spasial, menerapkan pembobotan geografis, atau menggunakan validasi berbasis jarak. Meskipun demikian, penggunaan pendekatan tersebut harus disesuaikan dengan tujuan prediksi, pola persebaran sampel, serta tingkat autokorelasi spasial.
Kajian mengenai Random Forest dan Double Random Forest masih memiliki ruang untuk dikembangkan, khususnya dalam membandingkan kinerja keduanya pada data yang memiliki karakteristik spasial. Sebagian penelitian Double Random Forest lebih berfokus pada masalah underfitting, ketidakseimbangan kelas, dan interpretabilitas, sedangkan penelitian Random Forest spasial lebih banyak membahas prediktor spasial, heterogenitas wilayah, dan metode validasi. Oleh karena itu, penelitian ini diarahkan untuk membandingkan kinerja model berdasarkan ukuran evaluasi seperti MSE, RMSE, MAE, dan R-square serta menganalisis residual dan kepentingan variabel.
Hasil analisis Random Forest Regression pada 200 observasi data Friedman dengan 140 data training dan 60 data testing menunjukkan bahwa dari sembilan kombinasi mtry dan num.trees, model terbaik adalah mtry=5, trees=1000. Model tersebut menghasilkan OOB MSE sebesar 6.826, serta pada data testing menghasilkan MSE 7.1925, RMSE 2.6819, MAE 2.2054, dan R-square 0.6999. Variabel dengan kepentingan tertinggi pada model terbaik adalah x.4, diikuti x.1 dan x.2. Lima variabel teratas sama dengan x.1 sampai x.5 yang memang membentuk respons Friedman.
Praktikan dapat melakukan pembelajaran lebih lanjut mengenai Machine Learning and modern prediction serta cara interpretasinya agar semakin paham. Dapat dilakukan melalui sumber-sumber belajar lainnya. Dalam penulisan laporan praktikan juga diharapkan untuk selalu teliti dan memperhatikan tata cara penulisan yang baik. Penulis juga berharap kritik dan saran kepada pembaca dan asisten praktikum guna membuat laporan ini menjadi lebih baik.
Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu
Georganos, S., & Kalogirou, S. (2022). A Forest of Forests: A Spatially Weighted and Computationally Efficient Formulation of Geographical Random Forests. ISPRS International Journal of Geo-Information, 11(9). https://doi.org/10.3390/ijgi11090471
Jemeļjanova, M., Kmoch, A., & Uuemaa, E. (2024). Adapting machine learning for environmental spatial data - A review. In Ecological Informatics (Vol. 81). https://doi.org/10.1016/j.ecoinf.2024.102634
Khairunnisa, A., Notodiputro, K. A., & Sartono, B. (2024). A Comparative Study of Random Forest and Double Random Forest Models from View Points of Their Interpretability. Scientific Journal of Informatics, 11(1). https://doi.org/10.15294/sji.v11i1.48721
Kmoch, A., Harrison, C. T., Choi, J., & Uuemaa, E. (2025). Spatial autocorrelation in machine learning for modelling soil organic carbon. Ecological Informatics, 86. https://doi.org/10.1016/j.ecoinf.2025.103057
Mienye, I. D., & Sun, Y. (2022). A Survey of Ensemble Learning: Concepts, Algorithms, Applications, and Prospects. In IEEE Access (Vol. 10). https://doi.org/10.1109/ACCESS.2022.3207287
Milà, C., Ludwig, M., Pebesma, E., Tonne, C., & Meyer, H. (2024). Random forests with spatial proxies for environmental modelling: Opportunities and pitfalls. Geoscientific Model Development, 17(15). https://doi.org/10.5194/gmd-17-6007-2024
Quan, D., Feng, W., Dauphin, G., Wang, X., Huang, W., & Xing, M. (2022). A Novel Double Ensemble Algorithm for the Classification of Multi-Class Imbalanced Hyperspectral Data. Remote Sensing, 14(15). https://doi.org/10.3390/rs14153765
Zhang, Y., Liu, J., & Shen, W. (2022). A Review of Ensemble Learning Algorithms Used in Remote Sensing Applications. In Applied Sciences (Switzerland) (Vol. 12, Number 17). https://doi.org/10.3390/app12178654
Zhao, H., Liu, W., Wang, Y., & Wu, L. (2025). Comparative analysis of algorithmic approaches in ensemble learning: bagging vs. boosting. Scientific Reports, 15(1). https://doi.org/10.1038/s41598-025-15971-0