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).
Dalam penerapannya, 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
Berdasarkan sintaks yang dijalankan, tahap awal analisis Gradient
Boosting diawali dengan memanggil paket gbm,
mlbench, dan caret yang digunakan untuk
membangun model boosting, menyediakan dataset, serta membantu proses
pengolahan dan pembagian data. Sintaks set.seed(234)
digunakan untuk menetapkan bilangan awal acak agar proses pembangkitan
data dapat direproduksi. Selanjutnya, sintaks
reg.data <- as.data.frame(mlbench.friedman1(200))
digunakan untuk membentuk dataset Friedman #1 sebanyak 200 observasi dan
menyimpannya dalam bentuk data frame. Dataset tersebut terdiri atas 11
variabel, yaitu 10 variabel prediktor (x.1 sampai
x.10) dan satu variabel respons (y) yang
berupa data numerik. Berdasarkan output str(reg.data),
seluruh variabel memiliki tipe data numerik sehingga dapat digunakan
dalam analisis regresi.
Output summary(reg.data) memberikan ringkasan statistik
deskriptif untuk setiap variabel, meliputi nilai minimum, kuartil
pertama, median, rata-rata, kuartil ketiga, dan maksimum. Pada variabel
prediktor x.1 sampai x.10, nilai minimum
berkisar antara 0,001198 hingga 0,01021, sedangkan nilai maksimum
berkisar antara 0,993044 hingga 0,999850, yang menunjukkan bahwa nilai
prediktor berada pada rentang mendekati 0 hingga 1. Sementara itu,
variabel respons y memiliki nilai minimum sebesar 3,082,
kuartil pertama sebesar 10,593, median sebesar 13,810, rata-rata sebesar
14,270, kuartil ketiga sebesar 18,063, dan maksimum sebesar 26,146.
Rata-rata y yang sedikit lebih besar daripada mediannya
menunjukkan bahwa distribusi nilai respons berpotensi sedikit menceng ke
kanan, meskipun bentuk distribusinya belum dapat dipastikan hanya
berdasarkan ringkasan tersebut. Selanjutnya, output
dim(reg.data) menghasilkan nilai 200 11, yang
berarti dataset terdiri atas 200 baris atau observasi dan 11 kolom atau
variabel. Dengan demikian, dataset Friedman #1 telah berhasil dibentuk
dan diperiksa, sehingga dapat dilanjutkan ke 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
Berdasarkan sintaks yang dijalankan, tahap selanjutnya adalah membagi
dataset menjadi data training dan data testing sebelum membentuk model
Gradient Boosting. Sintaks set.seed(234) digunakan untuk
memastikan proses pembagian data dapat direproduksi. Selanjutnya,
sintaks
createDataPartition(reg.data$y, p = 0.70, list = FALSE)
digunakan untuk menentukan indeks observasi yang akan dimasukkan ke
dalam data training dengan proporsi sebesar 70% berdasarkan variabel
respons y. Data training dibentuk melalui sintaks
reg.train <- reg.data[idx.reg, ], sedangkan data testing
dibentuk menggunakan reg.test <- reg.data[-idx.reg, ],
yaitu observasi yang tidak termasuk dalam indeks data training.
Berdasarkan output dim(reg.train), data training terdiri
atas 140 observasi dan 11 variabel, sedangkan output
dim(reg.test) menunjukkan bahwa data testing terdiri atas
60 observasi dan 11 variabel. Dengan demikian, dari total 200 observasi,
sebanyak 140 observasi atau 70% digunakan untuk membangun model,
sementara 60 observasi atau 30% digunakan untuk menguji dan mengevaluasi
kemampuan model dalam memprediksi data yang tidak digunakan selama
proses pelatihan. Pembagian ini memungkinkan kinerja model Gradient
Boosting dinilai berdasarkan data pengujian secara terpisah dari data
yang digunakan untuk membentuk 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.
Berdasarkan sintaks yang dijalankan, tahap ini bertujuan membangun
dan membandingkan tiga model Gradient Boosting menggunakan nilai
learning rate (shrinkage) yang berbeda, yaitu 0,01; 0,05; dan 0,10.
Sintaks shrink.val <- c(0.01, 0.05, 0.10) digunakan
untuk menentukan nilai learning rate yang akan diuji, sedangkan
ntrees.val <- c(5000, 1500, 800) menentukan jumlah
maksimum pohon pada masing-masing model. Selanjutnya, model dibentuk
menggunakan fungsi gbm() dengan
formula = y ~ ., yang berarti variabel respons
y diprediksi berdasarkan seluruh variabel prediktor yang
tersedia. Parameter distribution = "gaussian" digunakan
karena permasalahan yang dianalisis merupakan regresi dengan respons
numerik, sedangkan interaction.depth = 2 membatasi
kedalaman interaksi pohon hingga dua tingkat. Parameter
n.minobsinnode = 5 menetapkan jumlah minimum observasi pada
simpul terminal, bag.fraction = 1 menggunakan seluruh data
pelatihan pada setiap iterasi tanpa pengambilan subsampel, dan
cv.folds = 10 menerapkan 10-fold cross-validation untuk
membantu menentukan jumlah iterasi yang optimal. Parameter
verbose = FALSE digunakan agar proses pembentukan model
tidak menampilkan informasi secara terperinci selama komputasi
berlangsung.
Penentuan jumlah iterasi optimal dilakukan menggunakan fungsi
gbm.perf(m, method = "cv", plot.it = FALSE), yang memilih
jumlah pohon berdasarkan hasil cross-validation. Setelah itu, fungsi
predict() digunakan untuk menghasilkan prediksi pada 60
observasi data testing dengan jumlah pohon optimal masing-masing model.
Kinerja prediksi dievaluasi menggunakan MSE, RMSE, MAE, dan \(R^2\). MSE
menghitung rata-rata kuadrat selisih antara nilai aktual dan prediksi,
RMSE merupakan akar kuadrat MSE, MAE menghitung rata-rata nilai absolut
kesalahan, sedangkan \(R^2\) menunjukkan kemampuan model dalam
menjelaskan variasi nilai respons berdasarkan data testing. Selain itu,
nilai min(m$cv.error) disimpan sebagai CV_MSE
untuk menunjukkan nilai kesalahan minimum hasil cross-validation.
Seluruh hasil tersebut dimasukkan ke dalam objek hasil
untuk memudahkan perbandingan ketiga model. Perlu diperhatikan bahwa
pada sintaks yang diberikan, kedua perulangan for
menjalankan proses yang sama dan sama-sama menambahkan hasil ke objek
hasil, sehingga setiap model tercatat dua kali. Apabila
hanya ingin memperoleh satu baris hasil untuk setiap model, salah satu
perulangan perlu dihapus.
Berdasarkan output ringkasan model, model pertama dengan learning rate 0,01 menggunakan maksimum 5.000 iterasi dan memperoleh jumlah iterasi optimal sebanyak 1.830 berdasarkan cross-validation. Model kedua dengan learning rate 0,05 menggunakan maksimum 1.500 iterasi dan memperoleh iterasi optimal sebanyak 380. Sementara itu, model ketiga dengan learning rate 0,10 menggunakan maksimum 800 iterasi dan memperoleh iterasi optimal sebanyak 179. Hasil tersebut menunjukkan bahwa semakin besar nilai learning rate yang digunakan, semakin sedikit jumlah iterasi optimal yang diperlukan dalam ketiga model yang dibentuk. Hal ini sesuai dengan mekanisme Gradient Boosting, yaitu learning rate mengatur besarnya kontribusi setiap pohon baru terhadap model. Nilai learning rate yang lebih kecil membuat pembaruan model berlangsung lebih bertahap sehingga umumnya membutuhkan lebih banyak iterasi. Selain itu, ketiga model menunjukkan bahwa seluruh 10 variabel prediktor memiliki pengaruh (non-zero influence) dalam model. Namun, output ini belum menunjukkan seberapa besar pengaruh masing-masing variabel maupun model mana yang memiliki kinerja prediksi terbaik. Penentuan model terbaik harus didasarkan pada hasil perbandingan nilai MSE, RMSE, MAE, dan \(R^2\) pada data testing, serta mempertimbangkan nilai kesalahan cross-validation yang diperoleh setiap model.
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 adalah galat training, garis hijau adalah galat cross-validation, dan garis putus-putus biru menandai iterasi optimal. Galat training turun terus seiring bertambahnya pohon, sedangkan galat CV turun tajam di awal lalu mendatar di sekitar nilai 4. Setelah titik minimum, kurva CV hanya naik sangat tipis atau relatif datar, yang menunjukkan overfitting pada data ini berlangsung ringan. Perbedaan antara ketiga panel terlihat pada skala sumbu-x, yaitu semakin kecil \(\nu\) semakin panjang kurva yang dibutuhkan untuk mencapai minimum. Pada \(\nu = 0{,}10\) penurunan galat terjadi paling cepat, sedangkan pada \(\nu = 0{,}01\) penurunan berlangsung paling 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 |
Iterasi optimal masing-masing model adalah 2038 (\(\nu = 0{,}01\)), 458 (\(\nu = 0{,}05\)), dan 212 (\(\nu = 0{,}10\)). Hubungannya mendekati berbanding terbalik, yang terlihat dari hasil kali \(\nu\) dan iterasi optimal yang relatif konstan, yaitu 20,38; 22,90; dan 21,20. Artinya, untuk mencapai tingkat kecocokan yang sama, penurunan \(\nu\) harus dikompensasi dengan kenaikan jumlah pohon secara proporsional. Galat CV minimum ketiga model sangat berdekatan, yaitu 4,0047; 4,0046; dan 3,9630, dengan nilai terkecil pada \(\nu = 0{,}10\).
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("navy", "skyblue"),
xlab = "Shrinkage", ylab = "Nilai Galat",
main = "RMSE dan MAE", ylim = c(0, 2.6)
)
legend("topright", legend = c("RMSE", "MAE"),
fill = c("navy", "skyblue"), bty = "n")
barplot(
hasil$R_Square, names.arg = shrink.val,
col = "navy", xlab = "Shrinkage", ylab = "R-Square",
main = "R-Square", ylim = c(0, 1)
)
Perbandingan RMSE, MAE, dan R-Square antar shrinkage
par(mfrow = c(1, 1))
Berdasarkan data testing, model dengan \(\nu = 0{,}10\) menghasilkan kinerja terbaik pada keempat ukuran: MSE 4,0312, RMSE 2,0078, MAE 1,5579, dan \(R^2\) 0,8318. Model \(\nu = 0{,}01\) menghasilkan MSE 4,2550, RMSE 2,0628, MAE 1,5951, dan \(R^2\) 0,8225, sedangkan model \(\nu = 0{,}05\) menghasilkan MSE 4,2639, RMSE 2,0649, MAE 1,6008, dan \(R^2\) 0,8221. Dua model pertama praktis tidak dapat dibedakan, yaitu RMSE hanya berselisih 0,0021.
Nilai RMSE sekitar 2,0 berarti rata-rata kesalahan prediksi pada skala \(y\) kira-kira 2 satuan, atau sekitar 14% dari rata-rata \(y\) (14,270). Nilai MAE (1,56 sampai 1,60) lebih kecil daripada RMSE dengan rasio sekitar 0,77, yang mendekati rasio 0,80 pada galat berdistribusi normal. Hal ini menunjukkan tidak ada pencilan prediksi yang dominan. Nilai \(R^2\) berkisar 0,82 sampai 0,83, artinya sekitar 82% sampai 83% variasi \(y\) pada data testing dapat dijelaskan model.
Selisih kinerja antar-model tergolong kecil. Keunggulan \(\nu = 0{,}10\) atas \(\nu = 0{,}01\) hanya sekitar 0,055 pada RMSE (sekitar 2,7%). Dengan hanya 60 observasi testing dan satu kali pembagian data, selisih sekecil ini belum cukup kuat untuk menyimpulkan bahwa \(\nu = 0{,}10\) pasti lebih baik secara umum. Galat CV minimum dari data training (bagian 4.4) juga memperlihatkan pola yang sama, yaitu ketiga model nyaris setara dengan \(\nu = 0{,}10\) sedikit lebih rendah.
Selain itu, perlu diperhatikan jarak antara galat training dan galat CV. Pada iterasi optimal, galat training hanya sekitar 0,33 sampai 0,39, sementara galat CV sekitar 4,0. Model tampak mencocokkan data training dengan sangat rapat, dan galat pada data baru sekitar sepuluh kali lebih besar. Varians galat acak data Friedman adalah 1, sehingga MSE sekitar 4 masih berada di atas batas terbaik yang mungkin dicapai. Hal ini wajar karena hanya 140 observasi yang tersedia untuk mempelajari fungsi yang kompleks.
par(mfrow = c(1, 3))
for (i in seq_along(shrink.val)) {
p <- predict(models[[i]], reg.test, n.trees = best.it[i])
plot(actual, p, pch = 19, col = "navy",
xlab = "Nilai Aktual", ylab = "Nilai Prediksi",
main = paste("Shrinkage =", shrink.val[i]))
abline(a = 0, b = 1, lty = 2, lwd = 2, col = "red")
}
Nilai aktual terhadap nilai prediksi
par(mfrow = c(1, 1))
Pada ketiga model, titik-titik membentuk pola naik yang mengikuti garis diagonal 45°, menandakan prediksi berkorelasi kuat dengan nilai aktual. Korelasi aktual dan prediksi masing-masing 0,916 (\(\nu = 0{,}01\)), 0,917 (\(\nu = 0{,}05\)), dan 0,921 (\(\nu = 0{,}10\)). Sebaran titik di sekitar garis tampak hampir sama pada ketiga panel dan sedikit lebih rapat pada \(\nu = 0{,}10\).
# 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 sepertiga nilai \(y\) terendah bernilai −1,86, sedangkan pada sepertiga tertinggi bernilai +1,00. Artinya model cenderung melebihkan prediksi ketika \(y\) rendah dan mengecilkan prediksi ketika \(y\) tinggi, sehingga prediksi tertarik ke arah rata-rata. Pola ini lazim pada model yang di-shrink dan sejalan dengan kenyataan bahwa galat mutlak paling besar pada kelompok \(y\) rendah (2,03) dibanding kelompok tinggi (1,24). Pola yang sama terlihat pada dua model lainnya.
par(mfrow = c(1, 3))
for (i in seq_along(shrink.val)) {
p <- predict(models[[i]], reg.test, n.trees = best.it[i])
plot(p, actual - p, pch = 19, col = "navy",
xlab = "Nilai Prediksi", ylab = "Residual",
main = paste("Shrinkage =", shrink.val[i]))
abline(h = 0, lty = 2, lwd = 2, col = "red")
}
Residual terhadap nilai prediksi
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 |
Residual pada ketiga model tersebar acak di sekitar garis nol tanpa pola melengkung atau corong yang jelas. Korelasi antara besar residual (nilai mutlak) dan nilai prediksi sangat kecil (0,004; −0,025; dan −0,028), sehingga tidak ada indikasi varians galat yang berubah seiring nilai prediksi. Rata-rata residual bernilai negatif pada ketiga model (sekitar −0,36 sampai −0,40), artinya secara rata-rata prediksi sedikit lebih tinggi daripada nilai aktual. Besarnya hanya sekitar 0,4 satuan, sehingga bias ini kecil dibandingkan simpangan baku residual (sekitar 2,0). Residual terkecil dan terbesar berada pada kisaran −5,4 sampai 4,3, dengan rentang paling sempit pada \(\nu = 0{,}10\) (−5,12 sampai 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 = "navy",
main = paste("Variable Importance - Shrinkage", shrink.val[best.m]),
ylab = "Relative Influence")
Relative influence model terbaik
Model terbaik berdasarkan RMSE adalah model dengan \(\nu = 0{,}10\). Pada model ini,
x.4 memiliki relative influence tertinggi (38,47),
diikuti x.1 (28,25), x.2 (13,84),
x.3 (11,73), dan x.5 (5,45). Kelima variabel
tersebut adalah variabel yang memang membentuk \(y\) pada persamaan Friedman, dan jumlahnya
mencapai 97,75% dari seluruh pengaruh. Sebaliknya, kelima variabel
noise (x.6 sampai x.10) hanya
memperoleh pengaruh 1,02 untuk x.6 dan di bawah 0,5 untuk
yang lain, dengan total hanya 2,25%. Dengan demikian, model berhasil
membedakan variabel yang relevan dari variabel pengganggu.
Urutan pengaruh sesuai dengan struktur persamaan. Variabel
x.4 dominan karena koefisien linearnya terbesar (10) dan
bekerja sendiri. Variabel x.1 dan x.2
bersama-sama menyumbang sekitar 42% karena keduanya terlibat dalam suku
interaksi \(10\sin(\pi x_1 x_2)\).
Variabel x.5 hanya sekitar 5,5% karena koefisiennya paling
kecil di antara variabel relevan (5). Variabel x.3
memperoleh pengaruh 11,73 dari suku kuadratik \(20(x_3 - 0{,}5)^2\).
Ketiga nilai shrinkage menghasilkan model dengan kinerja yang sangat dekat, tetapi biaya komputasinya berbeda tajam. Model \(\nu = 0{,}01\) memerlukan 2038 pohon, jauh lebih banyak dibandingkan 458 pohon pada \(\nu = 0{,}05\) dan 212 pohon pada \(\nu = 0{,}10\). Namun, tambahan pohon tersebut tidak diikuti perbaikan akurasi pada data ini, bahkan RMSE pada \(\nu = 0{,}01\) (2,0628) sedikit lebih besar daripada \(\nu = 0{,}10\) (2,0078).
Hasil ini sebagian berbeda dengan harapan teoretis bahwa \(\nu\) yang lebih kecil memberi generalisasi yang lebih baik. Penyebab yang mungkin adalah ukuran data yang kecil, kurva galat CV yang mendatar di sekitar minimum sehingga pemilihan iterasi optimal tidak terlalu sensitif, dan selisih yang kecil sehingga mudah tertutup oleh variasi sampel. Sebagai catatan, galat pada data testing dengan jumlah pohon maksimum (5000, 1500, dan 800 pohon) ternyata hampir sama dengan galat pada iterasi optimal (MSE 4,2166; 4,1566; dan 3,9644), yang memperkuat kesimpulan bahwa overfitting pada data ini ringan. Karena itu, pemilihan \(\nu\) sebaiknya mempertimbangkan efisiensi, dan \(\nu = 0{,}10\) menjadi pilihan yang paling efisien sekaligus terbaik pada data ini.
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
Praktikan dapat melakukan pembelajaran lebih lanjut mengenai Machine Learning and modern prediction serta cara interpretasinya agar semakin paham. Dapat dilakukan melalui sumber-sumber belajar lainnya. Dalam penulisan laporan paraktikan juga diharapakan untuk selalu teliti dan memperhatikan tata cara penulisan yang baik. Penulis juga berharap kritik dan saran kepada pembaca dan asisten praktikum guna membuat laporan ini menjadi lebih baik.
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