Perkembangan teknologi informasi menghasilkan data dalam jumlah besar yang memerlukan model prediksi yang akurat dan stabil. Salah satu pendekatan yang banyak digunakan adalah pohon regresi, yaitu model yang membagi data secara bertahap berdasarkan variabel prediktor untuk memprediksi respon numerik. Namun, satu pohon tunggal termasuk model dengan variance tinggi sehingga hasilnya mudah berubah apabila data latih berubah sedikit saja (Fransiska, 2026). Kondisi ini membuat pohon tunggal rentan terhadap overfitting dan kurang stabil untuk memprediksi data baru.
Bootstrap aggregation atau Bagging adalah meta-algoritma ensambel yang meningkatkan stabilitas dan akurasi model serta mengurangi masalah overfitting. Metode ini pertama kali diusulkan oleh Leo Breiman untuk memperbaiki hasil klasifikasi (Fransiska, 2026). Bagging bekerja dengan membuat banyak sampel bootstrap dari data latih, melatih model pada masing-masing sampel, lalu menggabungkan hasilnya. Pada kasus respon kontinu, penggabungan dilakukan dengan merata-ratakan nilai prediksi seluruh model (Fransiska, 2026). Bagging merupakan teknik ensambel yang digunakan untuk menurunkan variance penduga, baik pada masalah klasifikasi maupun regresi, sehingga meningkatkan stabilitas dan akurasi prediksi (Kholifah dkk., 2026). Keunggulan penggabungan banyak pohon juga ditunjukkan oleh Masita dkk. (2025) yang melaporkan bahwa Random Forest Regression, yaitu ensambel pohon berbasis bootstrap, menghasilkan RMSE yang lebih kecil dibandingkan Decision Tree Regression tunggal pada prediksi kepesertaan Jaminan Kesehatan Nasional.
Penerapan Bagging pada model regresi juga telah banyak dilakukan di
Indonesia. Mijayanti dan Helma (2021) menerapkan Bagging MARS pada
pemodelan Produk Domestik Regional Bruto (PDRB) di Provinsi Sumatera
Barat, sedangkan Priambodo dkk. (2024) menerapkannya pada pemodelan
indikator kemiskinan di Provinsi Jawa Timur. Kholifah dkk. (2026)
membandingkan beberapa jumlah replikasi bootstrap (25, 50, 100,
dan 150) pada pemodelan inflasi dan nilai tukar rupiah, dan melaporkan
bahwa kinerja model membaik ketika replikasi dinaikkan dari 25 menjadi
100, tetapi tidak lagi memberikan peningkatan berarti pada 150
replikasi. Temuan tersebut menunjukkan bahwa jumlah replikasi
bootstrap (nbagg) merupakan parameter yang perlu
dikaji. Oleh karena itu, pada praktikum ini dilakukan Bagging Regression
pada data Friedman dengan membandingkan nbagg sebesar 25,
50, dan 100, kemudian kinerjanya dievaluasi menggunakan MSE, RMSE, MAE,
dan R².
Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah sebagai berikut:
nbagg sebesar 25, 50, dan 100 berdasarkan metrik evaluasi
MSE, RMSE, MAE, dan R²?Berdasarkan rumusan masalah tersebut, tujuan yang dapat disimpulkan adalah sebagai berikut:
nbagg sebesar 25, 50, dan 100 berdasarkan metrik evaluasi
MSE, RMSE, MAE, dan R².Bootstrap aggregation atau Bagging adalah sebuah meta-algoritma ensambel yang meningkatkan stabilitas dan akurasi model serta mengurangi masalah overfitting. Metode ini dapat digunakan dengan metode apa pun. Pada fungsi kontinu, metode ini mengambil rata-rata dari keluaran beberapa model, sedangkan pada klasifikasi, hasil beberapa model digabungkan menjadi satu keluaran tunggal melalui voting (Fransiska, 2026).
Langkah-langkah Bagging secara garis besar adalah sebagai berikut (Fransiska, 2026):
Beberapa fitur penting Bagging adalah sebagai berikut (Fransiska, 2026):
Tabel 1. Perbedaan Bagging Classification Tree dan Bagging Regression Tree
| Aspek | Bagging Classification Tree | Bagging Regression Tree |
|---|---|---|
| Variabel respon | Kategorik | Numerik atau kontinu |
| Agregasi | Voting mayoritas atau rata-rata probabilitas | Rata-rata nilai prediksi |
| Metrik evaluasi | Accuracy, Precision, Recall, F1, ROC-AUC | MSE, RMSE, MAE, R-Square |
Sumber: Fransiska (2026).
Pada Bagging Regression Tree, dibentuk \(B\) sampel bootstrap dengan
pengambilan sampel secara acak dengan pengembalian dari data latih,
masing-masing berukuran sama dengan data latih. Pada setiap sampel
dibangun satu pohon regresi, sehingga diperoleh \(B\) pohon. Parameter \(B\) ini dinyatakan sebagai
nbagg pada fungsi bagging() di
package ipred. Prediksi akhir untuk pengamatan
\(x\) diperoleh dengan merata-ratakan
prediksi seluruh pohon:
\[\hat{f}_{bag}(x) = \frac{1}{B}\sum_{b=1}^{B}\hat{f}^{*b}(x)\]
dengan \(\hat{f}^{*b}(x)\) adalah prediksi pohon ke-\(b\) yang dilatih pada sampel bootstrap ke-\(b\). Karena pohon-pohon dilatih pada sampel yang berbeda, kesalahan masing-masing pohon cenderung saling meniadakan ketika dirata-ratakan, sehingga variance prediksi menurun (Kholifah dkk., 2026).
Pada pengambilan sampel bootstrap, setiap pohon hanya
menggunakan sebagian pengamatan, sedangkan pengamatan yang tidak
terambil disebut pengamatan out-of-bag (OOB). Pengamatan OOB
dapat dipakai untuk menguji pohon yang tidak melibatkannya dalam
pelatihan, sehingga diperoleh estimasi galat prediksi tanpa memerlukan
data uji terpisah. Pada fungsi bagging(), estimasi ini
diaktifkan dengan argumen coob = TRUE. Untuk kasus regresi,
hasilnya disajikan sebagai out-of-bag estimate of root mean squared
error.
Pada Bagging Regression, evaluasi dilakukan dengan membandingkan nilai aktual dan nilai prediksi. Metrik yang digunakan adalah MSE, RMSE, MAE, dan koefisien determinasi (R²) (Fransiska, 2026):
\[MSE = \frac{1}{n}\sum_{i=1}^{n}\left(y_i - \hat{y}_i\right)^2\]
\[RMSE = \sqrt{MSE}\]
\[MAE = \frac{1}{n}\sum_{i=1}^{n}\left|y_i - \hat{y}_i\right|\]
\[R^2 = 1 - \frac{\sum_{i=1}^{n}\left(y_i - \hat{y}_i\right)^2}{\sum_{i=1}^{n}\left(y_i - \bar{y}\right)^2}\]
Semakin kecil nilai MSE, RMSE, dan MAE, serta semakin besar nilai R², maka model semakin baik dalam memprediksi. RMSE dan MAE memiliki satuan yang sama dengan variabel respon sehingga lebih mudah diinterpretasikan (Masita dkk., 2025).
Data Friedman #1 adalah data simulasi yang disediakan oleh
package mlbench melalui fungsi
mlbench.friedman1(). Data ini terdiri atas 10 variabel
prediktor \(x_1, x_2, \dots, x_{10}\)
yang masing-masing berdistribusi uniform pada selang \([0,1]\). Variabel respon dibangkitkan
dengan persamaan berikut:
\[y = 10\sin(\pi x_1 x_2) + 20(x_3 - 0.5)^2 + 10x_4 + 5x_5 + \varepsilon, \quad \varepsilon \sim N(0,1)\]
Persamaan di atas menunjukkan bahwa hanya lima variabel pertama (\(x_1\) sampai \(x_5\)) yang memengaruhi \(y\), sedangkan \(x_6\) sampai \(x_{10}\) merupakan variabel noise. Hubungan antara prediktor dan respon bersifat non-linear dan memuat interaksi (\(x_1\) dan \(x_2\)), sehingga data ini sering dipakai untuk menguji model non-linear seperti pohon regresi.
Jenis data yang digunakan dalam penelitian ini adalah data
kuantitatif, yaitu data berbentuk angka yang dapat diolah dan dianalisis
secara statistik. Data yang digunakan merupakan data simulasi Friedman
#1 yang dibangkitkan dengan fungsi mlbench.friedman1() pada
package mlbench dalam perangkat lunak R, sebanyak
200 observasi. Variabel y digunakan sebagai variabel
respons untuk membangun model prediksi menggunakan metode Bagging
(Bagging Regression).
| No | Variabel | Keterangan | Tipe Data | Peran |
|---|---|---|---|---|
| 1 | y | Variabel respon hasil persamaan Friedman #1 | Numerik | Respons |
| 2 | x.1 | Prediktor 1, berdistribusi uniform (0,1) | Numerik | Prediktor |
| 3 | x.2 | Prediktor 2, berdistribusi uniform (0,1) | Numerik | Prediktor |
| 4 | x.3 | Prediktor 3, berdistribusi uniform (0,1) | Numerik | Prediktor |
| 5 | x.4 | Prediktor 4, berdistribusi uniform (0,1) | Numerik | Prediktor |
| 6 | x.5 | Prediktor 5, berdistribusi uniform (0,1) | Numerik | Prediktor |
| 7 | x.6 | Prediktor 6, berdistribusi uniform (0,1),
tidak memengaruhi y (noise) |
Numerik | Prediktor |
| 8 | x.7 | Prediktor 7, berdistribusi uniform (0,1),
tidak memengaruhi y (noise) |
Numerik | Prediktor |
| 9 | x.8 | Prediktor 8, berdistribusi uniform (0,1),
tidak memengaruhi y (noise) |
Numerik | Prediktor |
| 10 | x.9 | Prediktor 9, berdistribusi uniform (0,1),
tidak memengaruhi y (noise) |
Numerik | Prediktor |
| 11 | x.10 | Prediktor 10, berdistribusi uniform (0,1),
tidak memengaruhi y (noise) |
Numerik | Prediktor |
Langkah-langkah yang digunakan pada penelitian ini adalah sebagai berikut:
Pada batasan masalah diminta menggunakan data Friedman kemudian
melakukan Bagging Regression dengan membandingkan hasil menggunakan
nbagg = c(25, 50, 100), kemudian menghitung metrik
evaluasinya. Berikut ini adalah hasil analisis yang diperoleh:
Berikut adalah package yang digunakan pada pertemuan 3. Package
ipred menyediakan fungsi bagging() untuk
membentuk model Bagging, mlbench untuk membangkitkan data
Friedman, rpart dan rpart.plot untuk membentuk
dan memvisualisasikan pohon regresi penyusun Bagging, serta
ggplot2 untuk visualisasi hasil.
## x.1 x.2 x.3 x.4 x.5 x.6 x.7
## 1 0.2875775 0.2387260 0.9860543 0.2372297 0.47068183 0.2736227 0.8585914
## 2 0.7883051 0.9623589 0.1370675 0.6864904 0.36584547 0.5938669 0.8873848
## 3 0.4089769 0.6013657 0.9053096 0.2258184 0.12127205 0.1601848 0.4890915
## 4 0.8830174 0.5150297 0.5763018 0.3184946 0.04699368 0.8534302 0.7180918
## 5 0.9404673 0.4025733 0.3954489 0.1739838 0.26279630 0.8477392 0.4867056
## 6 0.0455565 0.8802465 0.4498025 0.8014296 0.96864117 0.4778868 0.9887089
## x.8 x.9 x.10 y
## 1 0.23323974 0.63918581 0.15526414 10.59497
## 2 0.23065360 0.12482240 0.84585101 17.16530
## 3 0.06172627 0.25526578 0.21438043 13.11249
## 4 0.49711861 0.82057469 0.66987324 13.30344
## 5 0.24412509 0.80378039 0.61775645 10.00466
## 6 0.75818554 0.04583463 0.04999978 15.20495
## 'data.frame': 200 obs. of 11 variables:
## $ x.1 : num 0.288 0.788 0.409 0.883 0.94 ...
## $ x.2 : num 0.239 0.962 0.601 0.515 0.403 ...
## $ x.3 : num 0.986 0.137 0.905 0.576 0.395 ...
## $ x.4 : num 0.237 0.686 0.226 0.318 0.174 ...
## $ x.5 : num 0.471 0.366 0.121 0.047 0.263 ...
## $ x.6 : num 0.274 0.594 0.16 0.853 0.848 ...
## $ x.7 : num 0.859 0.887 0.489 0.718 0.487 ...
## $ x.8 : num 0.2332 0.2307 0.0617 0.4971 0.2441 ...
## $ x.9 : num 0.639 0.125 0.255 0.821 0.804 ...
## $ x.10: num 0.155 0.846 0.214 0.67 0.618 ...
## $ y : num 10.6 17.2 13.1 13.3 10 ...
## [1] 200 11
## x.1 x.2 x.3 x.4
## Min. :0.0006248 Min. :0.006301 Min. :0.0004654 Min. :0.001192
## 1st Qu.:0.2721181 1st Qu.:0.235623 1st Qu.:0.2736035 1st Qu.:0.246362
## Median :0.4820961 Median :0.469024 Median :0.5061597 Median :0.492065
## Mean :0.5063919 Mean :0.489122 Mean :0.5022216 Mean :0.493561
## 3rd Qu.:0.7333708 3rd Qu.:0.741910 3rd Qu.:0.7570153 3rd Qu.:0.755200
## Max. :0.9942698 Max. :0.999405 Max. :0.9966172 Max. :0.994936
## x.5 x.6 x.7 x.8
## Min. :0.003896 Min. :0.002479 Min. :0.001156 Min. :0.01152
## 1st Qu.:0.261924 1st Qu.:0.263275 1st Qu.:0.234549 1st Qu.:0.27500
## Median :0.518644 Median :0.478715 Median :0.487690 Median :0.49757
## Mean :0.495092 Mean :0.486666 Mean :0.473317 Mean :0.51007
## 3rd Qu.:0.734548 3rd Qu.:0.719703 3rd Qu.:0.715833 3rd Qu.:0.75497
## Max. :0.991745 Max. :0.992616 Max. :0.998883 Max. :0.99952
## x.9 x.10 y
## Min. :0.005364 Min. :0.004609 Min. : 4.39
## 1st Qu.:0.272996 1st Qu.:0.249906 1st Qu.:10.73
## Median :0.556871 Median :0.497349 Median :14.56
## Mean :0.528512 Mean :0.492717 Mean :14.60
## 3rd Qu.:0.798814 3rd Qu.:0.729677 3rd Qu.:18.09
## Max. :0.996372 Max. :0.994995 Max. :27.72
Data Friedman yang dibangkitkan terdiri atas 200 observasi dan 11
variabel, yaitu 1 variabel respons (y) dan 10 variabel
prediktor (x.1 sampai x.10), seluruhnya
bertipe numerik. Berdasarkan ringkasan y, nilai minimum
sebesar 4,39, median sebesar 14,56, rata-rata sebesar 14,60, dan
maksimum sebesar 27,72. Seluruh variabel prediktor berada pada rentang 0
sampai 1 sesuai distribusi uniform yang digunakan untuk
membangkitkan data.
## x.1 x.2 x.3 x.4 x.5 x.6 x.7 x.8 x.9 x.10 y
## 0 0 0 0 0 0 0 0 0 0 0
Tidak terdapat missing value pada data (total 0), sehingga data dapat langsung digunakan untuk pemodelan tanpa penanganan data hilang.
# Fungsi untuk menghitung metrik evaluasi regresi
hitung_metrik <- function(aktual, prediksi) {
mse <- mean((aktual - prediksi)^2)
c(
MSE = mse,
RMSE = sqrt(mse),
MAE = mean(abs(aktual - prediksi)),
R2 = 1 - sum((aktual - prediksi)^2) / sum((aktual - mean(aktual))^2)
)
}Fungsi hitung_metrik() dibuat agar perhitungan MSE,
RMSE, MAE, dan R² pada ketiga model menggunakan rumus yang sama, sesuai
rumus pada subbab 2.4.
##
## Bagging regression trees with 25 bootstrap replications
##
## Call: bagging.data.frame(formula = y ~ ., data = learn, nbagg = 25,
## coob = TRUE)
##
## Out-of-bag estimate of root mean squared error: 2.7366
## Length Class Mode
## y 200 -none- numeric
## X 10 data.frame list
## mtrees 25 -none- list
## OOB 1 -none- logical
## comb 1 -none- logical
## err 1 -none- numeric
## call 5 -none- call
Model Bagging Regression dengan nbagg = 25 dibentuk dari
25 pohon regresi, masing-masing dilatih pada sampel bootstrap
dari 200 observasi. Estimasi out-of-bag RMSE model ini sebesar
2,7366, yang berarti rata-rata kesalahan prediksi pada pengamatan yang
tidak ikut melatih pohon adalah sekitar 2,74 satuan y.
# Struktur pohon regresi pertama
pohon1 <- mod25$mtrees[[1]]$btree
jumlah_daun <- sum(pohon1$frame$var == "<leaf>")
head(capture.output(print(pohon1)), 15)## [1] "n= 200 "
## [2] ""
## [3] "node), split, n, deviance, yval"
## [4] " * denotes terminal node"
## [5] ""
## [6] " 1) root 200 4025.49800 14.029480 "
## [7] " 2) x.4< 0.6502426 138 2160.39900 12.313130 "
## [8] " 4) x.2< 0.3684006 66 456.23160 9.859159 "
## [9] " 8) x.5< 0.7123567 49 196.75530 8.894625 "
## [10] " 16) x.8>=0.3836868 34 130.62010 8.338864 "
## [11] " 32) x.8< 0.4076226 9 1.81360 5.965380 *"
## [12] " 33) x.8>=0.4076226 25 59.85333 9.193318 *"
## [13] " 17) x.8< 0.3836868 15 31.83001 10.154350 *"
## [14] " 9) x.5>=0.7123567 17 82.49546 12.639290 *"
## [15] " 5) x.2>=0.3684006 72 942.38620 14.562610 "
Pohon regresi pertama pada model nbagg = 25 memiliki 12
simpul daun. Jumlah simpul yang besar terjadi karena fungsi
bagging() secara bawaan membentuk pohon yang tumbuh penuh
(tanpa pemangkasan), sehingga setiap pohon bersifat kompleks dengan bias
rendah tetapi variance tinggi. Kondisi inilah yang sesuai
dengan karakteristik Bagging, yaitu paling cocok digunakan pada model
dengan variance tinggi dan bias rendah.
pred25 <- predict(mod25, newdata = learn)
hasil25 <- data.frame(Aktual = learn$y, Prediksi = pred25)
head(hasil25, 10)## Aktual Prediksi
## 1 10.594975 9.667302
## 2 17.165302 17.703382
## 3 13.112492 13.359338
## 4 13.303440 14.777714
## 5 10.004662 11.232180
## 6 15.204950 18.347786
## 7 10.687788 9.797199
## 8 23.748416 19.067135
## 9 11.168910 11.062871
## 10 9.731385 9.342596
## MSE RMSE MAE R2
## 3.5190 1.8759 1.4446 0.8427
Hasil prediksi model nbagg = 25 menghasilkan MSE sebesar
3,5190, RMSE sebesar 1,8759, dan MAE sebesar 1,4446. Nilai R² sebesar
0,8427 menunjukkan bahwa model mampu menjelaskan sekitar 84,27%
keragaman y pada data yang digunakan.
plot(learn$y, type = "l", lwd = 2,
xlab = "Observasi", ylab = "Nilai Y",
main = "Perbandingan Nilai Aktual dan Prediksi (nbagg = 25)", col = "red")
lines(pred25, lwd = 2, lty = 2, col = "blue")
legend("topright", legend = c("Aktual", "Prediksi"),
lty = c(1, 2), lwd = c(2, 2), col = c("red", "blue"))Pada grafik, garis merah menunjukkan nilai aktual dan garis biru putus-putus menunjukkan nilai prediksi. Semakin berimpit kedua garis, semakin dekat prediksi model dengan nilai sebenarnya.
##
## Bagging regression trees with 50 bootstrap replications
##
## Call: bagging.data.frame(formula = y ~ ., data = learn, nbagg = 50,
## coob = TRUE)
##
## Out-of-bag estimate of root mean squared error: 2.6582
## Length Class Mode
## y 200 -none- numeric
## X 10 data.frame list
## mtrees 50 -none- list
## OOB 1 -none- logical
## comb 1 -none- logical
## err 1 -none- numeric
## call 5 -none- call
Model dengan nbagg = 50 dibentuk dari 50 pohon regresi
dengan estimasi out-of-bag RMSE sebesar 2,6582.
pred50 <- predict(mod50, newdata = learn)
hasil50 <- data.frame(Aktual = learn$y, Prediksi = pred50)
head(hasil50, 10)## Aktual Prediksi
## 1 10.594975 9.789806
## 2 17.165302 17.761975
## 3 13.112492 13.632967
## 4 13.303440 14.553878
## 5 10.004662 11.220419
## 6 15.204950 17.675590
## 7 10.687788 10.579998
## 8 23.748416 19.097176
## 9 11.168910 11.093494
## 10 9.731385 9.608181
## MSE RMSE MAE R2
## 3.4140 1.8477 1.4247 0.8474
Model nbagg = 50 menghasilkan MSE sebesar 3,4140, RMSE
sebesar 1,8477, MAE sebesar 1,4247, dan R² sebesar 0,8474, yang berarti
model menjelaskan sekitar 84,74% keragaman y.
plot(learn$y, type = "l", lwd = 2,
xlab = "Observasi", ylab = "Nilai Y",
main = "Perbandingan Nilai Aktual dan Prediksi (nbagg = 50)", col = "red")
lines(pred50, lwd = 2, lty = 2, col = "blue")
legend("topright", legend = c("Aktual", "Prediksi"),
lty = c(1, 2), lwd = c(2, 2), col = c("red", "blue"))##
## Bagging regression trees with 100 bootstrap replications
##
## Call: bagging.data.frame(formula = y ~ ., data = learn, nbagg = 100,
## coob = TRUE)
##
## Out-of-bag estimate of root mean squared error: 2.6574
## Length Class Mode
## y 200 -none- numeric
## X 10 data.frame list
## mtrees 100 -none- list
## OOB 1 -none- logical
## comb 1 -none- logical
## err 1 -none- numeric
## call 5 -none- call
Model dengan nbagg = 100 dibentuk dari 100 pohon regresi
dengan estimasi out-of-bag RMSE sebesar 2,6574.
pred100 <- predict(mod100, newdata = learn)
hasil100 <- data.frame(Aktual = learn$y, Prediksi = pred100)
head(hasil100, 10)## Aktual Prediksi
## 1 10.594975 9.765383
## 2 17.165302 17.792408
## 3 13.112492 13.669305
## 4 13.303440 14.380736
## 5 10.004662 11.045641
## 6 15.204950 17.183246
## 7 10.687788 10.607459
## 8 23.748416 18.806131
## 9 11.168910 11.093265
## 10 9.731385 9.947430
## MSE RMSE MAE R2
## 3.4755 1.8643 1.4381 0.8446
Model nbagg = 100 menghasilkan MSE sebesar 3,4755, RMSE
sebesar 1,8643, MAE sebesar 1,4381, dan R² sebesar 0,8446, yang berarti
model menjelaskan sekitar 84,46% keragaman y.
plot(learn$y, type = "l", lwd = 2,
xlab = "Observasi", ylab = "Nilai Y",
main = "Perbandingan Nilai Aktual dan Prediksi (nbagg = 100)", col = "red")
lines(pred100, lwd = 2, lty = 2, col = "blue")
legend("topright", legend = c("Aktual", "Prediksi"),
lty = c(1, 2), lwd = c(2, 2), col = c("red", "blue"))hasil <- data.frame(
nbagg = c(25, 50, 100),
OOB_RMSE = c(mod25$err, mod50$err, mod100$err),
MSE = c(m25["MSE"], m50["MSE"], m100["MSE"]),
RMSE = c(m25["RMSE"], m50["RMSE"], m100["RMSE"]),
MAE = c(m25["MAE"], m50["MAE"], m100["MAE"]),
R2 = c(m25["R2"], m50["R2"], m100["R2"])
)
rownames(hasil) <- NULL
kable(hasil, digits = 4, align = "c",
caption = "Perbandingan metrik evaluasi Bagging Regression")| nbagg | OOB_RMSE | MSE | RMSE | MAE | R2 |
|---|---|---|---|---|---|
| 25 | 2.7366 | 3.5190 | 1.8759 | 1.4446 | 0.8427 |
| 50 | 2.6582 | 3.4140 | 1.8477 | 1.4247 | 0.8474 |
| 100 | 2.6574 | 3.4755 | 1.8643 | 1.4381 | 0.8446 |
Berdasarkan tabel perbandingan, metrik pada data yang digunakan untuk
pemodelan menunjukkan bahwa model dengan nbagg = 50
memiliki RMSE terkecil (1,8477), model dengan nbagg = 50
memiliki MAE terkecil (1,4247), dan model dengan nbagg = 50
memiliki R² terbesar (0,8474). Dari nbagg = 25 ke
nbagg = 100, RMSE menurun sebesar 0,62%, dan secara
keseluruhan RMSE tidak menurun secara konsisten seiring bertambahnya
nbagg.
Metrik yang didapatkan yaitu dengan memprediksi data yang sama dengan
data pelatihan, sehingga cenderung lebih optimistis dibandingkan kinerja
pada data baru. Karena itu, estimasi out-of-bag (OOB) RMSE
perlu diperhatikan sebagai ukuran yang lebih jujur. Berdasarkan OOB
RMSE, model terbaik adalah model dengan nbagg = 100
(2,6574). Dari nbagg = 25 ke nbagg = 100, OOB
RMSE menurun sebesar 2,90%, dan secara keseluruhan OOB RMSE menurun
secara konsisten seiring bertambahnya nbagg. Selisih yang
jelas antara RMSE pada data pelatihan dan OOB RMSE (misalnya pada
nbagg = 100, RMSE 1,8643 berbanding OOB RMSE 2,6574)
menunjukkan bahwa kesalahan pada data baru lebih besar daripada
kesalahan pada data pelatihan, sehingga kemampuan generalisasi model
sebaiknya dinilai dari OOB RMSE, bukan hanya dari RMSE pada data
pelatihan.
metrik_long <- data.frame(
nbagg = factor(rep(hasil$nbagg, 2)),
Jenis = rep(c("RMSE (data pelatihan)", "OOB RMSE"), each = 3),
Nilai = c(hasil$RMSE, hasil$OOB_RMSE)
)
ggplot(metrik_long, aes(x = nbagg, y = Nilai, fill = Jenis)) +
geom_col(position = "dodge") +
geom_text(aes(label = round(Nilai, 3)),
position = position_dodge(width = 0.9), vjust = -0.3, size = 3.5) +
theme_minimal() +
labs(
title = "Perbandingan RMSE dan OOB RMSE berdasarkan nbagg",
x = "Jumlah replikasi bootstrap (nbagg)",
y = "Nilai RMSE"
)Grafik batang memperlihatkan perbandingan RMSE pada data pelatihan
dan OOB RMSE untuk setiap nilai nbagg. Batang OOB RMSE yang
lebih tinggi daripada RMSE pada data pelatihan menunjukkan bahwa kinerja
model pada pengamatan yang tidak ikut dilatih lebih rendah dibandingkan
kinerja pada data pelatihan.
scatter_df <- rbind(
data.frame(Aktual = learn$y, Prediksi = pred25, Model = "nbagg = 25"),
data.frame(Aktual = learn$y, Prediksi = pred50, Model = "nbagg = 50"),
data.frame(Aktual = learn$y, Prediksi = pred100, Model = "nbagg = 100")
)
scatter_df$Model <- factor(scatter_df$Model,
levels = c("nbagg = 25", "nbagg = 50", "nbagg = 100"))
ggplot(scatter_df, aes(x = Aktual, y = Prediksi)) +
geom_point(alpha = 0.6, color = "steelblue") +
geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
facet_wrap(~ Model) +
theme_minimal() +
labs(
title = "Nilai Aktual vs Prediksi pada Berbagai nbagg",
x = "Nilai Aktual", y = "Nilai Prediksi"
)Pada diagram pencar, garis putus-putus merah merupakan garis identitas, yaitu kondisi ketika nilai prediksi sama persis dengan nilai aktual. Titik-titik yang berada dekat garis ini menunjukkan prediksi yang akurat, sedangkan titik yang jauh dari garis menunjukkan prediksi yang kurang akurat. Pola titik yang rapat di sekitar garis pada ketiga panel menunjukkan bahwa ketiga model mampu mengikuti pola data dengan baik.
Bagging merupakan metode ensambel yang membangun banyak model pada
sampel bootstrap dari data latih, kemudian menggabungkan
hasilnya. Pada kasus regresi, penggabungan dilakukan dengan
merata-ratakan nilai prediksi seluruh pohon, sehingga variance
prediksi menurun dan model menjadi lebih stabil. Model Bagging
Regression pada data Friedman dibangun dengan fungsi
bagging() pada package ipred dengan
coob = TRUE untuk memperoleh estimasi out-of-bag,
dan kinerjanya dievaluasi menggunakan MSE, RMSE, MAE, dan R².
Berdasarkan hasil yang diperoleh, perbandingan model dengan
nbagg sebesar 25, 50, dan 100 menunjukkan bahwa model
dengan nbagg = 50 memiliki RMSE terkecil pada data
pelatihan (1,8477) dan R² terbesar berada pada model
nbagg = 50 (0,8474). Berdasarkan estimasi
out-of-bag, model terbaik adalah model dengan
nbagg = 100 dengan OOB RMSE sebesar 2,6574. Karena OOB RMSE
lebih mencerminkan kemampuan model pada data baru, model dengan
nbagg = 100 dipilih sebagai model terbaik pada praktikum
ini.
Praktikan disarankan untuk mempelajari lebih lanjut mengenai program
RStudio melalui berbagai sumber pembelajaran, seperti buku, jurnal,
modul praktikum, maupun sumber belajar lainnya agar semakin memahami
penerapan metode ensambel. Pada penelitian selanjutnya, disarankan
membagi data menjadi data latih dan data uji, mencoba nilai
nbagg yang lebih besar (misalnya 150 atau 200) untuk
melihat titik jenuh peningkatan kinerja, serta membandingkan Bagging
dengan pohon regresi tunggal dan Random Forest. Praktikan juga
diharapkan lebih teliti dalam melakukan pengolahan data dan penulisan
kode program agar dapat meminimalkan kesalahan selama praktikum.
Fransiska, H. (2026). Modul Praktikum Machine Learning dan Model Prediction. Universitas Bengkulu: Bengkulu.
Kholifah, R. I. N., Utami, T. W., & Imron, A. (2026). Modeling inflation and rupiah exchange rate responses using bootstrap aggregating multivariate adaptive regression spline in Indonesia. JTAM (Jurnal Teori dan Aplikasi Matematika), 10(3), 1000–1011. https://doi.org/10.31764/jtam.v10i3.37314
Masita, A. R. P., Saputri, P. D., & Atok, R. M. (2025). Analisis perbandingan metode decision tree regression dan random forest regression pada prediksi kepesertaan Jaminan Kesehatan Nasional. MATHunesa: Jurnal Ilmiah Matematika, 13(2), 291–302.
Mijayanti, T., & Helma. (2021). Bootstrap Aggregating Multivariate Adaptive Regression Splines (Bagging MARS) dan penerapannya pada pemodelan Produk Domestik Regional Bruto (PDRB) di Provinsi Sumatera Barat. Journal of Mathematics UNP, 6(4), 38–43. https://doi.org/10.24036/unpjomath.v6i4.12233
Priambodo, D., Wasono, R., & Al Haris, M. (2024). Modeling of poverty indicators in East Java Province using bootstrap aggregating multivariate adaptive regression spline (Bagging MARS). Jurnal Statistika Universitas Muhammadiyah Semarang, 12(2), 19–28. https://doi.org/10.14710/JSUNIMUS.12.2.2024.19-28