BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan metode statistika dan machine learning mendorong penggunaan berbagai pendekatan pemodelan untuk menghasilkan prediksi yang akurat. Salah satu pendekatan yang banyak digunakan adalah ensemble learning, yaitu metode yang menggabungkan beberapa model untuk meningkatkan kemampuan prediksi dibandingkan penggunaan satu model secara tunggal. Salah satu metode dalam ensemble learning adalah boosting, yang dikembangkan dari gagasan bahwa sekumpulan model lemah (weak learner) dapat digabungkan untuk membentuk model yang lebih kuat (Schapire, 1990).

Boosting merupakan metode ensemble yang membangun model secara berurutan (sequential), dengan setiap model baru berusaha memperbaiki kesalahan prediksi dari model sebelumnya. Berbeda dengan bagging yang membangun model secara paralel menggunakan sampel bootstrap dan terutama bertujuan mengurangi variance, boosting dilakukan secara bertahap untuk memperbaiki kemampuan model dalam menangkap pola data dan terutama mengurangi bias. Dengan demikian, proses pembentukan model pada boosting bergantung pada hasil pemodelan sebelumnya sehingga setiap tahapan berkontribusi terhadap pembentukan prediksi akhir (Hastie dkk., 2009).

Model dasar yang umum digunakan dalam metode boosting adalah pohon regresi, yaitu pohon keputusan yang membagi ruang prediktor menjadi sejumlah wilayah terminal yang saling lepas. Setiap wilayah terminal menghasilkan nilai prediksi berdasarkan observasi yang berada di dalamnya. Penggunaan pohon regresi memungkinkan model mempelajari hubungan antara variabel prediktor dan respons, termasuk pola hubungan yang tidak linier, sehingga dapat diterapkan pada berbagai permasalahan klasifikasi maupun regresi (Breiman dkk., 1984; Fransiska., 2026). Oleh karena itu pada praktikum kali ini dibahas mengenai “Boosting”.

1.2 Rumusan Masalah

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

  1. Bagaimana konsep boosting sebagai metode ensemble learning?

  2. Bagaimana cara mengimplementasikan boosting untuk kasus klasifikasi dan regresi menggunakan R?

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

1.3 Tujuan

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

  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

Adapun manfaat pada penelitian ini, yaitu:

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

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

1.5 Batasan Masalah

Batasan masalah pada penelitian ini, yaitu melakukan regresi menggunakan gradient boosting pada data Friedman.Gunakan gbm() dan bandingkan nilai learning rate (shrinkage) \(v = 0.01, 0.05, 0.10\). Gunakan cross-validation untuk menentukan jumlah iterasi optimal pada masing-masing model. Bandingkan performa berdasarkan MSE, RMSE, MAE, dan \(R^2\), kemudian interpretasikan hasilnya.

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 Boosting

Boosting adalah metode ensemble yang membangun model secara berurutan (sequential), dengan setiap model baru berusaha memperbaiki kesalahan model-model sebelumnya. Gagasan ini berawal dari pertanyaan apakah sekumpulan model lemah (weak learner), yaitu model yang kinerjanya hanya sedikit lebih baik daripada tebakan acak, dapat digabungkan menjadi model yang kuat (Schapire, 1990). Algoritma boosting praktis yang pertama dikenal luas adalah AdaBoost (Freund & Schapire, 1997), yang pada setiap iterasi memberi bobot lebih besar pada observasi yang salah diprediksi.

Berbeda dengan bagging yang membangun model secara paralel dari sampel bootstrap dan terutama menurunkan variance, boosting membangun model secara berurutan dan terutama menurunkan bias (Hastie dkk., 2009). Secara umum, model akhir boosting berbentuk penjumlahan terbobot dari \(M\) model dasar:

\[ F_M(x) = \sum_{m=1}^{M} \nu \, h_m(x) \]

dengan \(h_m(x)\) adalah model dasar ke-\(m\) dan \(\nu\) adalah konstanta pengecil (shrinkage).

2.2 Pohon Regresi sebagai Model Dasar

Model dasar yang umum digunakan pada boosting adalah pohon regresi, yaitu pohon keputusan yang memartisi ruang prediktor menjadi \(J\) wilayah terminal \(R_1, R_2, \dots, R_J\) yang saling lepas (Breiman dkk., 1984). Pada setiap wilayah, prediksi berupa konstanta, yaitu rata-rata respon pada wilayah tersebut:

\[ h(x) = \sum_{j=1}^{J} \gamma_j \, I(x \in R_j), \qquad \gamma_j = \frac{1}{n_j}\sum_{x_i \in R_j} y_i \]

dengan \(I(\cdot)\) adalah fungsi indikator dan \(n_j\) adalah jumlah observasi pada wilayah \(R_j\). Pada boosting, pohon yang digunakan sengaja dibuat dangkal (shallow tree) sehingga berperan sebagai weak learner. Kedalaman pohon dikendalikan oleh parameter interaction depth, yang menentukan tingkat interaksi antarvariabel yang dapat ditangkap model (Hastie dkk., 2009).

2.3 Gradient Boosting

Gradient Boosting memandang boosting sebagai proses optimasi pada ruang fungsi menggunakan metode penurunan gradien (gradient descent). Pada setiap iterasi, model dasar baru dibangun untuk menyesuaikan diri dengan negative gradient dari fungsi kerugian (loss function) terhadap prediksi model saat ini (Friedman, 2001). Tujuannya adalah mencari fungsi \(F(x)\) yang meminimalkan kerugian harapan:

\[ \hat{F} = \arg\min_{F} \sum_{i=1}^{n} L\big(y_i, F(x_i)\big) \]

Pada kasus regresi dengan distribusi gaussian, fungsi kerugian yang digunakan adalah squared error:

\[ L\big(y, F(x)\big) = \frac{1}{2}\big(y - F(x)\big)^2 \]

Turunan negatif fungsi kerugian ini terhadap \(F(x)\) adalah \(y - F(x)\), yaitu residual. Dengan demikian, pada regresi gaussian, setiap pohon baru dibangun untuk memprediksi residual dari model sebelumnya. Algoritma Gradient Boosting Regression adalah sebagai berikut (Friedman, 2001; Hastie dkk., 2009).

  1. Inisialisasi model dengan konstanta, yaitu rata-rata respon:

\[ F_0(x) = \bar{y} = \frac{1}{n}\sum_{i=1}^{n} y_i \]

  1. Untuk \(m = 1, 2, \dots, M\):
  1. Hitung residual (pseudo-residual) untuk setiap observasi:

\[ r_{im} = y_i - F_{m-1}(x_i), \qquad i = 1, 2, \dots, n \]

  1. Bangun pohon regresi \(h_m(x)\) dengan \(J\) wilayah terminal \(R_{jm}\) yang memprediksi \(r_{im}\) dari \(x_i\).

  2. Hitung nilai pada setiap wilayah terminal sebagai rata-rata residual:

\[ \gamma_{jm} = \frac{1}{n_{jm}} \sum_{x_i \in R_{jm}} r_{im} \]

  1. Perbarui model:

\[ F_m(x) = F_{m-1}(x) + \nu \sum_{j=1}^{J} \gamma_{jm} \, I(x \in R_{jm}) \]

  1. Prediksi akhir adalah \(\hat{f}(x) = F_M(x)\).

Dengan demikian, prediksi akhir merupakan rata-rata respon ditambah akumulasi koreksi dari seluruh pohon, yang masing-masing diperkecil oleh faktor \(\nu\).

2.4 Parameter Gradient Boosting

Kinerja Gradient Boosting dipengaruhi oleh beberapa parameter berikut (Friedman, 2001; Ridgeway, 2007).

  1. Shrinkage (\(\nu\)), atau learning rate, berada pada interval \(0 < \nu \leq 1\) dan mengatur kontribusi setiap pohon terhadap model akhir. Nilai \(\nu\) yang kecil membuat proses belajar lebih lambat sehingga memerlukan lebih banyak pohon, tetapi umumnya menghasilkan kinerja prediksi yang lebih baik dan lebih tahan terhadap overfitting (Friedman, 2001; James dkk., 2021).
  2. Jumlah pohon (\(M\)) menentukan jumlah iterasi boosting. Berbeda dengan bagging, jumlah pohon yang terlalu banyak pada boosting dapat menyebabkan overfitting, sehingga nilainya perlu dipilih secara hati-hati.
  3. Interaction depth (\(d\)) adalah kedalaman maksimum setiap pohon, yang menentukan tingkat interaksi antarvariabel yang dapat ditangkap. Pohon dengan \(d = 1\) (stump) menghasilkan model aditif tanpa interaksi.
  4. Minimum observations in node (\(n.minobsinnode\)) adalah jumlah observasi minimum pada simpul terminal, yang membatasi kompleksitas pohon.
  5. Bag fraction (\(\eta\)) adalah proporsi data latih yang diambil secara acak tanpa pengembalian untuk membangun setiap pohon, seperti dijelaskan pada subbab berikutnya.

Terdapat trade-off antara \(\nu\) dan \(M\): semakin kecil \(\nu\), semakin besar \(M\) yang dibutuhkan untuk mencapai kinerja optimal (Friedman, 2001).

2.5 Ukuran Evaluasi Model

Kinerja model regresi pada data testing dievaluasi menggunakan beberapa ukuran berikut (Hastie dkk., 2009; James dkk., 2021). Misalkan \(y_i\) adalah nilai aktual, \(\hat{y}_i\) nilai prediksi, dan \(n\) jumlah observasi data testing.

  1. Mean Squared Error (MSE):

\[ MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 \]

  1. Root Mean Squared Error (RMSE):

\[ RMSE = \sqrt{MSE} \]

  1. Mean Absolute Error (MAE):

\[ MAE = \frac{1}{n}\sum_{i=1}^{n}\left|y_i - \hat{y}_i\right| \]

  1. Koefisien determinasi (\(R^2\)):

\[ R^2 = 1 - \frac{\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}{\sum_{i=1}^{n}(y_i - \bar{y})^2} \]

Nilai MSE, RMSE, dan MAE yang lebih kecil serta \(R^2\) yang lebih besar menunjukkan kinerja model yang lebih baik.

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 nilai shrinkage (learning rate)
  4. Membangun model gradient boosting regression
  5. Menentukan jumlah iterasi optimal dan menampilkan cross-validation error
  6. Melakukan perbandingan data aktual dan prediksi
  7. Membuat visualisasi data aktual dan prediksi
  8. Evaluasi model
  9. Pemilihan model terbaik
  10. Menampilkan variable importance model terbaik

BAB IV HASIL DAN PEMBAHASAN

4.1 Library

library(mlbench)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
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

Package yang digunakan terdiri atas mlbench untuk membangkitkan data Friedman, caret untuk membagi data menjadi training dan testing melalui fungsi createDataPartition(), dan gbm untuk membangun model Gradient Boosting Regression melalui fungsi gbm().

4.2 Data

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

# Struktur 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 ...
# Informasi statistik deskriptif
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
# Dimensi data
dim(reg.data)
## [1] 200  11

Data dibangkitkan menggunakan fungsi mlbench.friedman1() dengan jumlah observasi sebanyak 200. Data 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. Berdasarkan output, variabel respon y memiliki nilai minimum 3,082, median 13,810, rata-rata 14,270, dan maksimum 26,146. Seluruh variabel bertipe numerik dan tidak ada nilai hilang.

4.3 Splitting Data

set.seed(234)

# Pembagian data: 70% training dan 30% testing
idx.reg <- createDataPartition(reg.data$y, p = 0.70, list = FALSE)

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

# Memeriksa ukuran data
dim(reg.train)
## [1] 140  11
dim(reg.test)
## [1] 60 11

Pembagian data dilakukan dengan proporsi 70% untuk data training dan 30% untuk data testing. Berdasarkan output, data training terdiri atas 140 observasi, sedangkan data testing terdiri atas 60 observasi. Data training digunakan untuk membangun model Gradient Boosting, sedangkan data testing digunakan untuk mengevaluasi kemampuan model memprediksi data baru.

4.4 Menentukan Nilai Shrinkage

# Nilai learning rate yang akan dibandingkan
shrinkage.val <- c(0.01, 0.05, 0.10)

# Tempat penyimpanan hasil
model.gbm      <- list()
hasil.evaluasi <- data.frame()
hasil.prediksi <- data.frame(Aktual = reg.test$y)
hasil.cv       <- data.frame()

Gradient Boosting membangun pohon regresi secara berurutan, dengan setiap pohon baru memperbaiki error (residual) dari pohon-pohon sebelumnya. Parameter shrinkage (learning rate) mengatur seberapa besar kontribusi setiap pohon terhadap model akhir. Nilai shrinkage yang kecil membuat proses belajar lebih lambat dan memerlukan lebih banyak pohon, tetapi umumnya lebih stabil dan tidak mudah overfitting. Pada tahap ini ditetapkan tiga nilai shrinkage, yaitu 0,01; 0,05; dan 0,10. Objek model.gbm, hasil.evaluasi, hasil.prediksi, dan hasil.cv disiapkan untuk menyimpan model, metrik evaluasi, hasil prediksi, serta hasil validasi silang dari setiap percobaan.

4.5 Membangun Model Gradient Boosting Regression

for (lr in shrinkage.val) {

  set.seed(234)
  nama.model <- as.character(lr)

  model <- gbm(
    formula           = y ~ .,
    data              = reg.train,
    distribution      = "gaussian",
    n.trees           = 5000,
    interaction.depth = 2,
    shrinkage         = lr,
    bag.fraction      = 0.5,
    cv.folds          = 10,
    n.minobsinnode    = 5,
    verbose           = FALSE)

  model.gbm[[nama.model]] <- model

  # Menentukan jumlah iterasi optimal berdasarkan CV
  best.iter <- gbm.perf(model, method = "cv", plot.it = FALSE)

  cat("\nLearning rate:", lr, "\n")
  cat("Jumlah iterasi optimal:", best.iter, "\n")

  # Menyimpan nilai CV error pada iterasi optimal
  cv.error <- model$cv.error[best.iter]

  hasil.cv <- rbind(
    hasil.cv,
    data.frame(Shrinkage = lr,
               Iterasi_Optimal = best.iter,
               CV_Error = cv.error))

  # Prediksi pada data testing
  pred <- predict(model, newdata = reg.test,
                  n.trees = best.iter, type = "response")

  aktual <- reg.test$y

  # Menghitung metrik evaluasi
  MSE  <- mean((aktual - pred)^2)
  RMSE <- sqrt(MSE)
  MAE  <- mean(abs(aktual - pred))
  R2   <- 1 - sum((aktual - pred)^2) /
    sum((aktual - mean(aktual))^2)

  # Menyimpan hasil evaluasi
  hasil.evaluasi <- rbind(
    hasil.evaluasi,
    data.frame(Shrinkage = lr, Iterasi_Optimal = best.iter,
               MSE = MSE, RMSE = RMSE, MAE = MAE, R2 = R2))

  # Menyimpan hasil prediksi setiap model
  hasil.prediksi[[paste0("Prediksi_", nama.model)]] <- pred
}
## 
## Learning rate: 0.01 
## Jumlah iterasi optimal: 4548 
## 
## Learning rate: 0.05 
## Jumlah iterasi optimal: 1340 
## 
## Learning rate: 0.1 
## Jumlah iterasi optimal: 279

Model dibangun menggunakan fungsi gbm() dengan formula y ~ . dan distribution = “gaussian” karena respon bersifat kontinu. Jumlah pohon maksimum ditetapkan 5000 dengan interaction.depth = 2 (kedalaman setiap pohon), bag.fraction = 0,5 (setiap pohon dibangun dari 50% data training yang diambil secara acak), dan n.minobsinnode = 5 (jumlah observasi minimum pada simpul terminal). Argumen cv.folds = 10 meminta validasi silang 10 lipatan untuk menentukan jumlah iterasi optimal melalui gbm.perf(). Fungsi set.seed(234) dipanggil sebelum setiap model dibentuk agar hasil dapat direproduksi. Untuk setiap nilai shrinkage, model dengan jumlah iterasi optimal digunakan memprediksi data testing, lalu dihitung empat metrik: MSE, RMSE, Mean Absolute Error (MAE), dan R².

4.6 Iterasi Optimal dan Cross-Validation Error

print(hasil.cv)
##   Shrinkage Iterasi_Optimal CV_Error
## 1      0.01            4548 3.429217
## 2      0.05            1340 3.306744
## 3      0.10             279 3.452356

Berdasarkan output, semakin kecil nilai shrinkage, semakin banyak iterasi yang dibutuhkan untuk mencapai kondisi optimal. Shrinkage 0,01 membutuhkan 4.548 iterasi dengan CV error 3,4292. Shrinkage 0,05 membutuhkan 1.340 iterasi dengan CV error 3,3067. Shrinkage 0,10 hanya membutuhkan 279 iterasi dengan CV error 3,4524. Berdasarkan CV error pada data training, shrinkage 0,05 memberikan nilai terkecil. Namun, selisih ketiganya relatif kecil, sehingga pemilihan model akhir tetap perlu memperhatikan kinerja pada data testing.

4.7 Hasil Aktual dan Prediksi

print(head(hasil.prediksi, 10))
##       Aktual Prediksi_0.01 Prediksi_0.05 Prediksi_0.1
## 1  10.232309      11.56027      11.70502     12.11600
## 2  11.845301      10.84641      11.12036     10.65010
## 3  10.335689      11.72614      12.37693     11.30050
## 4  16.727262      14.22249      13.72651     14.30391
## 5  25.077119      22.35445      21.65114     21.47132
## 6  15.446886      14.67262      14.59390     13.78381
## 7  15.642915      14.22519      14.39527     15.43792
## 8   7.110835      11.64483      12.16709     11.03670
## 9  13.351277      15.57232      15.63407     15.77944
## 10 12.871960      14.41281      13.94148     14.01359

Tabel ini membandingkan nilai aktual dengan prediksi dari ketiga model pada 10 observasi pertama data testing. Secara umum, prediksi ketiga model saling mirip dan mengikuti pola nilai aktual. Namun, model kurang akurat pada nilai ekstrem. Pada observasi ke-5 (aktual 25,08), prediksi hanya sekitar 21,5 sampai 22,4, sehingga nilai tinggi diprediksi terlalu rendah. Sebaliknya, pada observasi ke-8 (aktual 7,11), prediksi sekitar 11,0 sampai 12,2, sehingga nilai rendah diprediksi terlalu tinggi. Pola ini menunjukkan kecenderungan prediksi tertarik ke arah nilai tengah.

4.8 Visualisasi Aktual dan Prediksi

plot(reg.test$y, type = "l", lwd = 2, col = "black",
     xlab = "Observasi", ylab = "Nilai Y",
     main = "Perbandingan Gradient Boosting Regression")
lines(hasil.prediksi$Prediksi_0.01, col = "blue",      lty = 2, lwd = 2)
lines(hasil.prediksi$Prediksi_0.05, col = "red",       lty = 3, lwd = 2)
lines(hasil.prediksi$Prediksi_0.1,  col = "darkgreen", lty = 4, lwd = 2)
legend("topright",
       legend = c("Aktual", "Shrinkage 0.01",
                  "Shrinkage 0.05", "Shrinkage 0.10"),
       col = c("black", "blue", "red", "darkgreen"),
       lty = c(1, 2, 3, 4), lwd = 2, cex = 0.8)

Grafik garis menampilkan nilai aktual (garis hitam) bersama prediksi dari ketiga model. Ketiga garis prediksi saling berdekatan dan mengikuti pola naik-turun nilai aktual. Seperti pada tabel prediksi, garis aktual memiliki puncak dan lembah yang lebih tajam daripada garis prediksi, sehingga nilai-nilai ekstrem kurang mampu ditangkap oleh model.

par(mfrow = c(1, 3))

for (lr in shrinkage.val) {
  kolom.pred <- paste0("Prediksi_", as.character(lr))
  plot(reg.test$y, hasil.prediksi[[kolom.pred]],
       pch = 19,
       xlab = "Nilai Aktual", ylab = "Nilai Prediksi",
       main = paste("Shrinkage =", lr))
  abline(a = 0, b = 1, lty = 2, lwd = 2)
}

par(mfrow = c(1, 1))

Scatter plot membandingkan nilai aktual dengan nilai prediksi untuk setiap shrinkage, dengan garis putus-putus sebagai garis ideal (prediksi = aktual). Pada ketiga model, titik-titik menyebar mengikuti garis tersebut dan membentuk pola linear positif, yang menunjukkan bahwa model mampu menangkap hubungan antara prediktor dan respon. Sebaran titik pada shrinkage 0,01 tampak sedikit lebih rapat di sekitar garis dibandingkan dua model lainnya. Pada nilai aktual yang rendah (di bawah 10), banyak titik berada di atas garis sehingga prediksi terlalu tinggi, sedangkan pada nilai aktual yang tinggi (di atas 20), titik cenderung berada di bawah garis sehingga prediksi terlalu rendah.

4.9 Evaluasi Model

print(round(hasil.evaluasi, 4))
##   Shrinkage Iterasi_Optimal    MSE   RMSE    MAE     R2
## 1      0.01            4548 3.8064 1.9510 1.5352 0.8412
## 2      0.05            1340 4.3347 2.0820 1.6477 0.8192
## 3      0.10             279 4.1633 2.0404 1.5908 0.8263

Berdasarkan output, model dengan shrinkage 0,01 menghasilkan MSE 3,8064, RMSE 1,9510, MAE 1,5352, dan R² 0,8412. Model dengan shrinkage 0,05 menghasilkan MSE 4,3347, RMSE 2,0820, MAE 1,6477, dan R² 0,8192. Model dengan shrinkage 0,10 menghasilkan MSE 4,1633, RMSE 2,0404, MAE 1,5908, dan R² 0,8263. Nilai R² sekitar 0,82 sampai 0,84 menunjukkan bahwa model mampu menjelaskan sekitar 82% sampai 84% keragaman nilai y pada data testing. Model dengan shrinkage paling kecil (0,01) unggul pada seluruh metrik. Perlu dicatat bahwa urutan ini berbeda dengan urutan CV error pada data training, dan selisih antarmodel relatif kecil sehingga dapat dipengaruhi oleh jumlah data testing yang hanya 60 observasi.

4.10 Pemilihan Model Terbaik

# Mengurutkan model berdasarkan MSE terkecil
hasil.evaluasi <- hasil.evaluasi[order(hasil.evaluasi$MSE), ]
print(round(hasil.evaluasi, 4))
##   Shrinkage Iterasi_Optimal    MSE   RMSE    MAE     R2
## 1      0.01            4548 3.8064 1.9510 1.5352 0.8412
## 3      0.10             279 4.1633 2.0404 1.5908 0.8263
## 2      0.05            1340 4.3347 2.0820 1.6477 0.8192

Pemilihan model terbaik dilakukan berdasarkan nilai MSE terkecil pada data testing. Berdasarkan output, urutan model dari yang terbaik adalah shrinkage 0,01 (MSE 3,8064), kemudian 0,10 (MSE 4,1633), dan terakhir 0,05 (MSE 4,3347). Dengan demikian, model terbaik adalah Gradient Boosting Regression dengan shrinkage 0,01 dan 4.548 iterasi. Hasil ini sejalan dengan prinsip bahwa learning rate yang kecil dengan jumlah pohon yang banyak cenderung menghasilkan model yang lebih halus dan akurat.

4.11 Variable Importance

# Model terbaik
lr.terbaik    <- hasil.evaluasi$Shrinkage[1]
model.terbaik <- model.gbm[[as.character(lr.terbaik)]]
iter.terbaik  <- hasil.evaluasi$Iterasi_Optimal[1]

importance.gbm <- summary(model.terbaik,
                          n.trees = iter.terbaik,
                          plotit = FALSE)

print(importance.gbm)
##       var    rel.inf
## x.4   x.4 31.8034913
## x.1   x.1 24.8424185
## x.2   x.2 15.9239271
## x.3   x.3 12.0404452
## x.5   x.5  7.2941084
## x.6   x.6  2.2957904
## x.7   x.7  1.7651566
## x.10 x.10  1.5857900
## x.9   x.9  1.5292022
## x.8   x.8  0.9196703
barplot(importance.gbm$rel.inf,
        names.arg = importance.gbm$var,
        las = 2,
        main = paste("Variable Importance - Shrinkage", lr.terbaik),
        ylab = "Relative Influence")

Variable importance menunjukkan seberapa besar kontribusi setiap prediktor dalam mengurangi error model. Berdasarkan output, variabel x.4 memiliki pengaruh relatif terbesar (31,80), diikuti x.1 (24,84), x.2 (15,92), x.3 (12,04), dan x.5 (7,29). Kelima variabel ini secara total menyumbang sekitar 91,9% pengaruh model. Variabel x.6 sampai x.10 hanya memiliki pengaruh relatif antara 0,92 sampai 2,30, dengan total sekitar 8,1%. Hasil ini sesuai dengan struktur data Friedman, karena hanya x.1 sampai x.5 yang benar-benar membentuk variabel respon, sedangkan x.6 sampai x.10 adalah variabel noise. Model Gradient Boosting dengan demikian berhasil membedakan variabel yang berpengaruh dari variabel noise.

BAB V KESIMPULAN

5.1 Kesimpulan

Metode boosting merupakan salah satu teknik ensemble learning yang menggabungkan beberapa model lemah (weak learners) secara bertahap untuk membentuk model prediksi yang lebih kuat. Setiap model baru dibangun untuk memperbaiki kesalahan model sebelumnya sehingga kemampuan prediksi dapat meningkat. Metode boosting yang umum digunakan antara lain AdaBoost untuk klasifikasi dan Gradient Boosting untuk klasifikasi maupun regresi.

Implementasi boosting menggunakan R dapat dilakukan dengan paket adabag untuk membangun model AdaBoost pada kasus klasifikasi dan paket gbm untuk menerapkan Gradient Boosting pada kasus regresi. Pada klasifikasi, model dilatih untuk memprediksi kategori respons, sedangkan pada regresi model digunakan untuk memprediksi nilai numerik. Parameter seperti jumlah iterasi dan learning rate dapat disesuaikan untuk memperoleh model yang optimal.

Evaluasi performa model dilakukan menggunakan ukuran yang sesuai dengan jenis analisis. Pada klasifikasi, evaluasi dapat menggunakan accuracy, precision, recall, specificity, dan F1-score. Sementara itu, pada regresi, evaluasi dapat menggunakan MSE, RMSE, MAE, dan (\(R^2\)). Model dengan kesalahan prediksi lebih rendah dan nilai ukuran evaluasi yang lebih baik menunjukkan performa yang lebih baik pada data pengujian.

Model Gradient Boosting Regression dengan \(shrinkage = 0{,}01;\ 0{,}05;\ 0{,}10\) menghasilkan kinerja prediksi yang cukup baik pada data testing, dengan nilai \(R^²\) berkisar antara 0,8192 sampai 0,8412. Model dengan shrinkage 0,01 memberikan MSE terkecil sebesar 3,8064, sedangkan model dengan shrinkage 0,05 memiliki MSE terbesar sebesar 4,3347. Selisih MSE antara keduanya sekitar 13,9%, namun model dengan shrinkage 0,01 membutuhkan iterasi yang jauh lebih banyak (4548 iterasi) dibandingkan shrinkage 0,05 (1340 iterasi) dan 0,10 (279 iterasi). Selain itu, model cenderung kurang akurat pada nilai ekstrem karena prediksi ditarik ke arah nilai tengah. Analisis variable importance menunjukkan bahwa \(x4\), \(x1\), \(x2\), \(x3\), dan \(x5\) merupakan variabel yang paling berpengaruh, sedangkan variabel lainnya memiliki pengaruh yang kecil, sesuai dengan struktur data Friedman. Dengan demikian, Gradient Boosting Regression dengan shrinkage 0,01 dipilih sebagai model terbaik karena memberikan kinerja prediksi yang paling baik pada data testing.

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., Friedman, J. H., Olshen, R. A., & Stone, C. J. (1984). Classification and Regression Trees. Wadsworth.

Fransiska, H. (2026). Modul Praktikum Machine Learning. Bengkulu: Laboratorium Statistika FMIPA Universitas Bengkulu.

Freund, Y., & Schapire, R. E. (1997). A decision-theoretic generalization of on-line learning and an application to boosting. Journal of Computer and System Sciences, 55(1), 119–139.

Friedman, J. H. (2001). Greedy function approximation: A gradient boosting machine. The Annals of Statistics, 29(5), 1189–1232.

Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). Springer.

James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An Introduction to Statistical Learning with Applications in R (2nd ed.). Springer.

Ridgeway, G. (2007). Generalized Boosted Models: A Guide to the gbm Package. R package vignette.

Schapire, R. E. (1990). The strength of weak learnability. Machine Learning, 5(2), 197–227.