BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

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”.

1.2 Rumusan Masalah

Berdasarkan latar belakang, rumusan masalah pada penelitian ini, yaitu:

  1. Bagaimana konsep dasar dan prinsip kerja metode bagging?

  2. Bagaimana cara megimplementasikan metode bagging dengan menggunakan R?

  3. Bagaimana cara mengevaluasi performa bagging?

1.3 Tujuan

Berdasarkan rumusan masalah di atas, tujuan pada penelitian ini, yaitu:

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

  2. Mahasiswa dapat megimplementasikan metode bagging dengan menggunakan R.

  3. Mengevaluasi performa bagging.

1.4 Manfaat

Adapun manfaat pada penelitian ini, yaitu:

  1. Dapat memberikan informasi serta pengetahuan tentang bagging menggunakan program RStudio.

  2. Mengembangkan dan menerapkan wawasan ilmu yang telah diperoleh khususnya tentang bagging di RStudio.

1.5 Batasan Masalah

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.

1.6 Sistematika Penulisan

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

BAB II TINJAUAN PUSTAKA

2.1 Boostrap

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.

2.2 Bagging (Bootstrap Aggregating)

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).

  1. Ambil \(B\) sampel bootstrap dari data latih.
  2. Bangun satu model dasar \(\hat{f}^{*b}(x)\) pada setiap sampel bootstrap ke-\(b\).
  3. Gabungkan prediksi seluruh model. Pada regresi, prediksi akhir adalah rata-rata:

\[ \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.

BAB III METODE PENELITIAN

3.1 Sumber Data

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.

3.2 Variabel Penelitian

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.

3.3 Langkah-langkah Analisis

  1. Input data
  2. Bagi data menjadi data latih (training data) dan data uji (testing data)
  3. Menentukan jumlah Bootstrap agregat
  4. Membangun model bagging regression
  5. Menampilkan struktur pohon penyusun bagging
  6. Melakukan perbandingan data aktual dan prediksi
  7. Evaluasi model
  8. Membuat visualisasi data aktual dan prediksi
  9. Pemilihan model terbaik

BAB IV HASIL DAN PEMBAHASAN

5.1 Library

library(mlbench)
library(ipred)
library(caret)
## 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().

5.2 Data

set.seed(123)
data <- as.data.frame(mlbench.friedman1(200))

# Struktur data
str(data)
## '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 ...
# Melihat beberapa baris pertama
head(data)
##         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
# Informasi statistik deskriptif
summary(data)
##       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.

5.3 Splitting Data

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
nrow(test)
## [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.

5.4 Menentukan Jumlah Bootstrap Agregat

# 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.

5.5 Membangun Model Bagging Regression

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.

5.6 Struktur Pohon Penyusun Bagging

model_bagging[["25"]]$mtrees[[1]]$btree
## 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 *
model_bagging[["50"]]$mtrees[[1]]$btree
## 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 *
model_bagging[["100"]]$mtrees[[1]]$btree
## 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.

5.7 Hasil Aktual dan Prediksi

print(hasil_prediksi)
##       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.

5.8 Evaluasi Model

print(hasil_evaluasi)
##   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.

5.9 Visualisasi Aktual dan Prediksi

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.

5.10 Pemilihan Model Terbaik

# Model terbaik berdasarkan MSE terkecil
hasil_evaluasi[which.min(hasil_evaluasi$MSE), ]
##   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.

BAB V KESIMPULAN

5.1 Kesimpulan

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.

5.2 Saran

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.

DAFTAR PUSTAKA

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.