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”.
Berdasarkan latar belakang, rumusan masalah pada penelitian ini, yaitu:
Bagaimana konsep boosting sebagai metode ensemble learning?
Bagaimana cara mengimplementasikan boosting untuk kasus klasifikasi dan regresi menggunakan R?
Bagaimana cara mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai?
Berdasarkan rumusan masalah di atas, tujuan pada penelitian ini, yaitu:
Mahasiswa dapat memahami boosting sebagai metode ensemble learning.
Mahasiswa dapat mengimplementasikan boosting untuk kasus klasifikasi dan regresi menggunakan R.
Mahasiswa dapat mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai.
Adapun manfaat pada penelitian ini, yaitu:
Dapat memberikan informasi serta pengetahuan tentang boosting menggunakan program RStudio.
Mengembangkan dan menerapkan wawasan ilmu yang telah diperoleh khususnya tentang boosting di RStudio.
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.
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
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).
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).
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).
\[ F_0(x) = \bar{y} = \frac{1}{n}\sum_{i=1}^{n} y_i \]
\[ r_{im} = y_i - F_{m-1}(x_i), \qquad i = 1, 2, \dots, n \]
Bangun pohon regresi \(h_m(x)\) dengan \(J\) wilayah terminal \(R_{jm}\) yang memprediksi \(r_{im}\) dari \(x_i\).
Hitung nilai pada setiap wilayah terminal sebagai rata-rata residual:
\[ \gamma_{jm} = \frac{1}{n_{jm}} \sum_{x_i \in R_{jm}} r_{im} \]
\[ F_m(x) = F_{m-1}(x) + \nu \sum_{j=1}^{J} \gamma_{jm} \, I(x \in R_{jm}) \]
Dengan demikian, prediksi akhir merupakan rata-rata respon ditambah akumulasi koreksi dari seluruh pohon, yang masing-masing diperkecil oleh faktor \(\nu\).
Kinerja Gradient Boosting dipengaruhi oleh beberapa parameter berikut (Friedman, 2001; Ridgeway, 2007).
Terdapat trade-off antara \(\nu\) dan \(M\): semakin kecil \(\nu\), semakin besar \(M\) yang dibutuhkan untuk mencapai kinerja optimal (Friedman, 2001).
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.
\[ MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 \]
\[ RMSE = \sqrt{MSE} \]
\[ MAE = \frac{1}{n}\sum_{i=1}^{n}\left|y_i - \hat{y}_i\right| \]
\[ 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.
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.
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.
## Loading required package: ggplot2
## Loading required package: lattice
## 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().
## '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 ...
## 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
## [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.
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
## [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.
# 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.
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².
## 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.
## 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.
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)
}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.
## 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.
# 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.
# 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.
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.
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.
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.