BAB I PENDAHULUAN

1.1 Latar Belakang

   Boosting merupakan salah satu metode ensemble learning dalam pembelajaran mesin (machine learning) yang menggabungkan beberapa model pembelajaran sederhana (weak learners) untuk membentuk model prediksi yang lebih kuat. Metode ini bekerja secara bertahap dengan memberikan perhatian lebih pada kesalahan prediksi dari model sebelumnya sehingga model berikutnya dapat memperbaiki hasil pembelajaran. Boosting dapat diterapkan pada permasalahan klasifikasi maupun regresi, sehingga banyak digunakan dalam analisis data untuk menghasilkan prediksi yang lebih baik (Amatullah et al., 2025).

   Dalam penerapannya, boosting memiliki beberapa algoritma, di antaranya Adaptive Boosting (AdaBoost), Gradient Boosting, Extreme Gradient Boosting (XGBoost), dan Light Gradient Boosting Machine (LightGBM). Setiap algoritma memiliki mekanisme pembelajaran yang berbeda, tetapi secara umum bertujuan meningkatkan kemampuan prediksi dengan menggabungkan hasil dari sejumlah model. Penelitian Putri dan Arianto (2024) membahas perbandingan metode bagging dan boosting untuk memprediksi konsentrasi PM10 di Jakarta Utara, sedangkan Toharudin et al. (2023) menerapkan beberapa algoritma boosting untuk klasifikasi konsentrasi PM2.5 dengan memperhatikan ketidakseimbangan kelas.

   Praktikum metode boosting dilakukan untuk memahami konsep dasar, mekanisme kerja, serta penerapan algoritma boosting dalam membangun model prediksi berdasarkan data. Melalui praktikum ini, mahasiswa dapat mempelajari tahapan pengolahan data, pembentukan model, serta evaluasi kinerja model menggunakan ukuran evaluasi yang sesuai dengan permasalahan yang dianalisis. Pemahaman tersebut diharapkan dapat membantu mahasiswa menentukan dan menerapkan metode boosting secara tepat dalam menyelesaikan permasalahan analisis data (Putri & Arianto, 2024).

1.2 Rumusan Masalah

   Berdasarkan latar belakang di atas dapat disimpulkan bahwa rumusan masalah sebagai berikut:
  1. Bagaimana mahasiswa mampu memahami Boosting sebagai metode ensemble learning?

  2. Bagaimana mahasiswa mampu mengimplementasikan Boosting untuk kasus klasifikasi dan regresi menggunakan R?

  3. Bagaimana mahasiswa mampu mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai?

1.3 Tujuan Penelitian

   Berdasarkan rumusan masalah di atas, tujuan penelitian yang dapat disimpulkan sebagai berikut:
  1. Mahasiswa dapat memahami Boosting sebagai metode ensemble learning.

  2. Mahasiswa dapat mengimplementasikan Boosting untuk kasus klasifikasi dan regresi menggunakan R.

  3. Mahasiswa dapat mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai.

1.4 Manfaat Penelitian

   Adapun manfaat yang didapatkan dari penelitian ini adalah sebagai berikut:
  1. Bagi penulis

    1. Memberikan informasi dan pengetahuan mengenai Boosting sebagai metode ensemble learning, dapat mengimplementasikan Boosting untuk kasus klasifikasi dan regresi menggunakan R, dan dapat mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai.

    2. Menerapkan ilmu atau wawasan baru mengenai Boosting sebagai metode ensemble learning, dapat mengimplementasikan Boosting untuk kasus klasifikasi dan regresi menggunakan R, dan dapat mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai.

  2. Bagi pembaca

    1. Menambah ilmu pengetahuan mengenai Boosting sebagai metode ensemble learning, dapat mengimplementasikan Boosting untuk kasus klasifikasi dan regresi menggunakan R, dan dapat mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai.

    2. Dapat menjadi rujukan bagi penelitian selanjutnya.

1.5 Batasan Masalah

   Adapun batasan masalah pada penelitian ini yaitu, Lakukan regresi menggunakan Gradient Boosting pada data Friedman.  Clue: Gunakan `gbm()` dan bandingkan nilai learning rate (shrinkage) 𝜈 = 0.01, 0.05, dan 0.10. Gunakan cross-validation untuk menentukan jumlah iterasi optimal pada masing-masing model. Bandingkan performa berdasarkan MSE, RMSE, MAE, dan R2, kemudian interpretasikan hasilnya.

BAB II TINJAUAN PUSTAKA

2.1 Boosting

   Boosting merupakan salah satu teknik ensemble learning dalam machine learning yang menggabungkan beberapa model pembelajaran sederhana untuk menghasilkan model dengan kemampuan prediksi yang lebih baik. Proses pembelajaran dilakukan secara berurutan, yaitu model berikutnya dibentuk dengan memperhatikan kesalahan yang dihasilkan oleh model sebelumnya sehingga kesalahan prediksi dapat diperbaiki secara bertahap (Firmansyah & Abidin, 2022).

   Metode boosting memiliki beberapa algoritma, antara lain Adaptive Boosting (AdaBoost), Gradient Boosting, dan CatBoost, yang dapat digunakan untuk menyelesaikan permasalahan klasifikasi maupun prediksi numerik. Setiap algoritma memiliki mekanisme pembelajaran tersendiri, tetapi secara umum bertujuan meningkatkan kinerja model melalui penggabungan hasil pembelajaran beberapa model. Penerapan algoritma Gradient Boosting, AdaBoost, dan CatBoost dalam klasifikasi kualitas air menunjukkan bahwa ketiga algoritma tersebut dapat dibandingkan berdasarkan kinerja prediksinya, misalnya melalui nilai akurasi dan Area Under the Curve (AUC) (Jasman et al., 2022).

2.2 Jenis-Jenis Algoritma Boosting

   Algoritma boosting terdiri atas beberapa jenis yang memiliki mekanisme pembelajaran dan karakteristik berbeda. Pertama, Adaptive Boosting (AdaBoost) merupakan algoritma yang meningkatkan kemampuan model dengan memberikan bobot lebih besar pada data yang salah diklasifikasikan pada iterasi sebelumnya. Kedua, Gradient Boosting membangun model secara bertahap dengan meminimalkan fungsi kerugian (loss function) berdasarkan kesalahan prediksi model sebelumnya. Kedua algoritma tersebut dapat digunakan untuk permasalahan klasifikasi dan telah diterapkan dalam penelitian analisis kualitas air (Jasman et al., 2022).

   Jenis boosting lainnya adalah Extreme Gradient Boosting (XGBoost), Light Gradient Boosting Machine (LightGBM), dan Categorical Boosting (CatBoost). XGBoost dikembangkan untuk meningkatkan efisiensi dan kinerja pembelajaran berbasis gradient boosting, sedangkan LightGBM dirancang untuk mempercepat proses pelatihan melalui pendekatan pertumbuhan pohon yang efisien. Sementara itu, CatBoost dirancang untuk menangani variabel kategorik secara efektif. Ketiga algoritma tersebut, bersama AdaBoost dan Gradient Boosting, telah digunakan dalam penelitian klasifikasi dan prediksi, sehingga pemilihan algoritma perlu disesuaikan dengan karakteristik data serta hasil evaluasi model (Toharudin et al., 2023; Mawardi et al., 2025).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

   Jenis data pada penelitian ini adalah data numerik. Data numerik adalah jenis data yang terdiri dari angka dan dapat diukur atau dihitung secara kuantitatif. Data ini digunakan untuk merepresentasikan nilai atau ukuran tertentu dalam berbagai konteks, seperti sains, ekonomi, statistik, dan matematika. Data numerik sering digunakan untuk melakukan perhitungan, analisis, dan visualisasi data.

   Dalam laporan ini sumber data yang digunakan adalah sumber data dalam wujud data sekunder. yaitu data yang telah dikumpulkan dan disusun oleh pihak lain di luar praktikan itu sendiri. Data pada praktikum ini yaitu dataset Friedman yang tersedia di R, Dimana penelitian ini menggunakan data kuantitatif simulasi yang dibangkitkan secara komputasional menggunakan fungsi `mlbench.friedman1()` dari paket mlbench pada perangkat lunak R.

3.2 Variabel Penelitian

   Variabel adalah simbol, karakteristik, atau atribut yang dapat diukur atau diamati dalam sebuah penelitian atau eksperimen. Pada laporan ini terdapat 1 batasan masalah. Variabel penelitian yang digunakan terdiri atas satu variabel respons kontinu, yaitu Y, dan sepuluh variabel prediktor numerik, yaitu X sampai X10. Variabel X1 sampai X5 memiliki hubungan dengan variabel respons, sedangkan X6 sampai X10 berperan sebagai variabel tambahan yang tidak memiliki pengaruh langsung terhadap respons.

3.3 Analisis Data

   Langkah-langkah yang digunakan pada penelitian untuk batasan masalah adalah sebagai berikut:
  1. Membangkitkan data Friedman sebanyak 200 observasi menggunakan fungsi mlbench.friedman1().

  2. Memeriksa struktur dan kualitas data, meliputi tipe variabel, statistik deskriptif, nilai hilang, dan duplikasi.

  3. Menggunakan fungsi gbm() dengan distribution = "gaussian".

  4. Membandingkan tiga nilai learning rate atau shrinkage.

    1. 0,01

    2. 0,05

    3. 0,10

  5. Menggunakan 10-fold cross-validation pada setiap model.

  6. Menentukan jumlah iterasi optimal dengan gbm.perf(…, method = “cv”).

  7. Menghitung MSE, RMSE, MAE, dan R2.

  8. Membandingkan performa ketiga model.

  9. Menganalisis grafik error cross-validation, aktual versus prediksi, residual, dan variable importance

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Pembangkitan Data

library(gbm)
## Loaded gbm 2.3.1
## This version of gbm is no longer under development. Consider transitioning to gbm3, https://github.com/gbm-developers/gbm3
library(mlbench)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
# Membentuk dataset Friedman #1
set.seed(234)
reg.data <- as.data.frame(mlbench.friedman1(200))

# Melihat struktur dan ringkasan data
str(reg.data)
## 'data.frame':    200 obs. of  11 variables:
##  $ x.1 : num  0.7456 0.7817 0.02 0.7761 0.0669 ...
##  $ x.2 : num  0.575 0.316 0.765 0.229 0.172 ...
##  $ x.3 : num  0.0289 0.9375 0.7978 0.668 0.5974 ...
##  $ x.4 : num  0.72 0.185 0.534 0.553 0.755 ...
##  $ x.5 : num  0.875 0.704 0.952 0.478 0.533 ...
##  $ x.6 : num  0.276 0.643 0.987 0.843 0.733 ...
##  $ x.7 : num  0.9332 0.4018 0.0874 0.893 0.1024 ...
##  $ x.8 : num  0.60746 0.00369 0.0106 0.44639 0.83494 ...
##  $ x.9 : num  0.756 0.405 0.247 0.144 0.187 ...
##  $ x.10: num  0.718 0.534 0.667 0.68 0.595 ...
##  $ y   : num  24.35 18.05 12.02 12.1 9.91 ...
summary(reg.data)
##       x.1                x.2                x.3               x.4         
##  Min.   :0.001198   Min.   :0.004583   Min.   :0.01021   Min.   :0.00707  
##  1st Qu.:0.274097   1st Qu.:0.255644   1st Qu.:0.24506   1st Qu.:0.20772  
##  Median :0.541847   Median :0.436813   Median :0.48965   Median :0.50295  
##  Mean   :0.509759   Mean   :0.465323   Mean   :0.48570   Mean   :0.48821  
##  3rd Qu.:0.741416   3rd Qu.:0.651439   3rd Qu.:0.73476   3rd Qu.:0.76599  
##  Max.   :0.993590   Max.   :0.999850   Max.   :0.99985   Max.   :0.99761  
##       x.5                x.6                x.7                x.8          
##  Min.   :0.008246   Min.   :0.005504   Min.   :0.001884   Min.   :0.002496  
##  1st Qu.:0.267523   1st Qu.:0.194431   1st Qu.:0.226788   1st Qu.:0.249826  
##  Median :0.522081   Median :0.446060   Median :0.491332   Median :0.480306  
##  Mean   :0.503282   Mean   :0.468544   Mean   :0.503754   Mean   :0.482050  
##  3rd Qu.:0.751688   3rd Qu.:0.746035   3rd Qu.:0.780325   3rd Qu.:0.696675  
##  Max.   :0.994604   Max.   :0.999021   Max.   :0.993044   Max.   :0.995613  
##       x.9                x.10                y         
##  Min.   :0.004483   Min.   :0.005544   Min.   : 3.082  
##  1st Qu.:0.203254   1st Qu.:0.329160   1st Qu.:10.593  
##  Median :0.453476   Median :0.592614   Median :13.810  
##  Mean   :0.471873   Mean   :0.540708   Mean   :14.270  
##  3rd Qu.:0.742412   3rd Qu.:0.765353   3rd Qu.:18.063  
##  Max.   :0.997436   Max.   :0.998141   Max.   :26.146
dim(reg.data)
## [1] 200  11
   Dataset yang digunakan dalam praktikum dibentuk menggunakan fungsi mlbench.friedman1() dengan jumlah sebanyak 200 pengamatan. Berdasarkan pemeriksaan struktur data, terdapat 11 variabel numerik yang terdiri atas 10 variabel prediktor (x.1 hingga x.10) dan satu variabel respons (y). Nilai setiap prediktor berada pada rentang mendekati 0 sampai 1, sedangkan nilai respons memiliki rentang sekitar 3,082 hingga 26,146. Data ini digunakan untuk mempelajari kemampuan Gradient Boosting dalam membangun model regresi berdasarkan hubungan antara variabel prediktor dan respons. Penggunaan data simulasi juga memudahkan pengamatan terhadap kinerja model karena karakteristik data telah ditentukan melalui proses pembangkitan.

4.2 Splitting Data

set.seed(234)
idx.reg <- createDataPartition(reg.data$y, p = 0.70, list = FALSE)

reg.train <- reg.data[idx.reg, ]
reg.test  <- reg.data[-idx.reg, ]

dim(reg.train)
## [1] 140  11
dim(reg.test)
## [1] 60 11
   Pembagian dataset dilakukan dengan fungsi createDataPartition() menggunakan proporsi 70% untuk data pelatihan (training) dan 30% untuk data pengujian (testing). Hasil pembagian menghasilkan 140 pengamatan untuk membangun model dan 60 pengamatan untuk mengukur kemampuan prediksi. Pembagian ini memungkinkan model mempelajari pola dari data training, kemudian menguji hasil pembelajarannya pada pengamatan yang tidak digunakan selama proses pelatihan. Pemilihan sampel berdasarkan distribusi variabel respons juga membantu menjaga keterwakilan rentang nilai y pada kedua kelompok data. Dengan demikian, evaluasi model tidak hanya didasarkan pada kemampuannya menyesuaikan data pelatihan, tetapi juga pada performanya terhadap data baru.

4.3 Pembentukan Model Gradient Boosting

shrink.val <- c(0.01, 0.05, 0.10)
ntrees.val <- c(5000, 1500, 800)

models  <- list()
best.it <- numeric(length(shrink.val))
hasil   <- data.frame()
actual  <- reg.test$y

for (i in seq_along(shrink.val)) {
  set.seed(234)
  m <- gbm(
    formula = y ~ .,
    data = reg.train,
    distribution = "gaussian",
    n.trees = ntrees.val[i],
    interaction.depth = 2,
    shrinkage = shrink.val[i],
    bag.fraction = 1,
    cv.folds = 10,
    n.minobsinnode = 5,
    verbose = FALSE
  )
  models[[i]] <- m

  # Iterasi optimal berdasarkan cross-validation
  best.it[i] <- gbm.perf(m, method = "cv", plot.it = FALSE)

  # Prediksi data testing
  pred <- as.numeric(predict(m, newdata = reg.test,
                             n.trees = best.it[i], type = "response"))

  # Evaluasi
  MSE  <- mean((actual - pred)^2)
  RMSE <- sqrt(MSE)
  MAE  <- mean(abs(actual - pred))
  R2   <- 1 - sum((actual - pred)^2) / sum((actual - mean(actual))^2)

  hasil <- rbind(hasil, data.frame(
    Shrinkage       = shrink.val[i],
    n.trees.maks    = ntrees.val[i],
    Iterasi_Optimal = best.it[i],
    CV_MSE          = min(m$cv.error),
    MSE = MSE, RMSE = RMSE, MAE = MAE, R_Square = R2
  ))
}

# Ringkasan ketiga model
for (i in seq_along(models)) {
  cat("\n=== Shrinkage =", shrink.val[i], "===\n")
  print(models[[i]])
}
## 
## === Shrinkage = 0.01 ===
## gbm(formula = y ~ ., distribution = "gaussian", data = reg.train, 
##     n.trees = ntrees.val[i], interaction.depth = 2, n.minobsinnode = 5, 
##     shrinkage = shrink.val[i], bag.fraction = 1, cv.folds = 10, 
##     verbose = FALSE)
## A gradient boosted model with gaussian loss function.
## 5000 iterations were performed.
## The best cross-validation iteration was 2038.
## There were 10 predictors of which 10 had non-zero influence.
## 
## === Shrinkage = 0.05 ===
## gbm(formula = y ~ ., distribution = "gaussian", data = reg.train, 
##     n.trees = ntrees.val[i], interaction.depth = 2, n.minobsinnode = 5, 
##     shrinkage = shrink.val[i], bag.fraction = 1, cv.folds = 10, 
##     verbose = FALSE)
## A gradient boosted model with gaussian loss function.
## 1500 iterations were performed.
## The best cross-validation iteration was 458.
## There were 10 predictors of which 10 had non-zero influence.
## 
## === Shrinkage = 0.1 ===
## gbm(formula = y ~ ., distribution = "gaussian", data = reg.train, 
##     n.trees = ntrees.val[i], interaction.depth = 2, n.minobsinnode = 5, 
##     shrinkage = shrink.val[i], bag.fraction = 1, cv.folds = 10, 
##     verbose = FALSE)
## A gradient boosted model with gaussian loss function.
## 800 iterations were performed.
## The best cross-validation iteration was 212.
## There were 10 predictors of which 10 had non-zero influence.
   Pembentukan model dilakukan dengan menggunakan tiga nilai shrinkage, yaitu 0,01, 0,05, dan 0,10. Setiap model dibangun menggunakan fungsi distribusi Gaussian, kedalaman interaksi sebesar 2, serta validasi silang (cross-validation) sebanyak 10 lipatan. Jumlah pohon maksimum disesuaikan dengan nilai shrinkage, yaitu 5.000, 1.500, dan 800 pohon secara berurutan. Berdasarkan hasil pemilihan iterasi optimal, model dengan shrinkage 0,01 mencapai titik optimal pada 2.038 pohon, model dengan shrinkage 0,05 pada 458 pohon, dan model dengan shrinkage 0,10 pada 212 pohon. Hasil tersebut memperlihatkan bahwa ketiga konfigurasi membutuhkan jumlah iterasi yang berbeda untuk memperoleh hasil pembelajaran terbaik menurut validasi silang. Model dengan shrinkage lebih besar mencapai iterasi optimal lebih cepat, sedangkan model dengan shrinkage kecil memerlukan lebih banyak pohon untuk memperbarui prediksi secara bertahap.

4.4 Iterasi Optimal dengan Cross-Validation

par(mfrow = c(1, 3))
for (i in seq_along(shrink.val)) {
  gbm.perf(models[[i]], method = "cv", plot.it = TRUE)
  title(main = paste("Shrinkage =", shrink.val[i]))
}
Kurva galat training dan cross-validation untuk tiga nilai shrinkage

Kurva galat training dan cross-validation untuk tiga nilai shrinkage

par(mfrow = c(1, 1))
   Kurva training error dan cross-validation error digunakan untuk melihat perubahan kesalahan model seiring bertambahnya jumlah pohon. Pada ketiga grafik, kesalahan pelatihan cenderung menurun ketika jumlah iterasi bertambah, sedangkan kesalahan validasi mengalami penurunan pada tahap awal sebelum mencapai nilai minimum. Titik minimum kurva validasi menjadi dasar untuk menentukan jumlah pohon yang digunakan dalam prediksi. Perbedaan nilai shrinkage terlihat pada posisi titik optimal, dengan nilai 0,10 mencapai titik tersebut pada iterasi paling sedikit dan nilai 0,01 pada iterasi paling banyak. Setelah mencapai titik minimum, perubahan kesalahan validasi relatif terbatas. Hal ini menunjukkan bahwa penambahan pohon setelah iterasi optimal tidak memberikan peningkatan yang berarti pada kemampuan generalisasi model.
tab.iter <- data.frame(
  Shrinkage = hasil$Shrinkage,
  Iterasi_Optimal = hasil$Iterasi_Optimal,
  Shrinkage_x_Iterasi = round(hasil$Shrinkage * hasil$Iterasi_Optimal, 2),
  CV_MSE = round(hasil$CV_MSE, 4)
)
knitr::kable(tab.iter, align = "c",
             caption = "Iterasi optimal dan galat CV minimum")
Iterasi optimal dan galat CV minimum
Shrinkage Iterasi_Optimal Shrinkage_x_Iterasi CV_MSE
0.01 2038 20.38 4.0047
0.05 458 22.90 4.0046
0.10 212 21.20 3.9630
   Tabel iterasi optimal juga memperlihatkan bahwa hasil perkalian nilai shrinkage dengan jumlah iterasi optimal relatif berdekatan, yakni 20,38; 22,90; dan 21,20. Sementara itu, nilai minimum cross-validation error masing-masing sebesar 4,0047; 4,0046; dan 3,9630. Nilai terendah diperoleh pada shrinkage 0,10, sehingga konfigurasi tersebut menunjukkan hasil validasi silang yang sedikit lebih baik dibandingkan dua konfigurasi lainnya. Meskipun demikian, selisih nilai galat yang kecil mengindikasikan bahwa kualitas ketiga model selama validasi silang relatif sebanding.

4.5 Evaluasi Kinerja pada Data Testing

tab.hasil <- hasil
tab.hasil[, c("CV_MSE", "MSE", "RMSE", "MAE", "R_Square")] <-
  round(tab.hasil[, c("CV_MSE", "MSE", "RMSE", "MAE", "R_Square")], 4)
knitr::kable(tab.hasil, align = "c",
             caption = "Perbandingan kinerja Gradient Boosting pada data testing")
Perbandingan kinerja Gradient Boosting pada data testing
Shrinkage n.trees.maks Iterasi_Optimal CV_MSE MSE RMSE MAE R_Square
0.01 5000 2038 4.0047 4.2550 2.0628 1.5951 0.8225
0.05 1500 458 4.0046 4.2639 2.0649 1.6008 0.8221
0.10 800 212 3.9630 4.0312 2.0078 1.5579 0.8318
par(mfrow = c(1, 2))
barplot(
  rbind(hasil$RMSE, hasil$MAE),
  beside = TRUE, names.arg = shrink.val,
  col = c("navy", "skyblue"),
  xlab = "Shrinkage", ylab = "Nilai Galat",
  main = "RMSE dan MAE", ylim = c(0, 2.6)
)
legend("topright", legend = c("RMSE", "MAE"),
       fill = c("navy", "skyblue"), bty = "n")
barplot(
  hasil$R_Square, names.arg = shrink.val,
  col = "navy", xlab = "Shrinkage", ylab = "R-Square",
  main = "R-Square", ylim = c(0, 1)
)
Perbandingan RMSE, MAE, dan R-Square antar shrinkage

Perbandingan RMSE, MAE, dan R-Square antar shrinkage

par(mfrow = c(1, 1))
   Evaluasi pada data testing dilakukan menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). Berdasarkan hasil perhitungan, model dengan shrinkage 0,10 menghasilkan MSE sebesar 4,0312, RMSE sebesar 2,0078, MAE sebesar 1,5579, dan \(R^2\) sebesar 0,8318. Sementara itu, model dengan shrinkage 0,01 memperoleh MSE 4,2550, RMSE 2,0628, MAE 1,5951, dan \(R^2\) 0,8225. Model dengan shrinkage 0,05 menghasilkan MSE 4,2639, RMSE 2,0649, MAE 1,6008, dan \(R^2\) 0,8221.

   Perbandingan tersebut menunjukkan bahwa konfigurasi shrinkage 0,10 memberikan hasil terbaik di antara ketiga model berdasarkan seluruh ukuran evaluasi yang digunakan. Nilai MSE, RMSE, dan MAE yang lebih rendah menunjukkan bahwa kesalahan prediksinya relatif lebih kecil, sedangkan nilai \(R^2\) yang lebih tinggi menunjukkan kemampuan yang lebih baik dalam menjelaskan variasi respons pada data pengujian. Nilai \(R^2\) sebesar 0,8318 menunjukkan bahwa model mampu menjelaskan sekitar 83,18% variasi nilai respons pada data testing. Walaupun demikian, perbedaan hasil antarmodel tergolong kecil. Oleh karena itu, hasil tersebut lebih tepat diartikan sebagai keunggulan model shrinkage 0,10 pada pembagian data yang digunakan, bukan sebagai bukti bahwa konfigurasi tersebut selalu unggul pada setiap dataset.

4.6 Plot Aktual dan Prediksi

par(mfrow = c(1, 3))
for (i in seq_along(shrink.val)) {
  p <- predict(models[[i]], reg.test, n.trees = best.it[i])
  plot(actual, p, pch = 19, col = "navy",
       xlab = "Nilai Aktual", ylab = "Nilai Prediksi",
       main = paste("Shrinkage =", shrink.val[i]))
  abline(a = 0, b = 1, lty = 2, lwd = 2, col = "red")
}
Nilai aktual terhadap nilai prediksi

Nilai aktual terhadap nilai prediksi

par(mfrow = c(1, 1))
   Grafik perbandingan nilai aktual dan prediksi digunakan untuk mengamati kesesuaian hasil estimasi dengan nilai respons sebenarnya. Garis diagonal pada grafik berfungsi sebagai acuan, yaitu kondisi ketika nilai prediksi sama dengan nilai aktual. Titik yang berada dekat dengan garis tersebut menunjukkan hasil prediksi yang lebih sesuai, sedangkan titik yang semakin jauh menandakan selisih prediksi yang lebih besar. Pada ketiga model, titik-titik menunjukkan kecenderungan meningkat mengikuti garis diagonal. Pola ini menandakan bahwa model dapat menangkap hubungan umum antara nilai aktual dan hasil prediksi.

   Nilai korelasi antara aktual dan prediksi tercatat sebesar 0,916 untuk shrinkage 0,01, 0,917 untuk shrinkage 0,05, dan 0,921 untuk shrinkage 0,10. Nilai korelasi tertinggi diperoleh oleh model dengan shrinkage 0,10, yang juga memiliki nilai RMSE paling rendah pada evaluasi sebelumnya. Keselarasan kedua hasil tersebut memperkuat bahwa konfigurasi ini memberikan prediksi yang relatif lebih baik pada data pengujian. Namun, korelasi yang tinggi tidak secara langsung berarti bahwa semua prediksi memiliki kesalahan kecil, sehingga interpretasinya tetap perlu mempertimbangkan nilai galat dan hasil pemeriksaan residual.
# Galat berdasarkan tingkat nilai aktual (sepertiga rendah, sedang, tinggi)
grup <- cut(actual, quantile(actual, c(0, 1/3, 2/3, 1)), include.lowest = TRUE,
            labels = c("Rendah", "Sedang", "Tinggi"))
tab.grup <- do.call(rbind, lapply(seq_along(models), function(i) {
  p <- predict(models[[i]], reg.test, n.trees = best.it[i])
  r <- actual - p
  data.frame(Shrinkage = shrink.val[i], Kelompok_y = levels(grup),
             Rata2_Residual = as.numeric(tapply(r, grup, mean)),
             Rata2_Galat_Mutlak = as.numeric(tapply(abs(r), grup, mean)))
}))
tab.grup[, 3:4] <- round(tab.grup[, 3:4], 3)
knitr::kable(tab.grup, align = "c",
             caption = "Residual menurut tingkat nilai aktual")
Residual menurut tingkat nilai aktual
Shrinkage Kelompok_y Rata2_Residual Rata2_Galat_Mutlak
0.01 Rendah -1.856 2.004
0.01 Sedang -0.378 1.453
0.01 Tinggi 1.152 1.328
0.05 Rendah -1.929 2.070
0.05 Sedang -0.352 1.472
0.05 Tinggi 1.085 1.260
0.10 Rendah -1.862 2.026
0.10 Sedang -0.328 1.405
0.10 Tinggi 0.998 1.243
   Hasil pengelompokan residual berdasarkan tingkat nilai aktual juga memperlihatkan bahwa model cenderung menghasilkan kesalahan yang berbeda pada rentang respons yang berbeda. Pada model dengan shrinkage 0,10, rata-rata residual untuk kelompok nilai aktual rendah sebesar −1,86, sedangkan pada kelompok nilai tinggi sebesar 1,00. Karena residual dihitung sebagai nilai aktual dikurangi nilai prediksi, residual negatif menunjukkan kecenderungan prediksi terlalu tinggi, sedangkan residual positif menunjukkan kecenderungan prediksi terlalu rendah. Temuan ini mengindikasikan bahwa model belum sepenuhnya menangkap nilai-nilai respons pada kedua ujung distribusi. Rata-rata galat mutlak juga lebih besar pada kelompok rendah, yaitu 2,03, dibandingkan kelompok tinggi sebesar 1,24. Dengan demikian, meskipun model menghasilkan prediksi yang cukup baik secara keseluruhan, ketepatannya masih berbeda menurut tingkat nilai respons.

4.7 Plot Residual

par(mfrow = c(1, 3))
for (i in seq_along(shrink.val)) {
  p <- predict(models[[i]], reg.test, n.trees = best.it[i])
  plot(p, actual - p, pch = 19, col = "navy",
       xlab = "Nilai Prediksi", ylab = "Residual",
       main = paste("Shrinkage =", shrink.val[i]))
  abline(h = 0, lty = 2, lwd = 2, col = "red")
}
Residual terhadap nilai prediksi

Residual terhadap nilai prediksi

par(mfrow = c(1, 1))
ringkas.res <- do.call(rbind, lapply(seq_along(models), function(i) {
  p <- predict(models[[i]], reg.test, n.trees = best.it[i])
  r <- actual - p
  data.frame(Shrinkage = shrink.val[i],
             Rata2 = mean(r), SimpBaku = sd(r),
             Min = min(r), Maks = max(r),
             Korelasi_AbsRes_Prediksi = cor(abs(r), p))
}))
ringkas.res[, -1] <- round(ringkas.res[, -1], 4)
knitr::kable(ringkas.res, align = "c",
             caption = "Ringkasan residual data testing")
Ringkasan residual data testing
Shrinkage Rata2 SimpBaku Min Maks Korelasi_AbsRes_Prediksi
0.01 -0.3604 2.0482 -5.3221 4.2418 0.0035
0.05 -0.3986 2.0432 -5.4280 4.3171 -0.0246
0.10 -0.3976 1.9846 -5.1205 3.9229 -0.0276
   Pemeriksaan residual dilakukan untuk mengetahui pola kesalahan prediksi pada masing-masing model. Grafik residual terhadap nilai prediksi memperlihatkan posisi kesalahan relatif terhadap garis nol. Residual positif berarti nilai aktual lebih besar daripada prediksi, sedangkan residual negatif menunjukkan bahwa prediksi melebihi nilai aktual. Berdasarkan grafik, residual ketiga model tersebar di sekitar garis nol dan tidak memperlihatkan pola melengkung atau bentuk corong yang mencolok. Kondisi ini menunjukkan bahwa tidak terlihat pola kesalahan sistematis yang kuat berdasarkan nilai prediksi, meskipun pemeriksaan visual tersebut belum cukup untuk memastikan seluruh asumsi residual terpenuhi.

   Ringkasan residual menunjukkan bahwa rata-rata residual ketiga model bernilai negatif, yaitu sekitar −0,36 hingga −0,40. Hal ini mengindikasikan adanya kecenderungan prediksi sedikit lebih tinggi daripada nilai aktual secara rata-rata. Besarnya rata-rata tersebut relatif kecil dibandingkan dengan simpangan baku residual yang berada di sekitar 2,0. Selain itu, korelasi antara nilai absolut residual dan nilai prediksi masing-masing sebesar 0,004; −0,025; dan −0,028. Nilai yang mendekati nol tersebut menunjukkan bahwa tidak terlihat hubungan linear yang kuat antara besarnya kesalahan absolut dan nilai prediksi. Secara keseluruhan, hasil pemeriksaan residual mendukung bahwa ketiga model memiliki pola kesalahan yang relatif serupa, dengan perbedaan pada rentang residual yang dihasilkan.

4.8 Variable Importance

best.m <- which.min(hasil$RMSE)
imp <- summary(models[[best.m]], n.trees = best.it[best.m], plotit = FALSE)

knitr::kable(data.frame(Variabel = imp$var, Rel_Influence = round(imp$rel.inf, 4)),
             align = "c",
             caption = paste("Relative influence model terbaik (shrinkage =",
                             shrink.val[best.m], ")"))
Relative influence model terbaik (shrinkage = 0.1 )
Variabel Rel_Influence
x.4 38.4746
x.1 28.2478
x.2 13.8418
x.3 11.7264
x.5 5.4518
x.6 1.0221
x.7 0.4197
x.10 0.4045
x.9 0.2587
x.8 0.1526
barplot(imp$rel.inf, names.arg = imp$var, las = 2, col = "navy",
        main = paste("Variable Importance - Shrinkage", shrink.val[best.m]),
        ylab = "Relative Influence")
Relative influence model terbaik

Relative influence model terbaik

   Analisis variable importance dilakukan untuk mengetahui kontribusi relatif masing-masing prediktor dalam pembentukan model terbaik. Berdasarkan nilai RMSE, model dengan shrinkage 0,10 dipilih untuk dianalisis lebih lanjut. Hasilnya menunjukkan bahwa x.4 memiliki pengaruh relatif paling besar, yaitu 38,47, diikuti x.1 sebesar 28,25, x.2 sebesar 13,84, x.3 sebesar 11,73, dan x.5 sebesar 5,45. Kelima variabel tersebut menyumbang sekitar 97,75% dari keseluruhan pengaruh relatif model. Sebaliknya, kontribusi variabel x.6 sampai x.10 tergolong kecil, dengan x.6 sebesar 1,02 dan variabel lainnya masing-masing di bawah 0,5.

   Hasil tersebut menunjukkan bahwa model Gradient Boosting memberikan bobot pengaruh yang jauh lebih besar kepada lima prediktor pertama dibandingkan lima prediktor lainnya. Pola ini sesuai dengan karakteristik dataset Friedman #1, yang membentuk respons terutama melalui x.1 sampai x.5, sedangkan x.6 hingga x.10 berperan sebagai variabel yang tidak memberikan kontribusi langsung pada fungsi respons. Dominasi x.4 menunjukkan bahwa variabel tersebut menjadi prediktor yang paling banyak digunakan atau paling berkontribusi terhadap pengurangan kesalahan dalam model. Sementara itu, rendahnya pengaruh relatif variabel lainnya mengindikasikan bahwa model dapat membedakan prediktor yang relevan dari prediktor dengan informasi yang terbatas. Perlu diperhatikan bahwa relative influence menggambarkan kontribusi prediktif dalam model, bukan hubungan sebab-akibat antara variabel.

4.9 Pembahasan Perbandingan Shrinkage

   Perbandingan ketiga nilai shrinkage menunjukkan adanya perbedaan efisiensi pembentukan model. Konfigurasi 0,01 memerlukan 2.038 pohon untuk mencapai iterasi optimal, sedangkan konfigurasi 0,05 dan 0,10 masing-masing hanya memerlukan 458 dan 212 pohon. Meskipun model dengan shrinkage terkecil menggunakan jumlah pohon lebih banyak, hasil evaluasinya tidak lebih baik daripada model dengan shrinkage 0,10. Model terakhir menghasilkan RMSE 2,0078, lebih rendah dibandingkan 2,0628 pada shrinkage 0,01 dan 2,0649 pada shrinkage 0,05. Dengan demikian, pada praktikum ini, penggunaan nilai shrinkage yang lebih besar memberikan keuntungan dari segi jumlah iterasi dan kualitas prediksi pada data pengujian.

   Perbedaan hasil tersebut menunjukkan bahwa pemilihan shrinkage tidak dapat ditentukan hanya berdasarkan anggapan bahwa nilai yang lebih kecil selalu menghasilkan model yang lebih baik. Kinerja akhir turut dipengaruhi oleh ukuran data, karakteristik hubungan antarvariabel, serta jumlah pohon optimal yang dipilih melalui validasi silang. Pada hasil praktikum ini, nilai galat validasi silang ketiga model relatif berdekatan, sehingga keunggulan shrinkage 0,10 tidak terlalu besar. Selain itu, evaluasi menggunakan satu pembagian data training dan testing belum cukup untuk memastikan bahwa konfigurasi yang sama akan selalu unggul pada sampel lain. Oleh sebab itu, shrinkage 0,10 dapat dipilih sebagai konfigurasi paling efisien dan berkinerja terbaik berdasarkan hasil praktikum ini, dengan tetap mempertimbangkan bahwa pengujian berulang atau validasi tambahan diperlukan untuk menilai kestabilan kinerjanya.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

   Boosting merupakan metode ensemble learning yang menggabungkan beberapa model lemah secara bertahap untuk membentuk model yang lebih kuat. Setiap model baru berusaha memperbaiki kesalahan prediksi model sebelumnya sehingga dapat meningkatkan ketepatan hasil prediksi.

   Metode Boosting dapat diimplementasikan menggunakan R untuk menyelesaikan permasalahan klasifikasi dan regresi. Pada praktikum ini, metode Gradient Boosting diterapkan pada kasus regresi melalui pembangkitan data, pembagian data training dan testing, serta pembentukan model dengan beberapa nilai shrinkage untuk memperoleh model yang optimal.

   Performa model regresi dievaluasi menggunakan MSE, RMSE, MAE, dan \(R^2\). Evaluasi juga didukung oleh grafik aktual dan prediksi, pemeriksaan residual, serta analisis variable importance untuk mengetahui ketepatan prediksi dan kontribusi setiap variabel dalam model.

   Berdasarkan hasil praktikum, metode Gradient Boosting mampu memodelkan hubungan antara variabel prediktor dan respons dengan kinerja yang cukup baik. Dari tiga nilai shrinkage yang diuji, yaitu 0,01, 0,05, dan 0,10, model dengan shrinkage 0,10 memberikan hasil terbaik pada data testing, dengan nilai MSE sebesar 4,0312, RMSE sebesar 2,0078, MAE sebesar 1,5579, dan \(R^2\) sebesar 0,8318. Model tersebut juga membutuhkan jumlah pohon paling sedikit, yaitu 212 pohon, untuk mencapai iterasi optimal. Hasil analisis variable importance menunjukkan bahwa variabel x.4 merupakan prediktor yang paling berkontribusi terhadap pembentukan model, diikuti oleh x.1 dan x.2. Dengan demikian, pada praktikum ini, shrinkage 0,10 menjadi konfigurasi yang paling efisien dan menghasilkan prediksi terbaik dibandingkan konfigurasi lainnya, meskipun pengujian tambahan masih diperlukan untuk memastikan kestabilan kinerjanya.

5.2 Saran

   Dalam membuat laporan praktikum ini penulis menyarankan untuk selalu memperhatikan sintaks pada program R yang digunakan. Selain itu, perlu untuk memperhatikan tata cara penulisan yang sesuai dengan KBBI dan penulisan yang bercetak tebal. Sehingga dapat menghasilkan laporan yang baik.

DAFTAR PUSTAKA

Amatullah, F. F., Utami, H. M., Rizqi, T. A., Wahyuni, S. T., Sartono, B., & Firdawanti, A. R. (2025). Studi komparatif metode boosting dalam pengklasifikasian penerima bantuan Program Keluarga Harapan (PKH). TELKA - Telekomunikasi, Elektronika, Komputasi dan Kontrol, 11(3), 315–326.

Firmansyah, H., & Abidin, Z. (2022). Penerapan algoritma Gradient Boosted Decision Trees pada AdaBoost untuk klasifikasi status desa. Journal of Informatics, Artificial Intelligence and Internet of Things, 1(1).

Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu

Jasman, T. Z., Fadhlullah, M. A., Pratama, A. L., & Rismayani. (2022). Analisis algoritma Gradient Boosting, Adaboost dan Catboost dalam klasifikasi kualitas air. JuTISI (Jurnal Teknik Informatika dan Sistem Informasi), 8(2).

Mawardi, A. B., Pradini, R. S., & Haris, M. S. (2025). Komparasi algoritma boosting untuk prediksi gangguan tidur. Jurnal Informatika dan Teknik Elektro Terapan, 13(3).

Muhathir, M., Pangestu, R. T., Safira, I., & Melisah, M. (2023). Performance comparison of boosting algorithms in spices classification using histogram of oriented gradient feature extraction. Journal of Computer Science, Information Technology and Telecommunication Engineering, 4(1).

Putri, E. R., & Arianto, D. B. (2024). Perbandingan performa algoritma metode bagging dan boosting pada prediksi konsentrasi PM10 di Jakarta Utara. Jurnal Nasional Teknologi dan Sistem Informasi, 10(1), 72–81.

Toharudin, T., Caraka, R. E., Pratiwi, I. R., Kim, Y., Gio, P. U., Sakti, A. D., Noh, M., Nugraha, F. A. L., Pontoh, R. S., Putri, T. H., Azzahra, T. S., Cerelia, J. J., Darmawan, G., & Pardamean, B. (2023). Boosting algorithm to handle unbalanced classification of PM2.5 concentration levels by observing meteorological parameters in Jakarta-Indonesia using AdaBoost, XGBoost, CatBoost, and LightGBM. IEEE Access.