Perkembangan machine learning mendorong penggunaan berbagai metode pemodelan untuk menghasilkan prediksi yang akurat berdasarkan pola dalam data. Salah satu pendekatan yang dapat digunakan adalah ensemble learning, yaitu teknik yang menggabungkan beberapa model pembelajaran untuk membentuk model gabungan yang lebih kuat. Pendekatan ini mencakup beberapa metode, di antaranya bagging, boosting, dan stacking, yang memiliki mekanisme pembentukan serta penggabungan model yang berbeda. Boosting memiliki karakteristik berupa pembentukan model secara berurutan dengan tujuan memperbaiki kesalahan yang masih dihasilkan oleh model sebelumnya. Oleh karena itu, pemahaman terhadap konsep Boosting diperlukan untuk mengetahui bagaimana penggabungan sejumlah model sederhana dapat digunakan dalam proses prediksi (Mohammed & Kora, 2023).
Boosting dapat diterapkan pada permasalahan klasifikasi maupun regresi dengan menyesuaikan algoritma terhadap karakteristik variabel respons. Pada klasifikasi, Adaptive Boosting (AdaBoost) mengatur bobot observasi agar data yang salah diklasifikasikan memperoleh perhatian lebih besar pada tahap pembelajaran berikutnya. Sementara itu, pada regresi, Gradient Boosting membentuk model secara bertahap dengan mempelajari kesalahan prediksi atau residual dari model sebelumnya. Kedua pendekatan tersebut memiliki mekanisme yang berbeda, tetapi sama-sama bertujuan memperbaiki kemampuan prediksi melalui penambahan weak learner secara berurutan. Dengan demikian, pemahaman mengenai AdaBoost dan Gradient Boosting penting untuk mengenali penerapan Boosting pada jenis permasalahan yang berbeda (Gunasekara et al., 2024).
Pembentukan model Boosting perlu disertai evaluasi untuk mengetahui kemampuan model dalam memprediksi data yang belum digunakan pada proses pelatihan. Evaluasi klasifikasi dapat dilakukan menggunakan confusion matrix, accuracy, precision, recall, specificity, dan F1-score, sedangkan evaluasi regresi dapat menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). Selain ukuran evaluasi, pemilihan jumlah learner, learning rate, dan kompleksitas pohon juga perlu diperhatikan karena dapat memengaruhi hasil pemodelan. Oleh sebab itu, praktikum Boosting dilaksanakan untuk memahami konsep dan implementasi AdaBoost serta Gradient Boosting menggunakan bahasa pemrograman R, melakukan prediksi, dan mengevaluasi kinerja model berdasarkan ukuran yang sesuai dengan jenis permasalahannya (Sujon et al., 2025; Gunasekara et al., 2024).
Berdasarkan latar belakang di atas dapat disimpulkan bahwa rumusan masalah sebagai berikut:
Bagaimana mahasiswa mampu memahami Boosting sebagai metode ensemble learning?
Bagaimana mahasiswa mampu mengimplementasikan Boosting untuk kasus klasifikasi dan regresi menggunakan R?
Bagaimana mahasiswa mampu mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai?
Berdasarkan rumusan masalah di atas, tujuan penelitian yang dapat disimpulkan sebagai berikut:
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 yang didapatkan dari penelitian ini adalah sebagai berikut:
Bagi penulis
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.
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.
Bagi pembaca
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.
Dapat menjadi rujukan bagi penelitian selanjutnya.
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.
Adapun sistematika penulisan dari pratikum ini adalah sebagai berikut:
BAB I — PENDAHULUAN
Bab ini merupakan bab yang memuat latar belakang penelitian, rumusan masalah, tujuan dan manfaat penelitian, batasan masalah penelitian, dan sistematika penelitian.
BAB II — TINJAUAN PUSTAKA
Bab ini merupakan bab yang memuat pengertian dari teori yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.
BAB III — METODE PENELITIAN
Bab ini merupakan bab yang memuat uraian mengenai jenis dan sumber penelitian, variabel penelitian, dan analisis data.
BAB IV — HASIL DAN PEMBAHASAN
Bab ini merupakan bab yang memuat hasil analisis, pembahasan dari hasil yang telah diperoleh, dan interprretasi.
BAB V — KESIMPULAN DAN SARAN
Bab ini merupakan bab yang memuat rangkuman dari hasil keseluruhan dan saran yang diberikan oleh penulis terhadap hasil maupun analisis yang telah dilakukan.
Ensemble Learning merupakan pendekatan dalam machine learning yang menggabungkan hasil dari beberapa model pembelajaran dasar (base learner) untuk menghasilkan prediksi akhir. Setiap model dapat memberikan hasil yang berbeda karena pola yang dipelajari dan kesalahan prediksinya tidak selalu sama. Penggabungan beberapa model diharapkan menghasilkan prediksi yang lebih baik dibandingkan penggunaan satu model saja, meskipun peningkatan kinerja tetap bergantung pada karakteristik data dan cara penggabungan model. Secara umum, metode ensemble learning meliputi bagging, boosting, dan stacking. Ketiganya berbeda dalam cara membangun model dasar dan menggabungkan hasil prediksi, sehingga pemilihan metode perlu disesuaikan dengan tujuan pemodelan (Mienye & Sun, 2022). Bagging membentuk banyak model dari sampel bootstrap dan kemudian menggabungkan hasil prediksinya. Boosting memiliki tujuan yang sama, yaitu meningkatkan performa prediksi melalui gabungan beberapa model, tetapi cara model-model tersebut dibentuk berbeda secara mendasar. Perbedaan cara pembentukan model inilah yang menjadi karakter utama Boosting dan membedakannya dari Bagging (Fransiska, 2026).
Boosting merupakan metode ensemble learning yang membangun model secara berurutan (sequential). Pada setiap tahap, model baru dibentuk dengan memanfaatkan informasi dari hasil pembelajaran sebelumnya agar kesalahan prediksi dapat diperbaiki secara bertahap. Model dasar yang digunakan disebut weak learner, yaitu model yang kemampuan prediksinya relatif terbatas ketika digunakan secara mandiri. Sejumlah weak learner kemudian digabungkan untuk membentuk model akhir yang lebih kuat. Pada Boosting berbasis pohon, decision tree dengan kedalaman terbatas dapat digunakan sebagai weak learner. Mekanisme pembelajaran yang berurutan menjadi ciri utama Boosting sekaligus membedakannya dari bagging, yang membentuk model-model dasar secara relatif independen (Gunasekara et al., 2024).
Adaptive Boosting atau AdaBoost merupakan algoritma Boosting yang dapat digunakan untuk menyelesaikan masalah klasifikasi. Prinsip utamanya adalah menyesuaikan bobot observasi berdasarkan hasil klasifikasi pada setiap iterasi. Pada awal pembelajaran, seluruh observasi diberikan bobot yang sama. Setelah model dasar dibentuk, kesalahan klasifikasi dihitung dengan mempertimbangkan bobot masing-masing observasi. Observasi yang salah diklasifikasikan kemudian memperoleh bobot lebih besar sehingga model berikutnya memberikan perhatian lebih terhadap observasi tersebut. Selain bobot observasi, AdaBoost juga menentukan bobot setiap learner berdasarkan kinerja klasifikasinya. Prediksi akhir diperoleh melalui penggabungan prediksi berbobot dari seluruh learner. Dalam penerapan berbasis pohon, decision stump, yaitu pohon keputusan dengan kedalaman satu, dapat digunakan sebagai model dasar yang sederhana (Novianti et al., 2022).
Gradient Boosting merupakan metode Boosting yang membangun model secara bertahap dengan mengoptimalkan fungsi kerugian (loss function). Dalam permasalahan regresi, proses pembelajaran dapat dijelaskan melalui residual, yaitu selisih antara nilai aktual dan nilai prediksi model. Residual menunjukkan bagian variasi respons yang belum dapat dijelaskan oleh prediksi sebelumnya. Model baru dibentuk untuk mempelajari pola kesalahan tersebut, kemudian kontribusinya ditambahkan ke model yang telah terbentuk. Proses ini diulang sampai jumlah iterasi tertentu atau sampai diperoleh kinerja model yang sesuai. Besarnya kontribusi model baru diatur melalui parameter learning rate atau shrinkage. Nilai learning rate yang lebih kecil membuat penambahan kontribusi berlangsung lebih bertahap dan umumnya memerlukan lebih banyak iterasi pembelajaran (Boldini et al., 2023).
Klasifikasi dan regresi merupakan dua jenis permasalahan prediksi yang dibedakan berdasarkan bentuk variabel responsnya. Klasifikasi digunakan ketika respons berupa kategori, sedangkan regresi digunakan ketika respons berupa nilai numerik. AdaBoost digunakan untuk klasifikasi, dengan fokus pada perbaikan kesalahan pengelompokan kelas. Gradient Boosting digunakan untuk regresi, dengan fokus pada pembelajaran kesalahan prediksi numerik. Meskipun mekanisme keduanya berbeda, kedua algoritma menerapkan prinsip pembentukan model secara berurutan dan penggabungan kontribusi beberapa learner. Pemilihan algoritma dan ukuran evaluasi harus mempertimbangkan tujuan analisis serta karakteristik respons yang diprediksi (Mienye & Sun, 2022; Gunasekara et al., 2024).
Kinerja model Boosting dipengaruhi oleh sejumlah parameter, terutama jumlah learner atau iterasi, learning rate, dan kompleksitas model dasar. Jumlah iterasi menentukan banyaknya model yang ditambahkan ke dalam gabungan, sedangkan learning rate mengatur besarnya kontribusi setiap model baru. Kompleksitas pohon, misalnya kedalaman pohon keputusan, menentukan tingkat kerumitan pola yang dapat dipelajari oleh masing-masing learner. Jumlah iterasi yang terlalu sedikit atau model dasar yang terlalu sederhana dapat menyebabkan underfitting, sedangkan model yang terlalu kompleks berisiko mengalami overfitting. Oleh karena itu, pemilihan parameter perlu dilakukan secara cermat. Dalam Gradient Boosting, cross-validation dapat digunakan untuk membantu menentukan jumlah iterasi yang optimal berdasarkan kinerja model pada data validasi (Boldini et al., 2023).
Evaluasi model merupakan proses untuk mengukur kesesuaian hasil prediksi terhadap nilai aktual pada data pengujian (testing). Pada klasifikasi, confusion matrix merangkum jumlah prediksi benar dan salah berdasarkan kelas aktual dan kelas prediksi. Berdasarkan matriks tersebut, accuracy mengukur proporsi seluruh prediksi yang benar, precision mengukur proporsi prediksi positif yang benar, recall mengukur proporsi data positif aktual yang berhasil dikenali, specificity mengukur proporsi data negatif aktual yang berhasil dikenali, sedangkan F1-score merupakan rata-rata harmonik antara precision dan recall. Penggunaan ukuran yang berbeda diperlukan karena setiap ukuran menggambarkan aspek kinerja klasifikasi yang berbeda (Sujon et al., 2025).
Pada regresi, evaluasi dilakukan dengan membandingkan nilai aktual dan nilai prediksi numerik. Mean Squared Error (MSE) merupakan rata-rata kuadrat kesalahan prediksi, sedangkan Root Mean Squared Error (RMSE) merupakan akar kuadrat dari MSE. Mean Absolute Error (MAE) mengukur rata-rata nilai absolut kesalahan prediksi, sementara koefisien determinasi (\(R^2\)) menggambarkan kemampuan model dalam menjelaskan variasi respons berdasarkan perhitungan yang digunakan. Nilai MSE, RMSE, dan MAE yang lebih kecil pada data evaluasi umumnya menunjukkan kesalahan prediksi yang lebih rendah. Adapun interpretasi \(R^2\) perlu mempertimbangkan cara perhitungannya dan karakteristik data yang digunakan. Dengan menggunakan ukuran evaluasi yang sesuai, kinerja Gradient Boosting dapat dinilai secara lebih menyeluruh (Gunasekara et al., 2024; Boldini et al., 2023).
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.
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.
Langkah-langkah yang digunakan pada penelitian untuk batasan masalah adalah sebagai berikut:
Membangkitkan data Friedman sebanyak 200 observasi menggunakan
fungsi mlbench.friedman1().
Memeriksa struktur dan kualitas data, meliputi tipe variabel, statistik deskriptif, nilai hilang, dan duplikasi.
Menggunakan fungsi gbm() dengan
distribution = "gaussian".
Membandingkan tiga nilai learning rate atau shrinkage.
0,01
0,05
0,10
Menggunakan 10-fold cross-validation pada setiap model.
Menentukan jumlah iterasi optimal dengan gbm.perf(…,
method = “cv”).
Menghitung MSE, RMSE, MAE, dan R2.
Membandingkan performa ketiga model.
Menganalisis grafik error cross-validation, aktual versus prediksi, residual, dan variable importance
library(gbm)
library(mlbench)
library(caret)
# 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
Tahapan analisis gradient boosting dimulai dengan memuat paket gbm, mlbench, dan caret yang berfungsi untuk membangun model boosting, menyediakan dataset, serta mendukung pengolahan dan pembagian data. Perintah set.seed(234) diterapkan untuk menetapkan nilai awal proses acak sehingga hasil analisis dapat direproduksi. Dataset kemudian dibentuk untuk menghasilkan data Friedman #1 dengan 200 observasi dalam format data frame. Dataset ini memiliki 11 variabel, yang terdiri atas 10 variabel prediktor (x1 hingga x10) dan satu variabel respons (y) berskala numerik. Hasil pemeriksaan melalui str(reg.data) menunjukkan bahwa seluruh variabel bertipe numerik sehingga sesuai untuk digunakan dalam analisis regresi.
Ringkasan statistik yang diperoleh mencakup nilai minimum, kuartil pertama, median, rata-rata, kuartil ketiga, dan maksimum dari setiap variabel. Variabel prediktor x1 hingga x10 memiliki nilai minimum antara 0,001198 dan 0,01021 serta nilai maksimum antara 0,993044 dan 0,999850. Rentang tersebut menunjukkan bahwa nilai seluruh prediktor berada di antara nilai yang mendekati 0 dan 1. Variabel respons y memiliki nilai minimum 3,082, kuartil pertama 10,593, median 13,810, rata-rata 14,270, kuartil ketiga 18,063, dan maksimum 26,146. Nilai rata-rata yang sedikit lebih tinggi daripada median mengindikasikan kemungkinan distribusi respons menceng ke kanan, tetapi bentuk distribusinya belum dapat dipastikan hanya dari statistik tersebut. Pemeriksaan menggunakan dim(reg.data) menghasilkan ukuran 200 baris dan 11 kolom, yang menegaskan jumlah observasi dan variabel dalam dataset. Hasil pemeriksaan ini menunjukkan bahwa dataset Friedman #1 telah berhasil dibuat dan siap digunakan pada tahap pembagian data training dan testing, pembentukan model Gradient Boosting, serta evaluasi kinerja model regresi.
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
Dataset Friedman #1 yang terdiri atas 200 observasi dibagi menjadi data training dan data testing dengan proporsi 70% dan 30%. Hasil pembagian menunjukkan bahwa data training mencakup 140 observasi dengan 11 variabel, sedangkan data testing terdiri atas 60 observasi dengan 11 variabel. Sebanyak 140 observasi digunakan untuk membentuk model Gradient Boosting, sementara 60 observasi lainnya dimanfaatkan untuk menguji dan mengevaluasi kemampuan prediksi model pada data yang tidak digunakan selama proses pelatihan. Pembagian tersebut memungkinkan penilaian kinerja model dilakukan secara terpisah dari proses pembentukan model.
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.
Hasil pemodelan Gradient Boosting dengan tiga variasi
learning rate, yaitu 0,01; 0,05; dan 0,10, menunjukkan jumlah
iterasi optimal yang berbeda berdasarkan hasil 10-fold
cross-validation. Model dengan learning rate 0,01 mencapai
iterasi optimal sebanyak 2.038 pohon dari maksimum 5.000 iterasi. Model
dengan learning rate 0,05 memperoleh 458 pohon dari maksimum
1.500 iterasi, sedangkan model dengan learning rate 0,10
mencapai 212 pohon dari maksimum 800 iterasi. Ketiga model menggunakan
10 variabel prediktor dan seluruh variabel tersebut memiliki pengaruh
tidak nol (non-zero influence) dalam proses pembentukan model
untuk memprediksi respons y.
Evaluasi kinerja model dilakukan menggunakan data testing yang terdiri atas 60 observasi dengan mempertimbangkan nilai Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Mean Absolute Error (MAE), dan koefisien determinasi (\(R^2\)). MSE menunjukkan rata-rata kuadrat kesalahan prediksi, RMSE menggambarkan besarnya kesalahan prediksi dalam satuan yang sama dengan variabel respons, sedangkan MAE menunjukkan rata-rata selisih absolut antara nilai aktual dan hasil prediksi. Nilai \(R^2\) digunakan untuk menilai kemampuan model dalam menjelaskan variasi respons pada data pengujian. Model dengan nilai MSE, RMSE, dan MAE yang lebih rendah serta nilai \(R^2\) yang lebih tinggi cenderung menghasilkan prediksi yang lebih baik. Nilai evaluasi setiap model perlu diperoleh dari hasil perhitungan pada data testing untuk mengetahui perbedaan kinerja ketiganya.
Selain evaluasi pada data testing, perbandingan model juga mempertimbangkan nilai kesalahan minimum cross-validation (CV_MSE). Nilai CV_MSE menggambarkan tingkat kesalahan model berdasarkan proses validasi silang, dengan nilai yang lebih rendah menunjukkan kesalahan validasi yang lebih kecil. Penentuan model terbaik dilakukan dengan mempertimbangkan hasil evaluasi data testing dan nilai CV_MSE secara bersamaan. Jumlah iterasi optimal yang lebih sedikit tidak selalu menunjukkan model yang lebih unggul, sehingga keputusan akhir harus didasarkan pada ketepatan prediksi dan konsistensi kinerja model. Nilai MSE, RMSE, MAE, \(R^2\), dan CV_MSE belum tercantum dalam output yang tersedia, sehingga model terbaik belum dapat ditetapkan secara numerik.
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
par(mfrow = c(1, 1))
Pada setiap panel, garis hitam menggambarkan galat training, garis hijau menunjukkan galat cross-validation (CV), sedangkan garis biru putus-putus menandai jumlah iterasi optimal. Galat training terus menurun seiring bertambahnya jumlah pohon, sementara galat CV mengalami penurunan tajam pada tahap awal dan kemudian cenderung stabil di sekitar nilai 4. Setelah mencapai titik minimum, galat CV hanya mengalami sedikit peningkatan atau relatif mendatar, yang mengindikasikan bahwa overfitting pada model berlangsung relatif ringan.
Perbedaan ketiga panel terlihat pada rentang sumbu-x yang menunjukkan jumlah iterasi. Semakin kecil nilai learning rate (\(\nu\)), semakin banyak iterasi yang diperlukan untuk mencapai galat CV minimum. Model dengan \(\nu = 0{,}10\) menunjukkan penurunan galat yang lebih cepat, sedangkan model dengan \(\nu = 0{,}01\) mengalami penurunan secara lebih lambat dan bertahap.
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")
| 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 |
Jumlah iterasi optimal yang diperoleh pada masing-masing model adalah 2.038 pohon untuk \(\nu = 0{,}01\), 458 pohon untuk \(\nu = 0{,}05\), dan 212 pohon untuk \(\nu = 0{,}10\). Pola tersebut menunjukkan hubungan yang mendekati berbanding terbalik antara nilai learning rate dan jumlah iterasi optimal. Hal ini terlihat dari hasil perkalian keduanya yang relatif serupa, yaitu 20,38; 22,90; dan 21,20. Dengan demikian, penggunaan learning rate yang lebih kecil cenderung memerlukan jumlah pohon yang lebih banyak untuk mencapai tingkat kecocokan model yang sebanding.
Nilai minimum galat cross-validation (CV) pada ketiga model juga relatif berdekatan, yaitu 4,0047 untuk \(\nu = 0{,}01\), 4,0046 untuk \(\nu = 0{,}05\), dan 3,9630 untuk \(\nu = 0{,}10\). Nilai CV terkecil diperoleh pada model dengan \(\nu = 0{,}10\), yang menunjukkan bahwa model tersebut memiliki galat validasi silang paling rendah di antara ketiga model yang dibandingkan. Meskipun demikian, penentuan model terbaik tetap perlu mempertimbangkan hasil evaluasi pada data testing agar kemampuan prediksi model dapat dinilai secara menyeluruh.
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")
| 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("skyblue", "pink"),
xlab = "Shrinkage", ylab = "Nilai Galat",
main = "RMSE dan MAE", ylim = c(0, 2.6)
)
legend("topright", legend = c("RMSE", "MAE"),
fill = c("skyblue", "pink"), bty = "n")
barplot(
hasil$R_Square, names.arg = shrink.val,
col = "skyblue", xlab = "Shrinkage", ylab = "R-Square",
main = "R-Square", ylim = c(0, 1)
)
Perbandingan RMSE, MAE, dan R-Square antar shrinkage
par(mfrow = c(1, 1))
Berdasarkan hasil evaluasi pada data testing, model dengan learning rate (\(\nu\)) sebesar 0,10 menunjukkan kinerja terbaik pada seluruh ukuran evaluasi, dengan nilai MSE sebesar 4,0312, RMSE sebesar 2,0078, MAE sebesar 1,5579, dan \(R^2\) sebesar 0,8318. Model dengan \(\nu = 0{,}01\) menghasilkan MSE sebesar 4,2550, RMSE sebesar 2,0628, MAE sebesar 1,5951, dan \(R^2\) sebesar 0,8225. Sementara itu, model dengan \(\nu = 0{,}05\) memperoleh MSE sebesar 4,2639, RMSE sebesar 2,0649, MAE sebesar 1,6008, dan \(R^2\) sebesar 0,8221. Hasil tersebut menunjukkan bahwa model dengan \(\nu = 0{,}10\) memiliki kesalahan prediksi paling rendah dan kemampuan menjelaskan variasi respons paling tinggi. Perbedaan kinerja antara model dengan \(\nu = 0{,}01\) dan \(\nu = 0{,}05\) relatif kecil, dengan selisih RMSE hanya sebesar 0,0021.
Nilai RMSE pada ketiga model berada di sekitar 2 satuan, yang menunjukkan besarnya kesalahan prediksi dalam satuan variabel respons. Jika dibandingkan dengan rata-rata respons sebesar 14,270, nilai RMSE tersebut setara dengan sekitar 14% dari rata-rata respons. Nilai MAE berkisar antara 1,5579 dan 1,6008, yang menunjukkan bahwa rata-rata selisih absolut antara nilai aktual dan hasil prediksi berada pada rentang tersebut. Nilai \(R^2\) berkisar antara 0,8221 dan 0,8318, sehingga model mampu menjelaskan sekitar 82%–83% variasi variabel respons pada data testing. Meskipun model dengan \(\nu = 0{,}10\) menghasilkan nilai evaluasi terbaik, selisih RMSE terhadap model dengan \(\nu = 0{,}01\) hanya sekitar 0,055 atau 2,7%. Perbedaan yang relatif kecil ini perlu ditafsirkan secara hati-hati karena evaluasi dilakukan pada 60 observasi testing dengan satu kali pembagian data. Oleh karena itu, hasil tersebut belum cukup untuk memastikan bahwa model dengan \(\nu = 0{,}10\) akan selalu memberikan kinerja terbaik pada data lain.
Perbandingan galat training dan cross-validation menunjukkan bahwa galat training pada iterasi optimal berada di kisaran 0,33–0,39, sedangkan galat cross-validation mendekati 4,0. Perbedaan tersebut menunjukkan bahwa model memiliki kecocokan yang sangat tinggi terhadap data training, tetapi kesalahan prediksinya meningkat ketika dievaluasi melalui validasi silang. Kondisi ini mengindikasikan adanya potensi overfitting, yaitu ketika model terlalu menyesuaikan diri dengan data pelatihan sehingga kemampuan generalisasinya pada data baru menjadi lebih terbatas. Pada dataset Friedman #1, komponen galat acak memiliki varians sebesar 1, sehingga nilai MSE sekitar 4 masih menunjukkan adanya selisih yang cukup besar dari varians galat acak tersebut. Kondisi ini dapat berkaitan dengan jumlah data pelatihan yang terbatas, yaitu 140 observasi, dalam mempelajari hubungan antara prediktor dan respons. Dengan demikian, model dengan \(\nu = 0{,}10\) dapat dipilih sebagai model terbaik di antara ketiga model berdasarkan hasil evaluasi yang tersedia, tetapi kestabilan kinerjanya perlu diperiksa lebih lanjut melalui pengulangan pembagian data atau validasi silang yang konsisten.
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 = "yellow",
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
par(mfrow = c(1, 1))
Pada ketiga model Gradient Boosting, sebaran titik menunjukkan pola linear positif yang mengikuti garis diagonal 45°, sehingga nilai prediksi cenderung mendekati nilai aktual. Korelasi antara nilai aktual dan prediksi mencapai 0,916 pada \(\nu = 0{,}01\), 0,917 pada \(\nu = 0{,}05\), dan 0,921 pada \(\nu = 0{,}10\). Nilai tersebut menunjukkan hubungan yang kuat antara hasil prediksi dan nilai aktual pada ketiga model. Sebaran titik di sekitar garis diagonal relatif serupa, tetapi model dengan \(\nu = 0{,}10\) memperlihatkan pola yang sedikit lebih rapat. Hasil ini sejalan dengan evaluasi sebelumnya, yaitu model dengan \(\nu = 0{,}10\) menghasilkan kinerja prediksi terbaik di antara ketiga model yang dibandingkan.
# 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")
| 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 |
Pada model \(\nu = 0{,}10\), rata-rata residual pada kelompok sepertiga nilai \(y\) terendah adalah −1,86, sementara pada kelompok sepertiga nilai \(y\) tertinggi sebesar +1,00. Temuan ini mengindikasikan bahwa model cenderung memprediksi terlalu tinggi pada nilai \(y\) yang rendah dan terlalu rendah pada nilai \(y\) yang tinggi. Akibatnya, hasil prediksi cenderung mendekati nilai rata-rata. Kecenderungan tersebut berkaitan dengan efek shrinkage pada metode Gradient Boosting. Selain itu, rata-rata galat mutlak pada kelompok nilai \(y\) rendah (2,03) lebih besar daripada kelompok nilai \(y\) tinggi (1,24). Pola serupa juga ditemukan pada model dengan \(\nu = 0{,}01\) dan \(\nu = 0{,}05\).
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 = "yellow",
xlab = "Nilai Prediksi", ylab = "Residual",
main = paste("Shrinkage =", shrink.val[i]))
abline(h = 0, lty = 2, lwd = 2, col = "red")
}
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")
| 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 |
Plot residual dari ketiga model menunjukkan sebaran titik di sekitar nol yang tidak membentuk pola sistematis, baik berupa lengkungan maupun penyebaran menyerupai corong. Nilai korelasi antara residual absolut dan nilai prediksi juga mendekati nol, yaitu 0,004, −0,025, dan −0,028. Temuan ini menunjukkan bahwa perubahan nilai prediksi tidak berkaitan dengan perubahan besar residual secara berarti. Rata-rata residual ketiga model berada pada rentang −0,36 hingga −0,40, yang mengindikasikan adanya kecenderungan prediksi sedikit melebihi nilai aktual. Meskipun demikian, selisih rata-rata tersebut relatif kecil dibandingkan simpangan baku residual yang mencapai sekitar 2,0. Secara keseluruhan, residual berada pada rentang sekitar −5,4 hingga 4,3, dengan model \(\nu = 0{,}10\) memiliki rentang residual paling kecil, yaitu −5,12 hingga 3,92.
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], ")"))
| 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 = "pink",
main = paste("Variable Importance - Shrinkage", shrink.val[best.m]),
ylab = "Relative Influence")
Relative influence model terbaik
Model dengan \(\nu = 0{,}10\)
memberikan nilai RMSE terendah sehingga dipilih sebagai model dengan
kinerja prediksi terbaik. Berdasarkan nilai relative influence,
variabel x.4 menempati posisi pertama dengan nilai 38,47,
disusul x.1 sebesar 28,25, x.2 sebesar 13,84,
x.3 sebesar 11,73, dan x.5 sebesar 5,45.
Kelima variabel tersebut berkontribusi terhadap pembentukan nilai \(y\) dalam persamaan Friedman dengan
akumulasi pengaruh sebesar 97,75%. Sementara itu, variabel
x.6 hingga x.10 yang berperan sebagai variabel
noise hanya menyumbang total pengaruh 2,25%. Hasil ini
memperlihatkan bahwa model mampu mengidentifikasi sebagian besar
variabel yang relevan dan memberikan pengaruh yang sangat kecil pada
variabel yang tidak berkaitan dengan pembentukan respons.
Besarnya pengaruh masing-masing variabel sejalan dengan bentuk
persamaan Friedman. Variabel x.4 menjadi variabel paling
dominan karena memiliki koefisien linear sebesar 10 dan tidak terlibat
dalam interaksi dengan variabel lain. Pengaruh x.1 dan
x.2 jika digabungkan mencapai sekitar 42%, yang berkaitan
dengan keterlibatan keduanya dalam komponen interaksi \(10\sin(\pi x_1 x_2)\). Variabel
x.3 memberikan kontribusi sebesar 11,73 melalui komponen
kuadratik \(20(x_3 - 0{,}5)^2\). Adapun
x.5 memiliki pengaruh paling rendah di antara variabel yang
relevan, yaitu 5,45, sesuai dengan koefisiennya yang bernilai 5.
Perbandingan ketiga model menunjukkan bahwa perubahan nilai shrinkage tidak menghasilkan perbedaan kinerja prediksi yang besar, tetapi memengaruhi jumlah pohon yang dibutuhkan. Pada \(\nu = 0{,}01\), iterasi terbaik dicapai dengan 2038 pohon, sedangkan \(\nu = 0{,}05\) dan \(\nu = 0{,}10\) masing-masing membutuhkan 458 dan 212 pohon. Meskipun menggunakan lebih banyak pohon, model dengan \(\nu = 0{,}01\) belum mampu memberikan hasil prediksi yang lebih akurat. Nilai RMSE-nya sebesar 2,0628, sementara model dengan \(\nu = 0{,}10\) menghasilkan RMSE lebih rendah, yaitu 2,0078.
Secara teori, penggunaan nilai shrinkage yang kecil dapat membantu meningkatkan kemampuan model dalam memprediksi data baru. Akan tetapi, pola tersebut tidak tampak pada hasil analisis ini. Keterbatasan jumlah pengamatan, perubahan galat cross-validation (CV) yang relatif kecil di sekitar nilai minimum, serta perbedaan performa yang tipis antarmodel dapat menjadi faktor yang memengaruhi hasil tersebut. Pengujian menggunakan jumlah pohon maksimum juga menghasilkan MSE sebesar 4,2166, 4,1566, dan 3,9644 secara berurutan untuk ketiga model. Nilai ini tidak jauh berbeda dari MSE pada iterasi optimal, sehingga penambahan pohon tidak memberikan perubahan galat yang berarti. Dengan mempertimbangkan ketepatan prediksi dan kebutuhan komputasi, nilai \(\nu = 0{,}10\) lebih menguntungkan karena memberikan hasil terbaik dengan jumlah pohon yang paling sedikit.
Boosting merupakan salah satu metode ensemble learning yang menggabungkan sejumlah model pembelajaran dasar (weak learner) secara berurutan untuk menghasilkan model prediksi yang lebih kuat. Prinsip utama Boosting adalah memperbaiki kesalahan yang masih dilakukan oleh model sebelumnya melalui pembentukan model baru secara bertahap. Dengan demikian, Boosting dapat meningkatkan kemampuan prediksi melalui penggabungan beberapa model sederhana, dengan tetap memperhatikan pemilihan parameter agar model tidak mengalami underfitting maupun overfitting.
Implementasi Boosting menggunakan bahasa pemrograman R dapat dilakukan untuk permasalahan klasifikasi maupun regresi. Pada klasifikasi, algoritma Adaptive Boosting (AdaBoost) memperbarui bobot observasi yang salah diklasifikasikan agar lebih diperhatikan pada proses pembelajaran berikutnya. Sementara itu, pada regresi, algoritma Gradient Boosting membentuk model secara bertahap dengan mempelajari kesalahan prediksi atau residual. Implementasi kedua algoritma tersebut meliputi persiapan data, pembagian data training dan testing, pembentukan model, penentuan parameter, serta proses prediksi sesuai dengan karakteristik permasalahan.
Evaluasi performa model Boosting dilakukan menggunakan ukuran evaluasi yang sesuai dengan tujuan analisis. Pada klasifikasi, evaluasi dapat menggunakan confusion matrix, accuracy, precision, recall, specificity, dan F1-score. Sementara itu, pada regresi, evaluasi dapat menggunakan MSE, RMSE, MAE, dan koefisien determinasi (\(R^2\)). Penggunaan ukuran evaluasi tersebut membantu menilai ketepatan prediksi dan mengidentifikasi kelebihan serta keterbatasan model. Oleh karena itu, pemilihan model Boosting yang baik perlu mempertimbangkan hasil evaluasi pada data pengujian dan kesesuaian model dengan karakteristik data yang dianalisis.
Berdasarkan hasil batasan maslaah dapat disimpulkan bahwa,
Gradient Boosting membangun model regresi secara bertahap
dengan melatih pohon-pohon dangkal pada residual model sebelumnya, dan
learning rate mengatur seberapa besar kontribusi setiap pohon.
Nilai shrinkage yang lebih kecil membutuhkan jumlah iterasi
yang lebih besar, dan jumlah iterasi yang sesuai dapat ditentukan secara
objektif melalui cross-validation. Pada data Friedman #1 dengan
200 observasi (140 training dan 60 testing), iterasi
optimal hasil cross-validation 10-fold adalah 2038
untuk \(\nu = 0{,}01\), 458 untuk \(\nu = 0{,}05\), dan 212 untuk \(\nu = 0{,}10\). Hasil kali \(\nu\) dan iterasi optimal relatif konstan
(sekitar 20 sampai 23), yang menegaskan hubungan berbanding terbalik
antara keduanya. Berdasarkan data testing, model dengan \(\nu = 0{,}10\) memberikan kinerja terbaik
dengan MSE 4,0312, RMSE 2,0078, MAE 1,5579, dan \(R^2\) 0,8318. Model \(\nu = 0{,}01\) (MSE 4,2550; RMSE 2,0628;
MAE 1,5951; \(R^2\) 0,8225) dan \(\nu = 0{,}05\) (MSE 4,2639; RMSE 2,0649;
MAE 1,6008; \(R^2\) 0,8221) hampir
setara. Selisih antar-model kecil sehingga perbedaan tersebut belum
dapat dianggap pasti, namun \(\nu =
0{,}10\) paling efisien karena hanya memerlukan 212 pohon.
Residual tersebar acak di sekitar nol tanpa indikasi
heteroskedastisitas, dengan bias kecil berupa prediksi yang rata-rata
sedikit lebih tinggi daripada nilai aktual. Variable importance
menunjukkan bahwa model mengenali variabel yang relevan, yaitu
x.4, x.1
Penulis menyarankan agar ketepatan sintaks program R selalu diperhatikan untuk menghindari kesalahan dalam proses analisis. Penggunaan bahasa perlu disesuaikan dengan kaidah KBBI. Aturan penulisan huruf tebal juga perlu diperhatikan agar laporan tersusun secara sistematis, rapi, dan sesuai dengan kaidah penulisan ilmiah.
Boldini, D., Grisoni, F., Kuhn, D., Friedrich, L., & Sieber, S. A. (2023). Practical guidelines for the use of gradient boosting for molecular property prediction. Journal of Cheminformatics, 15, Article 73. https://doi.org/10.1186/s13321-023-00743-7
Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu
Gunasekara, N., Pfahringer, B., Gomes, H., & Bifet, A. (2024). Gradient boosted trees for evolving data streams. Machine Learning, 113, 3325–3352. https://doi.org/10.1007/s10994-024-06517-y
Mienye, I. D., & Sun, Y. (2022). A survey of ensemble learning: Concepts, algorithms, applications, and prospects. IEEE Access, 10, 99129–99149. https://doi.org/10.1109/ACCESS.2022.3207287
Mohammed, A., & Kora, R. (2023). A comprehensive review on ensemble deep learning: Opportunities and challenges. Journal of King Saud University—Computer and Information Sciences, 35(2), 757–774. https://doi.org/10.1016/j.jksuci.2023.01.014
Novianti, N., Zarlis, M., & Sihombing, P. (2022). Penerapan algoritma Adaboost untuk peningkatan kinerja klasifikasi data mining pada imbalance dataset diabetes. Jurnal Media Informatika Budidarma, 6(2), 1200–1206. https://doi.org/10.30865/mib.v6i2.4017
Sujon, K. M., Hassan, R., Choi, K., et al. (2025). Accuracy, precision, recall, f1-score, or MCC? Empirical evidence from advanced statistics, ML, and XAI for evaluating business predictive models. Journal of Big Data, 12, Article 268. https://doi.org/10.1186/s40537-025-01313-4