Perkembangan teknologi informasi menyebabkan data yang dihasilkan semakin besar, beragam, dan kompleks sehingga diperlukan metode pemodelan prediktif yang akurat dan andal. Salah satu pendekatan yang banyak digunakan adalah supervised learning, yaitu pemodelan yang mempelajari hubungan antara variabel prediktor dan variabel respons dari data latih. Pohon keputusan (decision tree) sering dipilih karena mudah diterapkan dan hasilnya transparan, tetapi model ini cenderung mengalami overfitting dan tidak stabil, terutama pada data berukuran kecil atau tidak seimbang. Kondisi tersebut mendorong penggunaan teknik ensemble yang menggabungkan banyak model agar kinerja prediksi menjadi lebih andal dan lebih stabil (Zuriati dkk., 2025).
Salah satu metode ensemble yang paling dikenal adalah Bootstrap Aggregating atau Bagging. Metode ini membangun sejumlah model pada sampel bootstrap, yaitu sampel acak dengan pengembalian yang diambil dari data latih, kemudian menggabungkan hasil prediksinya. Pada kasus klasifikasi, hasil prediksi digabungkan melalui voting mayoritas, sedangkan pada kasus regresi hasil prediksi digabungkan dengan menghitung rata-rata. Penerapan Bagging pada algoritma decision tree terbukti mampu meningkatkan kinerja klasifikasi yang diukur dengan balanced accuracy, geometric mean, dan AUC (Pristyanto & Zein, 2023).
Metode Bagging dapat diterapkan pada permasalahan regresi maupun klasifikasi dengan menggabungkan prediksi dari sejumlah model yang dibangun menggunakan sampel bootstrap. Penggabungan tersebut bertujuan meningkatkan kestabilan model dan mengurangi varians prediksi. Penerapan Bagging CART dapat meningkatkan kinerja klasifikasi melalui penggabungan sejumlah pohon keputusan (Innassuraiya dkk., 2022).
Berdasarkan latar belakang di atas, adapun rumusan masalah sebagai berikut:
Berdasarkan rumusan masalah, tujuan yang dapat disimpulkan adalah sebagai berikut:
Manfaat yang diperoleh melalui penelitian ini, yaitu:
Adapun batasan masalah pada penelitian ini dengan menggunakan dataset Hitters dari package ISLR untuk memprediksi Salary menggunakan Decision Tree (Regression Tree). Lakukan pengecekan dan penanganan missing value menggunakan na.omit(), kemudian bagi data menjadi training dan testing. Selanjutnya, bangun dan visualisasikan tree, analisis variable importance, lakukan prediksi dan evaluasi menggunakan MSE, tentukan CP terbaik, lakukan pruning, dan evaluasi kembali model menggunakan MSE.
Adapun sistematika penulisan dari praktikum ini adalah:
BAB I PENDAHULUAN
Bab ini memuat latar belakang, rumusan masalah, tujuan dan manfaat, batasan masalah dan sistematika penulisan.
BAB II TINJAUAN PUSTAKA
Bab ini merupakan bab yang memuat pengertian dan teori yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.
BAB III METODE PENELITIAN
Bab ini merupakan bab yang memuat jenis dan sumber data, variabel penelitian, analisis data dan diagram alir yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.
BAB IV HASIL DAN PEMBAHASAN
Bab ini merupakan bab yang memuat hasil dan pembahasan yang telah dilakukan pada program kemudian diinterpretasikan yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.
BAB V KESIMPULAN DAN SARAN
Bab ini merupakan bab yang memuat kesimpulan dan saran.
DAFTAR PUSTAKA
LAMPIRAN
Bootstrap merupakan teknik resampling yang dilakukan dengan mengambil sampel secara acak dengan pengembalian dari data asli. Sampel bootstrap umumnya memiliki ukuran yang sama dengan data asli, sehingga suatu pengamatan dapat terpilih lebih dari satu kali, sedangkan pengamatan lainnya mungkin tidak terpilih (Pradani dkk., 2021).
Bootstrap aggregation atau Bagging merupakan salah satu metode ensemble yang bertujuan meningkatkan stabilitas dan akurasi model serta mengurangi overfitting. Metode ini dapat diterapkan pada berbagai algoritma, dengan menggabungkan hasil prediksi beberapa model melalui rata-rata atau rata-rata tertimbang (weighted average) pada kasus regresi, serta voting pada kasus klasifikasi Langkah-langkah dalam bagging secara adalah sebagai berikut (Fransaiska, 2026).
Membuat sampel dari data pelatihan (training data); jumlah sampel harus dalam jumlah yang sesuai (tidak terlalu banyak maupun terlalu sedikit).
Melatih model pada masing-masing sampel.
Membuat classifier dari setiap model dan menyimpan hasilnya.
Berdasarkan jenis ensemble yang digunakan baik itu voting tertimbang (weighted vote), voting mayoritas (majority vote), atau cara khusus lainnya, hasil tersebut digabungkan untuk memprediksi data uji (test data).
Karakteristik penting dari Bagging adalah penggunaan teknik bootstrap aggregating untuk meningkatkan ketepatan klasifikasi model. Penerapan metode ini dilakukan dengan membandingkan model regresi logistik biner tanpa Bagging dan model yang menggunakan Bagging (Putri dkk., 2021). Sebagai pembanding, pada Bagging Classification Tree variabel respons berupa kategori dan prediksi akhir ditentukan melalui voting mayoritas. Perbedaan keduanya dirangkum pada Tabel 1 berikut (Fransiska, 2026).
Tabel 1. Perbedaan Bagging Classification dan Bagging Regression
| Aspek | Bagging Classification Tree | Bagging Regression Tree |
|---|---|---|
| Variabel respons | 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^2\) |
Penelitian ini merupakan penelitian terapan dengan pendekatan
kuantitatif. Data yang digunakan adalah data simulasi yang dibangkitkan
menggunakan fungsi mlbench.friedman1() dari
package mlbench pada program R dengan jumlah
pengamatan sebanyak 200. Data tersebut digunakan untuk memprediksi
variabel respons y menggunakan metode Bagging
Regression Tree.
Variabel yang digunakan dalam penelitian ini terdiri atas variabel respons dan variabel prediktor. Variabel respons adalah y, berupa variabel numerik kontinu yang dibangkitkan melalui simulasi, sedangkan variabel prediktor terdiri atas x.1 hingga x.10, yang masing-masing dibangkitkan dari distribusi seragam pada interval (0,1).
Berikut merupakan algoritma pengolahan data:
Mulai.
Input data.
Membentuk model bagginng regression tree.
Melihat struktur pohon.
Prediksi dan evaluassi.
Menarik kesimpulan.
Selesai.
Gambar 3.1 Diagram Alir Penelitian
# 2. Membangkitkan Data Simulasi Friedman1
set.seed(123)
learn <- as.data.frame(mlbench.friedman1(200))
# Melihat Struktur Data
str(learn)## '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
Interpretasi: Data Friedman1 terdiri atas 200 observasi dan 11 variabel, yaitu 10 variabel prediktor dan 1 variabel respons. Seluruh variabel bertipe numerik.
## 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
Interpretasi: Tidak terdapat missing value pada seluruh variabel karena data dibangkitkan secara simulasi, sehingga seluruh 200 observasi dapat digunakan tanpa penanganan tambahan.
## 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
Interpretasi: Setiap variabel prediktor memiliki
nilai minimum mendekati 0 dan maksimum mendekati 1 dengan rata-rata
sekitar 0,5, sesuai dengan distribusi seragam pada interval (0,1).
Variabel respons y memiliki nilai minimum 4,39, kuartil
pertama 10,73, median 14,56, rata-rata 14,60, kuartil ketiga 18,09, dan
maksimum 27,72. Rata-rata dan median y yang berdekatan
menunjukkan sebaran respons yang relatif simetris.
# 5. Pembentukan Model Bagging Regression
set.seed(123)
mod2 <- bagging(y ~ ., data = learn, coob = TRUE)
print(mod2)##
## Bagging regression trees with 25 bootstrap replications
##
## Call: bagging.data.frame(formula = y ~ ., data = learn, 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 4 -none- call
Interpretasi: Model yang terbentuk adalah
bagging regression trees dengan 25 replikasi
bootstrap, artinya prediksi akhir merupakan rata-rata dari 25
pohon regresi. Estimasi out-of-bag dari root mean squared
error sebesar 2,7366. Hasil summary() menunjukkan
bahwa objek model menyimpan 25 pohon pada elemen
mtrees.
## n= 200
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 200 4025.49800 14.029480
## 2) x.4< 0.6502426 138 2160.39900 12.313130
## 4) x.2< 0.3684006 66 456.23160 9.859159
## 8) x.5< 0.7123567 49 196.75530 8.894625
## 16) x.8>=0.3836868 34 130.62010 8.338864
## 32) x.8< 0.4076226 9 1.81360 5.965380 *
## 33) x.8>=0.4076226 25 59.85333 9.193318 *
## 17) x.8< 0.3836868 15 31.83001 10.154350 *
## 9) x.5>=0.7123567 17 82.49546 12.639290 *
## 5) x.2>=0.3684006 72 942.38620 14.562610
## 10) x.1< 0.1965217 14 119.80740 10.439980 *
## 11) x.1>=0.1965217 58 527.19940 15.557730
## 22) x.4< 0.2353809 25 90.50841 13.424500 *
## 23) x.4>=0.2353809 33 236.73760 17.173810
## 46) x.3>=0.3257424 14 68.04943 15.266000 *
## 47) x.3< 0.3257424 19 80.18524 18.579560 *
## 3) x.4>=0.6502426 62 553.71570 17.849750
## 6) x.2< 0.4236687 27 175.72330 15.827980
## 12) x.5< 0.4993253 11 72.59888 13.988350 *
## 13) x.5>=0.4993253 16 40.30417 17.092730 *
## 7) x.2>=0.4236687 35 182.49160 19.409390
## 14) x.1< 0.3971814 13 18.24531 17.376150 *
## 15) x.1>=0.3971814 22 78.74578 20.610860 *
# Visualisasi Pohon Regresi ke-1
plot(mod2$mtrees[[1]]$btree, uniform = TRUE, margin = 0.1)
text(mod2$mtrees[[1]]$btree, use.n = TRUE, cex = 0.7)Interpretasi: Pohon pertama dilatih pada 200
pengamatan dengan rata-rata y pada simpul akar sebesar
14,03. Pemisahan pertama menggunakan x.4 < 0,6503 yang
membagi data menjadi 138 pengamatan (rata-rata 12,31) dan 62 pengamatan
(rata-rata 17,85), sehingga pengamatan dengan x.4 lebih
besar cenderung memiliki y lebih tinggi. Pemisahan
selanjutnya menggunakan variabel x.2, x.5,
x.8, x.1, dan x.3 hingga
terbentuk 12 simpul akhir. Nilai prediksi terendah sebesar 5,97 (9
pengamatan) dan tertinggi sebesar 20,61 (22 pengamatan). Variabel
x.4 yang menjadi pemisah awal sesuai dengan rumus data yang
memuat 10x_4 sebagai komponen linear dengan koefisien
besar, sedangkan munculnya x.8 merupakan akibat sampel
bootstrap karena variabel tersebut sebenarnya hanya
noise. Hal ini menunjukkan bahwa pohon tunggal bersifat
sensitif terhadap sampel data, dan hal tersebut yang diatasi dengan
merata-ratakan banyak pohon.
# 7. Hasil Prediksi
pred <- predict(mod2, newdata = learn)
hasil <- data.frame(Aktual = learn$y, Prediksi = pred)
head(hasil, 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
Interpretasi: Sepuluh pengamatan pertama menunjukkan
bahwa nilai prediksi umumnya dekat dengan nilai aktual, misalnya
pengamatan ke-1 dengan nilai aktual 10,59 diprediksi 9,67 dan pengamatan
ke-3 dengan nilai aktual 13,11 diprediksi 13,36. Selisih terbesar pada
sepuluh pengamatan tersebut terjadi pada pengamatan ke-8 (aktual 23,75;
prediksi 19,07), yaitu model cenderung memprediksi terlalu rendah pada
nilai y yang ekstrem.
# 8. Evaluasi Model
actual <- learn$y
MSE <- mean((actual - pred)^2)
RMSE <- sqrt(MSE)
R2 <- 1 - sum((actual - pred)^2) / sum((actual - mean(actual))^2)
MAE <- mean(abs(actual - pred))
hasil.evaluasi <- data.frame(
Ukuran = c("MSE", "RMSE", "R-Square", "MAE", "RMSE OOB"),
Nilai = c(MSE, RMSE, R2, MAE, mod2$err))
hasil.evaluasi## Ukuran Nilai
## 1 MSE 3.5189955
## 2 RMSE 1.8758986
## 3 R-Square 0.8426725
## 4 MAE 1.4445536
## 5 RMSE OOB 2.7366164
Interpretasi: Model Bagging Regression Tree
menghasilkan MSE sebesar 3,519, RMSE sebesar 1,876, dan MAE sebesar
1,445, sehingga rata-rata kesalahan prediksi sekitar 1,4 sampai 1,9
satuan pada rentang y antara 4,39 sampai 27,72. Nilai \(R^2\) sebesar 0,8427 menunjukkan bahwa
model mampu menjelaskan sekitar 84,27% variasi y. Namun,
nilai tersebut dihitung pada data yang sama dengan data pelatihan
sehingga cenderung optimistis. Estimasi RMSE out-of-bag sebesar
2,7366 (MSE OOB sekitar 7,49) lebih besar daripada RMSE pada data latih
sebesar 1,876, dan jika diubah menjadi proporsi variasi yang dijelaskan
(1 − MSE OOB / ragam y) diperoleh sekitar 0,665. Dengan
demikian, kinerja yang lebih realistis pada data baru berada di sekitar
nilai OOB tersebut, bukan pada nilai \(R^2\) 0,8427.
# 9. Plot Nilai Aktual dan Prediksi
plot(actual, type = "l", lwd = 2,
xlab = "Observasi", ylab = "Nilai Y",
main = "Perbandingan Nilai Aktual dan Prediksi", col = "red")
lines(pred, lwd = 2, lty = 2, col = "blue")
legend("topright", legend = c("Aktual", "Prediksi"),
lty = c(1, 2), lwd = c(2, 2), col = c("red", "blue"))Interpretasi: Garis prediksi (biru putus-putus) mengikuti pola garis aktual (merah) dengan cukup baik. Korelasi antara nilai aktual dan prediksi sebesar 0,928, dan selisih (residual) berkisar antara −5,76 sampai 5,04 dengan rata-rata mendekati nol (0,016). Prediksi terlihat lebih halus dibandingkan nilai aktual karena merupakan rata-rata dari 25 pohon, sehingga puncak dan lembah yang ekstrem pada data aktual tidak sepenuhnya tertangkap.
# 10. Pembanding: Satu Pohon Regresi (rpart)
tree.tunggal <- rpart(y ~ ., data = learn)
pred.tunggal <- predict(tree.tunggal, newdata = learn)
MSE.tunggal <- mean((actual - pred.tunggal)^2)
R2.tunggal <- 1 - sum((actual - pred.tunggal)^2) / sum((actual - mean(actual))^2)
data.frame(
Model = c("Pohon Regresi Tunggal", "Bagging Regression Tree"),
MSE = c(MSE.tunggal, MSE),
R2 = c(R2.tunggal, R2))## Model MSE R2
## 1 Pohon Regresi Tunggal 5.414326 0.7579359
## 2 Bagging Regression Tree 3.518996 0.8426725
Interpretasi: Pohon regresi tunggal menghasilkan MSE sebesar 5,414 dan \(R^2\) sebesar 0,7579, sedangkan Bagging menghasilkan MSE 3,519 dan \(R^2\) 0,8427. Bagging menurunkan MSE sekitar 35% pada data yang sama. Perlu diperhatikan bahwa perbandingan ini dilakukan pada data latih sehingga hanya sebagai gambaran awal; perbandingan yang lebih adil memerlukan data uji terpisah atau estimasi OOB untuk kedua model.
Bagging (Bootstrap Aggregating) merupakan metode ensemble yang membangun banyak model pada sampel bootstrap yang diambil secara acak dengan pengembalian, kemudian menggabungkan prediksinya. Pada kasus regresi, prediksi digabungkan dengan merata-ratakan prediksi seluruh pohon sehingga variance model berkurang dan stabilitas prediksi meningkat, tetapi bias tidak banyak berubah.
Model Bagging Regression Tree pada data simulasi
Friedman1 berhasil dibangun di R menggunakan fungsi
bagging() pada package ipred dengan
25 replikasi bootstrap dan estimasi out-of-bag. Pohon
regresi pertama menggunakan x.4 sebagai pemisah awal dan
membentuk 12 simpul akhir, yang menunjukkan bahwa struktur satu pohon
bergantung pada sampel data sehingga perlu digabungkan dengan pohon
lain.
Evaluasi model menghasilkan MSE sebesar 3,519, RMSE sebesar 1,876, MAE sebesar 1,445, dan \(R^2\) sebesar 0,8427 pada data latih, sedangkan estimasi RMSE out-of-bag sebesar 2,7366 yang lebih realistis untuk data baru. Bagging juga menghasilkan MSE yang lebih kecil dibandingkan pohon regresi tunggal (3,519 dibandingkan 5,414), sehingga Bagging memberikan hasil prediksi yang lebih baik.
Penelitian selanjutnya disarankan untuk memperbaiki penulisan kode dan sintaks program agar terhindar dari kesalahan (error). Setiap tahapan analisis perlu diperiksa untuk memastikan proses berjalan sesuai prosedur. Selain itu, ketelitian dalam menjalankan dan mengevaluasi program perlu ditingkatkan agar hasil analisis lebih akurat.