BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan teknologi informasi mendorong pemanfaatan metode machine learning untuk mengolah data dan menghasilkan prediksi yang akurat. Salah satu metode yang dapat digunakan adalah ensemble learning, yaitu teknik yang menggabungkan beberapa model untuk menghasilkan prediksi. Salah satu metode ensemble learning yang dapat digunakan adalah Bagging (Bootstrap Aggregating) (Pristyanto & Zein, 2023).

Metode Bagging bekerja dengan membentuk beberapa sampel bootstrap dari data latih, kemudian membangun model pada setiap sampel dan menggabungkan hasil prediksinya. Penggabungan prediksi dilakukan melalui majority voting untuk klasifikasi atau rata-rata untuk regresi. Penerapan Bagging dapat membantu meningkatkan kestabilan model dan memperbaiki ketepatan klasifikasi (Imtiyaz et al., 2023).

Implementasi metode Bagging dapat dilakukan menggunakan bahasa pemrograman R untuk membentuk model dan menghasilkan prediksi berdasarkan data yang digunakan. Performa model perlu dievaluasi menggunakan ukuran yang sesuai, seperti akurasi, presisi, recall, dan F1-score untuk klasifikasi. Oleh karena itu, pemahaman mengenai konsep, implementasi, dan evaluasi metode Bagging diperlukan untuk mengetahui kemampuan model dalam menghasilkan prediksi (Syahrir et al., 2025).

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, masalah yang dapat disimpulkan adalah:

  1. Apa konsep dasar dan prinsip kerja metode Bagging?

  2. Bagaimana megimplementasikan metode Bagging dengan menggunakan R?

  3. Bagaimana mengevaluasi performa Bagging?

1.3 Tujuan

Berdasarkan rumusan masalah pada penelitian ini, tujuan yang dapat disimpulkan adalah:

  1. Mahasiswa dapat memahami konsep dasar dan prinsip kerja metode Bagging.

  2. Mahasiswa dapat megimplementasikan metode Bagging dengan menggunakan R.

  3. Mahasiswa dapat mengevaluasi performa Bagging.

BAB II TINJAUAN PUSTAKA

2.1 Bagging

Metode Bagging (Bootstrap Aggregating) merupakan salah satu teknik ensemble learning yang digunakan untuk meningkatkan kinerja model klasifikasi dengan menggabungkan hasil prediksi dari beberapa model. Metode ini dilakukan dengan membentuk beberapa sampel bootstrap dari data latih, kemudian melatih model pada setiap sampel tersebut. Hasil prediksi dari masing-masing model selanjutnya digabungkan melalui majority voting untuk memperoleh prediksi akhir yang lebih stabil (Syahrir et al., 2025). Menurut Syahrir et al. (2025), penerapan Bagging dapat membantu mengurangi overfitting, menurunkan varians, serta meningkatkan akurasi dan konsistensi model klasifikasi.

Bagging pertama kali diusulkan oleh Leo Breiman pada tahun 1994 untuk meningkatkan hasil dari suatu masalah klasifikasi. Langkah-langkah dalam Bagging secara garis besar dibagi menjadi empat bagian (Fransiska, 2026):

  1. Membuat sampel dari data latih (data training) di mana jumlah sampel harus dalam jumlah yang sesuai (tidak terlalu banyak maupun terlalu sedikit).

  2. Melatih model pada masing-masing sampel.

  3. Membuat classifier dari setiap model dan menyimpan hasilnya.

  4. 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 (data tasting).

Perhatikan beberapa fitur penting dari Bagging berikut ini (Fransiska, 2026):

  1. Setiap model dikembangkan secara paralel dan independen satu sama lain.

  2. Membantu mengurangi variance, tetapi tidak efektif dalam mengurangi bias.

  3. Paling cocok digunakan untuk model dengan variance tinggi dan bias rendah (model yang kompleks).

  4. Random Forest merupakan contoh yang baik (algoritma Random Forest melakukan pemangkasan atau pruning pada pohon untuk mengurangi korelasi).

2.2 Metrik Evaluasi Model Klasifikasi

Metrik evaluasi digunakan untuk menilai kinerja model klasifikasi berdasarkan hasil prediksi terhadap kelas sebenarnya. Menurut Syahrir et al. (2025), evaluasi model klasifikasi dapat dilakukan menggunakan metrik accuracy, precision, recall, dan F1-score. Berikut adalah penjelasam setiap metrik (Fransiska, 2026)(Syahrir et al., 2025):

  1. Accuracy

Accuracy adalah metrik evaluasi yang digunakan untuk mengukur proporsi jumlah prediksi yang benar terhadap seluruh data yang dievaluasi.

\[ Accuracy = \frac{TP + TN}{TP + TN + FP + FN} \]

  1. Precision

Precision adalah metrik evaluasi yang digunakan untuk mengukur ketepatan model dalam memprediksi kelas positif dibandingkan dengan seluruh data yang diprediksi sebagai kelas positif.

\[ Precision = \frac{TP}{TP + FP} \]

  1. Recall

Recall adalah metrik evaluasi yang digunakan untuk mengukur kemampuan model dalam mengidentifikasi data yang sebenarnya termasuk kelas positif.

\[ Recall = \frac{TP}{TP + FN} \]

  1. F1-Score

F1-score adalah metrik evaluasi yang digunakan untuk mengukur keseimbangan antara precision dan recall melalui rata-rata harmonik kedua metrik tersebut.

\[ F1\text{-}score = \frac{2 \times Precision \times Recall}{Precision + Recall} \]

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data pada penelitian ini adalah data kuantitatif dan data kualitatif. Data kuantitatif merupakan data atau informasi yang didapatkan dalam bentuk angka atau numerik. Data kuantitatif dapat diproses menggunakan rumus matematika atau dapat juga dianalisis dengan sistem statistik. Data kualitatif adalah suatu data yang tidak bisa diukur dengan angka. Data kualitatif adalah data yang dinyatakan dalam bentuk deskriptif atau naratif, bukan dalam bentuk angka.

Sumber data yang digunakan oleh penulis merupakan data sekunder. Data sekunder adalah sumber data yang diperoleh secara tidak langsung atau melalui media perantara. Data yang digunakan pada batasan masalah laporan ini merupakan data BreastCancer yang diperoleh langsung dari program R.

3.2 Variabel Penelitian

Variabel penelitian adalah karakter atau segala sesuatu yang menjadi perhatian dalam suatu penelitian. Pada laporan ini terdapat 10 variabel yang digunakan pada data. Variabel tersebut, yaitu Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl,cromatin, Normal.nucleoli, Mitoses sebagai variabel prediktor, dan Class sebagai variabel respon.

3.3 Langkah-langkah Analisis

  1. Input data.

  2. Pengecekan dan penanganan missing value.

  3. Pembagian data latih dan data uji.

  4. Menentukan jumlah Bootstrap.

  5. Membentuk model Bagging Classification.

  6. Melakukan prediksi pada model.

  7. Menghitung metrik evaluasi dan membandingkan hasil evaluasi.

  8. Output dan interpretasi.

BAB IV HASIL DAN PEMBAHASAN

4.1 Preprocessing dan Statistik Deskriptif Data

Langkah pertama yang dilakukan adalah memanggil library dan mengimport data

# MEMANGGIL LIBRARY
library(mlbench)
library(ipred)

# INPUT DATA
data("BreastCancer", package = "mlbench")

# Menghapus kolom ID
data_bc <- BreastCancer[, -1]

# Menghapus data yang memiliki missing value
data_bc <- na.omit(data_bc)

# Mengatur kelas respon menjadi faktor
data_bc$Class <- factor(data_bc$Class,
                        levels = c("benign", "malignant"))


# STATISTIK DESKRIPTIF

# Melihat struktur data
str(data_bc)
## 'data.frame':    683 obs. of  10 variables:
##  $ Cl.thickness   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
##  $ Cell.size      : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
##  $ Cell.shape     : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
##  $ Marg.adhesion  : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
##  $ Epith.c.size   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
##  $ Bare.nuclei    : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
##  $ Bl.cromatin    : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
##  $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
##  $ Mitoses        : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 5 1 ...
##  $ Class          : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
##  - attr(*, "na.action")= 'omit' Named int [1:16] 24 41 140 146 159 165 236 250 276 293 ...
##   ..- attr(*, "names")= chr [1:16] "24" "41" "140" "146" ...
# Melihat jumlah baris dan kolom
dim(data_bc)
## [1] 683  10
# Melihat ringkasan statistik setiap variabel
summary(data_bc)
##   Cl.thickness   Cell.size     Cell.shape  Marg.adhesion  Epith.c.size
##  1      :139   1      :373   1      :346   1      :393   2      :376  
##  5      :128   10     : 67   2      : 58   2      : 58   3      : 71  
##  3      :104   3      : 52   10     : 58   3      : 58   4      : 48  
##  4      : 79   2      : 45   3      : 53   10     : 55   1      : 44  
##  10     : 69   4      : 38   4      : 43   4      : 33   6      : 40  
##  2      : 50   5      : 30   5      : 32   8      : 25   5      : 39  
##  (Other):114   (Other): 78   (Other): 93   (Other): 61   (Other): 65  
##   Bare.nuclei   Bl.cromatin  Normal.nucleoli    Mitoses          Class    
##  1      :402   3      :161   1      :432     1      :563   benign   :444  
##  10     :132   2      :160   10     : 60     2      : 35   malignant:239  
##  2      : 30   1      :150   3      : 42     3      : 33                  
##  5      : 30   7      : 71   2      : 36     10     : 14                  
##  3      : 28   4      : 39   8      : 23     4      : 12                  
##  8      : 21   5      : 34   6      : 22     7      :  9                  
##  (Other): 40   (Other): 68   (Other): 68     (Other): 17
# Melihat jumlah masing-masing kelas
table(data_bc$Class)
## 
##    benign malignant 
##       444       239
# Melihat proporsi masing-masing kelas dalam persen
prop.table(table(data_bc$Class)) * 100
## 
##    benign malignant 
##  65.00732  34.99268
# Memeriksa missing value
colSums(is.na(data_bc))
##    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion    Epith.c.size 
##               0               0               0               0               0 
##     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses           Class 
##               0               0               0               0               0

Berdasarkan hasil statistik deskriptif pada data BreastCancer, diperoleh sebanyak 683 observasi dan 10 variabel yang terdiri atas 9 variabel prediktor dan 1 variabel respon, yaitu Class. Data telah melalui proses pembersihan dengan menghapus kolom ID dan observasi yang memiliki missing value, sehingga tidak terdapat nilai yang hilang pada seluruh variabel. Variabel respon Class terdiri atas 444 data benign (jinak) atau sebesar 65,01% dan 239 data malignant (ganas) atau sebesar 34,99%. Hasil tersebut menunjukkan bahwa data didominasi oleh kelas benign. Selain itu, hasil ringkasan statistik menunjukkan bahwa setiap variabel prediktor memiliki distribusi kategori yang berbeda, dengan kategori 1 paling banyak ditemukan pada variabel Normal.nucleoli sebanyak 432 observasi dan kategori 1 pada variabel Mitoses sebanyak 563 observasi. Data ini selanjutnya digunakan untuk membangun model Bagging Classification dengan variasi jumlah bootstrap (nbagg) sebesar 25, 50, dan 100 untuk membandingkan kinerja klasifikasi berdasarkan metrik evaluasi.

4.2 Membangi Data Training dan Testing

# MEMBAGI DATA TRAINING DAN TESTING
set.seed(123)

n <- nrow(data_bc)
id_train <- sample(seq_len(n), size = floor(0.8 * n))

train <- data_bc[id_train, ]
test <- data_bc[-id_train, ]

# Melihat jumlah data
nrow(train)
## [1] 546
nrow(test)
## [1] 137

Data dibagi menjadi data latih sebesar 80% dan data uji sebesar 20% menggunakan fungsi sample(). Dari total 683 observasi, sebanyak 546 observasi digunakan sebagai data latih dan 137 observasi sebagai data uji. Pembagian ini dilakukan untuk menyediakan data dalam proses pembentukan model Bagging Classification dan mengevaluasi kinerja model dalam mengklasifikasikan data yang tidak digunakan selama proses pelatihan.

4.3 Membangun Model Bagging Classification

# MENENTUKAN FORMULA MODEL
formula_bc <- Class ~ Cl.thickness + Cell.size +
  Cell.shape + Marg.adhesion + Epith.c.size +
  Bare.nuclei + Bl.cromatin + Normal.nucleoli +
  Mitoses

# MENENTUKAN JUMLAH BOOTSTRAP
nbagg_values <- c(25, 50, 100)

# MEMBENTUK MODEL BAGGING CLASSIFICATION
model_list <- list()
pred_list <- list()
cm_list <- list()

for (b in nbagg_values) {
  set.seed(123)

  # Membentuk model
  model <- bagging(
    formula_bc,
    data = train,
    nbagg = b
  )

  # Menyimpan model
  model_list[[as.character(b)]] <- model

  # Menampilkan model
  print(paste("Model dengan nbagg =", b))
  print(model)

  # Melakukan prediksi pada data testing
  pred <- predict(
    model,
    newdata = test,
    type = "class"
  )

  # Menyimpan hasil prediksi
  pred_list[[as.character(b)]] <- pred

  # Membuat confusion matrix
  cm <- table(
    Aktual = factor(test$Class,
                    levels = c("benign", "malignant")),
    Prediksi = factor(pred,
                      levels = c("benign", "malignant"))
  )

  # Menyimpan confusion matrix
  cm_list[[as.character(b)]] <- cm

  # Menampilkan confusion matrix
  print(paste("Confusion Matrix nbagg =", b))
  print(cm)
}
## [1] "Model dengan nbagg = 25"
## 
## Bagging classification trees with 25 bootstrap replications 
## 
## Call: bagging.data.frame(formula = formula_bc, data = train, nbagg = b)
## 
## 
## [1] "Confusion Matrix nbagg = 25"
##            Prediksi
## Aktual      benign malignant
##   benign        88         2
##   malignant      3        44
## [1] "Model dengan nbagg = 50"
## 
## Bagging classification trees with 50 bootstrap replications 
## 
## Call: bagging.data.frame(formula = formula_bc, data = train, nbagg = b)
## 
## 
## [1] "Confusion Matrix nbagg = 50"
##            Prediksi
## Aktual      benign malignant
##   benign        88         2
##   malignant      3        44
## [1] "Model dengan nbagg = 100"
## 
## Bagging classification trees with 100 bootstrap replications 
## 
## Call: bagging.data.frame(formula = formula_bc, data = train, nbagg = b)
## 
## 
## [1] "Confusion Matrix nbagg = 100"
##            Prediksi
## Aktual      benign malignant
##   benign        88         2
##   malignant      3        44

Berdasarkan hasil Bagging Classification, model dengan jumlah bootstrap sebanyak 25, 50, dan 100 menghasilkan confusion matrix yang sama. Pada ketiga model tersebut, sebanyak 88 data benign berhasil diklasifikasikan dengan benar dan 44 data malignant berhasil diklasifikasikan dengan benar. Sementara itu, terdapat 2 data benign yang salah diklasifikasikan sebagai malignant dan 3 data malignant yang salah diklasifikasikan sebagai benign. Hasil ini menunjukkan bahwa peningkatan jumlah bootstrap dari 25 menjadi 100 belum menghasilkan perubahan klasifikasi pada data uji, sehingga ketiga model memiliki kinerja klasifikasi yang sama berdasarkan confusion matrix.

4.4 Evaluasi Model dan Perbandingan Hasil Evaluasi

# MENGHITUNG NILAI TP, TN, FP, DAN FN
hasil_evaluasi <- data.frame()

for (b in nbagg_values) {

  # Mengambil confusion matrix
  cm <- cm_list[[as.character(b)]]

  TN <- cm["benign", "benign"]
  FP <- cm["benign", "malignant"]
  FN <- cm["malignant", "benign"]
  TP <- cm["malignant", "malignant"]

  # MENGHITUNG METRIK EVALUASI

  # Accuracy
  accuracy <- (TP + TN) / sum(cm)

  # Precision
  precision <- if ((TP + FP) > 0) {
    TP / (TP + FP)
  } else {
    NA
  }

  # Recall / Sensitivity
  recall <- if ((TP + FN) > 0) {
    TP / (TP + FN)
  } else {
    NA
  }

  # Specificity
  specificity <- if ((TN + FP) > 0) {
    TN / (TN + FP)
  } else {
    NA
  }

  # F1-Score
  F1 <- if (!is.na(precision) &&
            !is.na(recall) &&
            (precision + recall) > 0) {
    2 * precision * recall / (precision + recall)
  } else {
    NA
  }
  
  # MENYIMPAN HASIL METRIK EVALUASI
  hasil_evaluasi <- rbind(
    hasil_evaluasi,
    data.frame(
      nbagg = b,
      TN = as.numeric(TN),
      FP = as.numeric(FP),
      FN = as.numeric(FN),
      TP = as.numeric(TP),
      Accuracy = accuracy,
      Precision = precision,
      Recall = recall,
      Specificity = specificity,
      F1_Score = F1
    )
  )
}

# MENAMPILKAN PERBANDINGAN HASIL EVALUASI
hasil_evaluasi[, -1] <-
  round(hasil_evaluasi[, -1], 4)

print(hasil_evaluasi)
##   nbagg TN FP FN TP Accuracy Precision Recall Specificity F1_Score
## 1    25 88  2  3 44   0.9635    0.9565 0.9362      0.9778   0.9462
## 2    50 88  2  3 44   0.9635    0.9565 0.9362      0.9778   0.9462
## 3   100 88  2  3 44   0.9635    0.9565 0.9362      0.9778   0.9462

Berdasarkan hasil perhitungan metrik evaluasi, model Bagging Classification dengan jumlah bootstrap (nbagg) sebesar 25, 50, dan 100 menghasilkan nilai evaluasi yang sama. Ketiga model memperoleh nilai accuracy sebesar 96,35%, precision sebesar 95,65%, recall sebesar 93,62%, specificity sebesar 97,78%, dan F1-score sebesar 94,62%. Nilai accuracy menunjukkan bahwa model mampu mengklasifikasikan 96,35% data uji dengan benar. Nilai precision menunjukkan bahwa 95,65% prediksi kelas malignant merupakan klasifikasi yang tepat. Nilai recall sebesar 93,62% menunjukkan kemampuan model dalam mendeteksi data malignant. Nilai specificity sebesar 97,78% menunjukkan kemampuan model dalam mengenali data benign. Dengan demikian, peningkatan jumlah bootstrap dari 25 menjadi 100 tidak mengubah kinerja klasifikasi pada pembagian data ini, sehingga ketiga model memberikan hasil evaluasi yang setara.

BAB V KESIMPULAN

5.1 Kesimpulan

Bagging merupakan metode ensemble learning yang menggabungkan beberapa model untuk menghasilkan prediksi yang lebih stabil. Metode ini menggunakan teknik bootstrap sampling untuk membentuk beberapa sampel dari data latih. Hasil prediksi akhir ditentukan melalui suara mayoritas pada klasifikasi.

Implementasi metode Bagging Classification dapat dilakukan menggunakan bahasa pemrograman R dengan memanfaatkan package yang sesuai. Proses implementasi meliputi persiapan data, pembentukan model, dan prediksi terhadap data uji. Hasil implementasi dapat digunakan untuk mengetahui kemampuan metode dalam melakukan klasifikasi.

Kinerja metode Bagging Classification dapat diketahui melalui beberapa metrik evaluasi, yaitu accuracy, precision, recall, specificity, dan F1-score. Penggunaan metrik tersebut memberikan gambaran mengenai ketepatan model dalam mengklasifikasikan data. Hasil evaluasi dapat dijadikan dasar untuk menilai kemampuan model dalam menghasilkan prediksi yang baik.

Berdasarkan hasil penerapan metode Bagging Classification pada data BreastCancer, diperoleh hasil bahwa penggunaan jumlah bootstrap (nbagg) sebesar 25, 50, dan 100 menghasilkan kinerja klasifikasi yang sama. Ketiga model memperoleh nilai accuracy sebesar 96,35%, precision sebesar 95,65%, recall sebesar 93,62%, specificity sebesar 97,78%, dan F1-score sebesar 94,62%. Dengan demikian, peningkatan jumlah bootstrap pada ketiga model tersebut belum menunjukkan perubahan kinerja klasifikasi berdasarkan data uji yang digunakan.

DAFTAR PUSTAKA

Fransiska, H. (2026). Modul Praktikum Machine Learning dan Modern Prediction. Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.

Imtiyaz, W., Satyahadewi, N., & Perdana, H. (2023). Application of Bagging Cart in the Classification of on-Time Graduation of Students in the Statistics Study Program of Tanjungpura University. Barekeng, 17(4), 2243–2252. https://doi.org/10.30598/barekengvol17iss4pp2243-2252

Pristyanto, Y., & Zein, A. A. (2023). Model Balanced Bagging Berbasis Decision Tree Pada Dataset Imbalanced Class. Jurnal Sisfokom (Sistem Informasi Dan Komputer), 12(1), 9–15. https://doi.org/10.32736/sisfokom.v12i1.1399

Syahrir, Moch., Switrayana, I. N., & Darmawan, I. M. A. W. (2025). Integrasi Bagging dan Stacking Untuk Memperbaiki Kinerja Algoritma Klasifikasi C4.5 dan K-Nearest Neighbor(KNN). JST (Jurnal Sains Dan Teknologi), 14(2), 218–228. https://doi.org/10.23887/jst-undiksha.v14i2.100794