Perkembangan teknologi informasi mendorong pemanfaatan metode statistika dan machine learning untuk menghasilkan prediksi yang akurat berdasarkan data. Salah satu metode yang dapat digunakan adalah ensemble learning, yaitu pendekatan yang menggabungkan beberapa model untuk menghasilkan prediksi akhir. Penggabungan model tersebut dapat meningkatkan kinerja prediksi, terutama ketika model yang digunakan memiliki tingkat ketidakstabilan yang tinggi terhadap perubahan data. Salah satu metode ensemble learning yang banyak digunakan adalah bootstrap aggregating atau bagging (Breiman, 1996).
Bootstrap aggregating atau bagging merupakan metode yang membentuk beberapa model melalui pengambilan sampel bootstrap dari data latih, kemudian menggabungkan hasil prediksi model-model tersebut menjadi satu prediksi akhir. Pada regresi, penggabungan dilakukan dengan menghitung rata-rata hasil prediksi dari seluruh model yang terbentuk. Metode bagging merupakan penyempurnaan metode Classification and Regression Trees (CART), yaitu dengan menggabungkan banyak nilai dugaan menjadi satu nilai dugaan sehingga hasil prediksi diharapkan lebih stabil (Wibowo & Purwarianti, 2018; Breiman, 1996).
Penerapan bagging memiliki keunggulan dalam mengurangi keragaman hasil prediksi yang dihasilkan oleh pohon regresi tunggal. Proses agregasi melalui perataan prediksi dapat mengurangi varians dugaan tanpa harus meningkatkan bias secara berarti, sehingga berpotensi menurunkan kesalahan prediksi pada data baru. Selain itu, bagging dapat meningkatkan stabilitas dan akurasi model serta membantu mengurangi masalah overfitting, meskipun efektivitasnya tetap bergantung pada karakteristik data dan model yang digunakan (Breiman, 1996; Fransiska, 2026). Oleh karena itu pada praktikum kali ini dibahas mengenai “Bagging”.
Berdasarkan latar belakang, rumusan masalah pada penelitian ini, yaitu:
Bagaimana konsep dasar dan prinsip kerja metode bagging?
Bagaimana cara megimplementasikan metode bagging dengan menggunakan R?
Bagaimana cara mengevaluasi performa bagging?
Berdasarkan rumusan masalah di atas, tujuan pada penelitian ini, yaitu:
Mahasiswa dapat memahami konsep dasar dan prinsip kerja metode bagging.
Mahasiswa dapat megimplementasikan metode bagging dengan menggunakan R.
Mengevaluasi performa bagging.
Adapun manfaat pada penelitian ini, yaitu:
Dapat memberikan informasi serta pengetahuan tentang bagging menggunakan program RStudio.
Mengembangkan dan menerapkan wawasan ilmu yang telah diperoleh khususnya tentang bagging di RStudio.
Batasan masalah pada penelitian ini, yaitu melakukan bagging regression menggunakan data friedman, lalu bandingkan hasil dengan menggunakan nbagg=c(25, 50, 100) kemudian hitung metrik evaluasinya.
Adapun sistematika penulisan dari praktikum ini adalah:
BAB I PENDAHULUAN
Bab I terdiri dari latar belakang, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, dan sistematika penulisan.
BAB II TINJAUAN PUSTAKA
Bab ini berisi tentang kajian pustaka yang terdiri dari jurnal-jurnal, buku-buku, dan informasi pendukung tentang Machine Learning pada program R.
BAB III METODE PENELITIAN
Bab ini terdiri dari analisis jenis dan sumber data, variabel penelitian, algoritma penelitian, dan diagram alur.
BAB IV HASIL DAN PEMBAHASAN
Bab ini merupakan tahapan pencapaian hasil yang diperoleh dari analisis data yang dilakukan serta penjelasan dari hasil tersebut di bagian pembahasan.
BAB V KESIMPULAN DAN SARAN
Bab ini merupakan bagian penutup dalam laporan ini berupa penarikan kesimpulan mengenai hasil analisis dari penelitian serta penyampaian saran oleh penulis.
DAFTAR PUSTAKA
LAMPIRAN
Bootstrap adalah teknik pengambilan sampel acak dengan pengembalian dari data yang ada, dengan ukuran sampel sama dengan ukuran data asli (Efron & Tibshirani, 1993). Karena pengambilan dilakukan dengan pengembalian, sebagian observasi dapat muncul lebih dari sekali dan sebagian lain tidak terambil sama sekali. Peluang sebuah observasi tidak terambil dalam satu sampel bootstrap berukuran \(n\) adalah:
\[ \left(1 - \frac{1}{n}\right)^n \xrightarrow{n \to \infty} e^{-1} \approx 0{,}368 \]
Artinya, rata-rata sekitar 36,8% observasi tidak terpilih pada setiap sampel bootstrap. Observasi yang tidak terpilih ini disebut data Out-of-Bag (OOB) dan dapat dimanfaatkan sebagai data uji internal.
Bagging adalah metode ensemble yang membangun \(B\) model dasar (base learner) dari \(B\) sampel bootstrap yang berbeda, lalu menggabungkan prediksinya. Prinsip kerjanya adalah sebagai berikut (Breiman, 1996).
\[ \hat{f}_{bag}(x) = \frac{1}{B} \sum_{b=1}^{B} \hat{f}^{*b}(x) \]
Pada klasifikasi, prediksi akhir ditentukan melalui suara terbanyak (majority vote) dari seluruh model.
Alasan bagging menurunkan variance: apabila \(B\) prediksi masing-masing memiliki variance \(\sigma^2\) dan korelasi antarpasangan \(\rho\), maka variance rata-ratanya adalah
\[ Var\left(\frac{1}{B}\sum_{b=1}^{B}\hat{f}^{*b}\right) = \rho\,\sigma^2 + \frac{1-\rho}{B}\,\sigma^2 \]
Suku kedua mengecil saat \(B\) membesar, sedangkan suku pertama tidak berubah. Dengan demikian, menambah jumlah model menurunkan variance hanya sampai batas tertentu, dan penurunannya makin kecil seiring bertambahnya \(B\) (Hastie et al., 2009). Bagging paling bermanfaat untuk model yang tidak stabil (variance tinggi, bias rendah) seperti pohon keputusan yang dibiarkan tumbuh dalam, dan tidak terlalu bermanfaat untuk model yang sudah stabil.
Jenis data pada penelitian ini adalah data kuantitatif. Data kuantitatif adalah jenis data yang berbentuk angka atau bilangan dan dapat diukur atau dihitung secara langsung. Laporan ini memiliki satu batasan masalah yang menggunakan sumber data sekunder. Data sekunder adalah data yang diperoleh secara tidak langsung melalui media perantara. Data didapatkan dari program R secara langsung.
Variabel penelitian adalah karakter atau segala sesuatu yang menjadi perhatian dalam suatu penelitian. Pada batasan masalah terdapat 11 variabel. Variabel tersebut terdiri dari 1 variabel respon dan 10 variabel prediktor.
## Loading required package: ggplot2
## Loading required package: lattice
Package yang digunakan terdiri atas mlbench untuk membangkitkan data Friedman, ipred untuk membangun model Bagging Regression melalui fungsi bagging(), dan caret untuk membagi data menjadi training dan testing melalui fungsi createDataPartition().
## '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 ...
## 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
## 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 dibangkitkan menggunakan fungsi mlbench.friedman1() dengan jumlah observasi sebanyak 200. Dataset Friedman merupakan data simulasi untuk kasus regresi yang terdiri atas sepuluh variabel prediktor, yaitu x.1 sampai x.10, dan satu variabel respon y. Seluruh prediktor berdistribusi uniform pada interval 0 sampai 1. Variabel respon dibentuk dari fungsi nonlinear yang hanya melibatkan x.1 sampai x.5 ditambah error acak, sedangkan x.6 sampai x.10 merupakan variabel noise yang tidak berpengaruh terhadap y. Karena seluruh variabel bertipe numerik dan tidak ada nilai hilang, data dapat langsung digunakan tanpa penanganan missing value.
set.seed(123)
# Pembagian data: 80% training dan 20% testing
indeks <- createDataPartition(data$y, p = 0.8, list = FALSE)
train <- data[indeks, ]
test <- data[-indeks, ]
# Memeriksa jumlah observasi
nrow(train)## [1] 160
## [1] 40
Pembagian data dilakukan dengan proporsi 80% untuk data training dan 20% untuk data testing. Berdasarkan output, data training terdiri atas 160 observasi, sedangkan data testing terdiri atas 40 observasi. Data training digunakan untuk membangun model Bagging Regression, sedangkan data testing digunakan untuk mengevaluasi kemampuan model memprediksi data yang tidak digunakan selama proses pelatihan.
# Jumlah pohon (bootstrap) yang akan dibandingkan
nbagg <- c(25, 50, 100)
# Tempat penyimpanan hasil
hasil_evaluasi <- data.frame()
hasil_prediksi <- data.frame(Aktual = test$y)
model_bagging <- list()Bagging (Bootstrap Aggregating) membangun banyak pohon regresi, masing-masing dari sampel bootstrap data training. Prediksi akhir diperoleh dengan merata-ratakan prediksi seluruh pohon. Pada tahap ini ditetapkan tiga jumlah bootstrap agregat, yaitu 25, 50, dan 100 pohon, untuk melihat pengaruh banyaknya pohon terhadap kinerja model. Objek hasil_evaluasi, hasil_prediksi, dan model_bagging disiapkan untuk menyimpan metrik evaluasi, hasil prediksi, serta model dari setiap percobaan.
for (n in nbagg) {
set.seed(123)
model <- bagging(y ~ ., data = train,
nbagg = n, coob = TRUE)
model_bagging[[as.character(n)]] <- model
# Prediksi pada data testing
pred <- predict(model, newdata = test)
aktual <- test$y
# Menghitung metrik evaluasi
MSE <- mean((aktual - pred)^2)
RMSE <- sqrt(MSE)
R2 <- 1 - sum((aktual - pred)^2) /
sum((aktual - mean(aktual))^2)
# Menyimpan hasil evaluasi
hasil_evaluasi <- rbind(
hasil_evaluasi,
data.frame(nbagg = n, MSE = MSE, RMSE = RMSE, R2 = R2)
)
# Menyimpan hasil prediksi
hasil_prediksi[[paste0("Prediksi_", n)]] <- pred
}Model Bagging Regression dibangun menggunakan fungsi bagging() dengan formula y ~ ., yang berarti seluruh variabel selain y digunakan sebagai prediktor. Argumen nbagg menentukan jumlah pohon, sedangkan coob = TRUE meminta penghitungan out-of-bag error. Fungsi set.seed(123) dipanggil sebelum setiap model dibentuk agar hasil dapat direproduksi. Untuk setiap nilai nbagg, model digunakan memprediksi data testing, lalu dihitung tiga metrik: Mean Squared Error (MSE), Root Mean Squared Error (RMSE), dan koefisien determinasi (R²). Nilai MSE dan RMSE yang lebih kecil serta R² yang lebih besar menunjukkan kinerja yang lebih baik.
## n= 160
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 160 3028.674000 15.221560
## 2) x.4< 0.7576693 113 1861.430000 13.717700
## 4) x.2< 0.379901 41 240.749100 10.730250
## 8) x.4< 0.1214579 7 39.336260 7.750738 *
## 9) x.4>=0.1214579 34 126.476200 11.343680
## 18) x.2< 0.2623691 24 72.964260 10.705680 *
## 19) x.2>=0.2623691 10 20.297060 12.874880 *
## 5) x.2>=0.379901 72 1046.392000 15.418890
## 10) x.5< 0.3946698 30 307.473900 12.763540
## 20) x.1< 0.2951943 8 73.963960 9.313811 *
## 21) x.1>=0.2951943 22 103.684900 14.017990
## 42) x.9>=0.5557632 11 14.658200 12.530490 *
## 43) x.9< 0.5557632 11 40.348280 15.505490 *
## 11) x.5>=0.3946698 42 376.301800 17.315560
## 22) x.4< 0.2026478 7 8.303512 13.636490 *
## 23) x.4>=0.2026478 35 254.299600 18.051380
## 46) x.1< 0.1674024 7 31.094850 14.281750 *
## 47) x.1>=0.1674024 28 98.866810 18.993780 *
## 3) x.4>=0.7576693 47 297.255900 18.837210
## 6) x.2< 0.1847216 8 4.986423 15.567500 *
## 7) x.2>=0.1847216 39 189.197000 19.507920
## 14) x.5< 0.4555036 20 84.416340 18.289810
## 28) x.2< 0.3483975 7 15.354860 16.195490 *
## 29) x.2>=0.3483975 13 21.825710 19.417520 *
## 15) x.5>=0.4555036 19 43.867130 20.790140 *
## n= 160
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 160 3028.674000 15.221560
## 2) x.4< 0.7576693 113 1861.430000 13.717700
## 4) x.2< 0.379901 41 240.749100 10.730250
## 8) x.4< 0.1214579 7 39.336260 7.750738 *
## 9) x.4>=0.1214579 34 126.476200 11.343680
## 18) x.2< 0.2623691 24 72.964260 10.705680 *
## 19) x.2>=0.2623691 10 20.297060 12.874880 *
## 5) x.2>=0.379901 72 1046.392000 15.418890
## 10) x.5< 0.3946698 30 307.473900 12.763540
## 20) x.1< 0.2951943 8 73.963960 9.313811 *
## 21) x.1>=0.2951943 22 103.684900 14.017990
## 42) x.9>=0.5557632 11 14.658200 12.530490 *
## 43) x.9< 0.5557632 11 40.348280 15.505490 *
## 11) x.5>=0.3946698 42 376.301800 17.315560
## 22) x.4< 0.2026478 7 8.303512 13.636490 *
## 23) x.4>=0.2026478 35 254.299600 18.051380
## 46) x.1< 0.1674024 7 31.094850 14.281750 *
## 47) x.1>=0.1674024 28 98.866810 18.993780 *
## 3) x.4>=0.7576693 47 297.255900 18.837210
## 6) x.2< 0.1847216 8 4.986423 15.567500 *
## 7) x.2>=0.1847216 39 189.197000 19.507920
## 14) x.5< 0.4555036 20 84.416340 18.289810
## 28) x.2< 0.3483975 7 15.354860 16.195490 *
## 29) x.2>=0.3483975 13 21.825710 19.417520 *
## 15) x.5>=0.4555036 19 43.867130 20.790140 *
## n= 160
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 160 3028.674000 15.221560
## 2) x.4< 0.7576693 113 1861.430000 13.717700
## 4) x.2< 0.379901 41 240.749100 10.730250
## 8) x.4< 0.1214579 7 39.336260 7.750738 *
## 9) x.4>=0.1214579 34 126.476200 11.343680
## 18) x.2< 0.2623691 24 72.964260 10.705680 *
## 19) x.2>=0.2623691 10 20.297060 12.874880 *
## 5) x.2>=0.379901 72 1046.392000 15.418890
## 10) x.5< 0.3946698 30 307.473900 12.763540
## 20) x.1< 0.2951943 8 73.963960 9.313811 *
## 21) x.1>=0.2951943 22 103.684900 14.017990
## 42) x.9>=0.5557632 11 14.658200 12.530490 *
## 43) x.9< 0.5557632 11 40.348280 15.505490 *
## 11) x.5>=0.3946698 42 376.301800 17.315560
## 22) x.4< 0.2026478 7 8.303512 13.636490 *
## 23) x.4>=0.2026478 35 254.299600 18.051380
## 46) x.1< 0.1674024 7 31.094850 14.281750 *
## 47) x.1>=0.1674024 28 98.866810 18.993780 *
## 3) x.4>=0.7576693 47 297.255900 18.837210
## 6) x.2< 0.1847216 8 4.986423 15.567500 *
## 7) x.2>=0.1847216 39 189.197000 19.507920
## 14) x.5< 0.4555036 20 84.416340 18.289810
## 28) x.2< 0.3483975 7 15.354860 16.195490 *
## 29) x.2>=0.3483975 13 21.825710 19.417520 *
## 15) x.5>=0.4555036 19 43.867130 20.790140 *
Struktur pohon pertama dari setiap model ditampilkan untuk melihat pohon penyusun bagging. Berdasarkan output, pohon pertama dibentuk dari 160 observasi dengan nilai prediksi pada simpul akar (root node) sebesar 15,2216. Variabel x.4 menjadi pemisah pertama dengan batas 0,7577, yang membagi data menjadi 113 observasi (x.4 < 0,7577) dan 47 observasi (x.4 ≥ 0,7577). Percabangan berikutnya menggunakan variabel x.2, x.5, x.1, dan x.9, dengan total 13 simpul terminal. Nilai prediksi pada simpul terminal berkisar antara 7,75 sampai 20,79. Struktur pohon pertama untuk ketiga nilai nbagg identik karena seed yang sama menghasilkan sampel bootstrap pertama yang sama. Perbedaan antarmodel baru muncul dari pohon-pohon tambahan yang ikut dirata-ratakan.
## Aktual Prediksi_25 Prediksi_50 Prediksi_100
## 1 10.594975 8.810220 9.271468 8.963200
## 2 13.112492 12.661987 13.065698 13.243928
## 3 10.004662 10.582914 11.082881 11.104267
## 4 24.187606 20.877981 20.999225 20.777739
## 5 10.661816 12.830578 12.615596 12.896652
## 6 14.713078 13.664936 13.649230 13.567739
## 7 19.090567 19.546726 19.309392 18.961715
## 8 14.301211 13.396190 13.898163 14.630711
## 9 14.870160 15.716446 15.903780 16.062153
## 10 13.572456 13.677994 14.163583 14.335788
## 11 16.096496 17.086611 16.927663 16.590002
## 12 18.204751 16.001755 16.228362 16.274974
## 13 25.913665 20.114936 20.084341 20.117591
## 14 15.115527 14.159813 14.375270 14.160638
## 15 9.437609 12.313218 12.255694 12.255555
## 16 17.963097 12.951938 12.823807 12.964674
## 17 17.844492 15.759165 15.474247 15.094342
## 18 7.253632 10.855650 10.839439 10.899140
## 19 13.495350 13.940947 13.936989 14.315738
## 20 18.539426 18.094578 17.359010 17.343252
## 21 13.768624 13.798632 14.067466 14.164507
## 22 15.803652 13.084037 13.085850 13.593525
## 23 9.247274 14.767293 14.912840 15.217938
## 24 10.252871 12.780316 12.919232 13.506711
## 25 22.604473 20.325267 20.355032 20.187430
## 26 20.099581 20.348802 20.310796 20.303171
## 27 27.721621 20.854963 20.900180 20.797565
## 28 10.450408 13.243491 12.942716 12.401534
## 29 14.851420 13.563861 13.646796 13.783826
## 30 12.065290 14.211990 14.084471 13.778992
## 31 21.479397 19.393087 19.054046 18.970412
## 32 12.302036 17.526984 17.606382 17.207311
## 33 10.742469 12.859862 12.833197 13.259027
## 34 13.980798 14.447660 14.576170 15.307991
## 35 9.114307 9.182594 9.469743 9.443475
## 36 14.427256 16.663492 16.700485 17.057870
## 37 17.161940 20.086515 20.277406 20.354137
## 38 19.197430 19.799945 19.826775 19.930649
## 39 6.002029 9.101269 9.111652 9.047677
## 40 15.415256 13.182581 13.212967 13.726842
Tabel ini membandingkan nilai aktual dengan prediksi dari ketiga model pada 40 observasi data testing. Secara umum, prediksi ketiga model sangat mirip satu sama lain dan mengikuti pola nilai aktual. Namun, model cenderung kurang akurat pada nilai ekstrem. Pada observasi ke-13 (aktual 25,91) dan ke-27 (aktual 27,72), prediksi hanya sekitar 20,1 dan 20,8, sehingga nilai tinggi diprediksi terlalu rendah. Sebaliknya, pada observasi ke-23 (aktual 9,25), ke-18 (aktual 7,25), dan ke-39 (aktual 6,00), prediksi masing-masing sekitar 14,8; 10,9; dan 9,1, sehingga nilai rendah diprediksi terlalu tinggi. Pola ini wajar karena rata-rata banyak pohon cenderung menarik prediksi ke arah nilai tengah.
## nbagg MSE RMSE R2
## 1 25 7.232560 2.689342 0.6996655
## 2 50 7.298101 2.701500 0.6969439
## 3 100 7.490712 2.736917 0.6889456
Berdasarkan output, model dengan 25 pohon menghasilkan MSE 7,2326, RMSE 2,6893, dan R² 0,6997. Model dengan 50 pohon menghasilkan MSE 7,2981, RMSE 2,7015, dan R² 0,6969. Model dengan 100 pohon menghasilkan MSE 7,4907, RMSE 2,7369, dan R² 0,6889. Nilai R² sekitar 0,69 sampai 0,70 menunjukkan bahwa model mampu menjelaskan sekitar 69% sampai 70% keragaman nilai y pada data testing. Peningkatan jumlah pohon tidak memperbaiki kinerja pada data testing, melainkan justru sedikit menaikkan MSE. Selisih antarmodel sangat kecil, sehingga ketiganya dapat dikatakan memiliki kinerja yang hampir sama. Perbedaan kecil ini dapat dipengaruhi oleh jumlah data testing yang hanya 40 observasi.
plot(test$y, type = "l", lwd = 2,
xlab = "Observasi",
ylab = "Nilai Y",
main = "Perbandingan Bagging Regression",
col = "red")
lines(hasil_prediksi$Prediksi_25,
lwd = 2, lty = 2, col = "blue")
lines(hasil_prediksi$Prediksi_50,
lwd = 2, lty = 3, col = "darkgreen")
lines(hasil_prediksi$Prediksi_100,
lwd = 2, lty = 4, col = "purple")
legend("topright",
legend = c("Aktual", "Bagging 25",
"Bagging 50", "Bagging 100"),
col = c("red", "blue", "darkgreen", "purple"),
lty = c(1, 2, 3, 4), lwd = 2)Grafik menampilkan nilai aktual (garis merah) bersama prediksi dari model dengan 25, 50, dan 100 pohon. Ketiga garis prediksi hampir berimpit dan mengikuti pola naik-turun nilai aktual. Garis aktual memiliki puncak dan lembah yang lebih tajam daripada garis prediksi, sehingga model kurang mampu menangkap nilai-nilai ekstrem. Hal ini sejalan dengan hasil pada tabel prediksi.
## nbagg MSE RMSE R2
## 1 25 7.23256 2.689342 0.6996655
Pemilihan model terbaik dilakukan berdasarkan nilai MSE terkecil pada data testing. Berdasarkan output, model terbaik adalah Bagging Regression dengan nbagg = 25, dengan MSE 7,2326, RMSE 2,6893, dan R² 0,6997. Dengan demikian, pada percobaan ini 25 pohon sudah cukup untuk memberikan kinerja prediksi terbaik, dan penambahan menjadi 50 atau 100 pohon tidak memberikan peningkatan kinerja pada data testing.
Metode bootstrap aggregating atau bagging merupakan metode ensemble learning yang menggabungkan beberapa model untuk menghasilkan prediksi yang lebih stabil. Prinsip kerjanya dilakukan dengan mengambil sampel bootstrap dari data latih, membangun model pada setiap sampel, kemudian menggabungkan hasil prediksi seluruh model. Pada regresi, penggabungan dilakukan dengan menghitung rata-rata prediksi sehingga dapat mengurangi varians dan meningkatkan kestabilan hasil prediksi dibandingkan penggunaan satu model saja.
Implementasi metode bagging menggunakan R dapat dilakukan dengan memanfaatkan paket ipred untuk membentuk model bagging melalui fungsi bagging(). Pemodelan dilakukan dengan membandingkan jumlah agregasi (nbagg). Selanjutnya, setiap model digunakan untuk memprediksi data uji sehingga diperoleh hasil prediksi yang dapat dibandingkan berdasarkan jumlah agregasi yang digunakan.
Evaluasi performa bagging dilakukan dengan menghitung metrik Mean Squared Error (MSE) dan Root Mean Squared Error (RMSE) untuk regresi, serta akurasi, presisi, recall, dan F1 score untuk klasifikasi. Metrik evaluasi regresi yang lebih kecil menunjukkan kesalahan prediksi yang lebih rendah, sedangkan nilai metrik klasifikasi yang semakin besar menunjukkan kemampuan model yang semakin baik dalam menjelaskan variasi respons pada data uji. Perbandingan metrik tersebut digunakan untuk menentukan jumlah agregasi yang memberikan performa terbaik berdasarkan hasil pengujian.
Model Bagging Regression dengan \(nbagg = 25, 50, 100\) menghasilkan kinerja prediksi yang hampir sama pada data testing, dengan nilai R² berkisar antara 0,6889 sampai 0,6997. Model dengan 25 pohon memberikan MSE terkecil sebesar 7,2326, sedangkan model dengan 100 pohon memiliki MSE terbesar sebesar 7,4907. Selisih MSE antara keduanya hanya sekitar 3,57%, sehingga penambahan jumlah pohon tidak memperbaiki kinerja model pada pengujian ini. Selain itu, model cenderung kurang akurat pada nilai ekstrem karena prediksi ditarik ke arah nilai tengah. Dengan demikian, Bagging Regression dengan 25 pohon dipilih sebagai model terbaik karena memberikan kinerja prediksi yang paling baik dengan model yang paling sederhana.
Ketika menjalankan suatu fungsi pada program R diharapkan untuk teliti saat mengoperasikannya. Penulisan syntax sangat perlu diperhatikan karena apabila terdapat kesalahan penulisan akan membuat program error. Selain itu, perlu untuk memperhatikan tatacara penulisan yang sesuai dengan KBBI, sehingga dapat menghasilkan laporan yang baik.
Breiman, L. (1996). Heuristics of Instability and Stabilization in Model Selection. Annals of Statistics, 24, 2350-2383.
Efron, B., & Tibshirani, R. J. (1993). An Introduction to the Bootstrap. Chapman & Hall.
Fransiska, H. (2026). Modul Praktikum Machine Learning. Bengkulu: Laboratorium Statistika FMIPA Universitas Bengkulu.
Wibowo, A., & Purwarianti, A. (2018). Penerapan Bagging untuk Memperbaiki Hasil Prediksi Nasabah Perusahaan Asuransi X. Institut Teknologi Bandung.