Perkembangan machine learning (ML) mendorong penggunaan model prediktif untuk mengolah data berukuran besar dan mendukung pengambilan keputusan pada berbagai bidang. Tren ini terlihat dari studi bibliometrik Lundberg et al. (2024), studi tersebut menunjukkan bahwa algoritma dan aplikasi menjadi dua arah riset terbesar dalam ML. Pada kelompok algoritma selain jaringan saraf, metode ensemble termasuk kategori dengan jumlah publikasi besar dan pertumbuhan yang menonjol. Penelitian yang sama juga menemukan korelasi Spearman sebesar 0,67 antara laju pertumbuhan suatu arah riset dan rata-rata sitasinya. Temuan tersebut menunjukkan bahwa metode ensemble, termasuk Boosting, tetap menjadi bagian penting dari perkembangan penelitian ML karena mampu menggabungkan sejumlah weak learner secara bertahap untuk membentuk model prediksi yang lebih kuat (Lundberg et al., 2024). Dalam praktiknya, keluarga gradient Boosting seperti XGBoost, LightGBM, dan CatBoost banyak digunakan karena dapat menangkap hubungan nonlinier dan interaksi antarprediktor pada data tabular.
Meskipun menawarkan kinerja prediksi yang tinggi, penerapan Boosting menghadapi persoalan metodologis yang perlu diperhatikan. Perbedaan struktur algoritma membuat kinerja model bergantung pada ukuran sampel, jenis prediktor, keberadaan data kategorik, dimensi data, noise, serta pengaturan hiperparameter. Ahn et al. (2023), misalnya, membandingkan XGBoost, LightGBM, dan CatBoost untuk peramalan harmful algal blooms. Model tersebut menghasilkan nilai R² sebesar 0,92 untuk XGBoost, 0,93 untuk LightGBM, dan 0,89 untuk CatBoost, sehingga tidak ada satu algoritma yang unggul secara universal. Penulis juga melaporkan bahwa XGBoost dapat menghadapi penggunaan memori yang tinggi dan kinerja yang menurun pada data tidak seimbang, LightGBM dapat kurang sesuai untuk data berdimensi tinggi, sedangkan CatBoost dapat memerlukan waktu pelatihan lebih lama (Ahn et al., 2023). Masalah ini menjadi lebih serius ketika peneliti menilai model hanya dengan akurasi. Pada data tidak seimbang, akurasi dapat terlihat tinggi karena didominasi kelas mayoritas, sementara kemampuan model mengenali kelas minoritas tetap rendah. Jiang et al. (2025) merekomendasikan penggunaan metrik yang lebih sesuai, seperti balanced accuracy, F1-score, AUC-ROC, dan Matthews correlation coefficient, serta menekankan bahwa metode Boosting masih memerlukan penyetelan yang cermat dan sering perlu dikombinasikan dengan strategi sampling atau seleksi fitur.
Penelitian terdahulu juga memperlihatkan adanya celah pada aspek perbandingan, validasi, dan interpretasi model. Nguyen dan Ngo (2025) membandingkan AdaBoost, XGBoost, LightGBM, dan CatBoost untuk prediksi personal default menggunakan data keuangan Vietnam. LightGBM memperoleh akurasi 95,45% dan AUC 0,9913 pada data uji, tetapi penelitian tersebut menggunakan satu konteks data dan satu skema pembagian data, yaitu 90% untuk pelatihan serta 10% untuk pengujian dan validasi. Penulis menyarankan pengujian pada dataset dari wilayah lain, analisis pengaruh karakteristik data terhadap kinerja model, dan kajian interpretabilitas untuk menilai kemampuan generalisasi hasil penelitian. Celah tersebut sejalan dengan Chen et al. (2024), yang menunjukkan bahwa pembelajaran dari data tidak seimbang masih menghadapi persoalan ketahanan dan generalisasi, terutama ketika ukuran sampel kecil atau distribusi data berubah. Selain itu, Gonçalves dan de Carvalho (2025) menegaskan bahwa model Gradient Boosting Decision Trees memerlukan metode interpretabilitas agar peneliti dapat menjelaskan kontribusi prediktor terhadap hasil prediksi; survei mereka merekomendasikan SHAP sebagai salah satu pendekatan yang sesuai dengan struktur model Boosting. Dengan demikian, penelitian yang hanya membandingkan nilai akurasi tanpa validasi yang memadai dan tanpa penjelasan prediktor belum sepenuhnya menjawab kebutuhan penggunaan Boosting secara bertanggung jawab.
Berdasarkan uraian tersebut, penelitian tentang Boosting penting dilakukan untuk memperoleh bukti yang lebih terukur mengenai algoritma yang paling sesuai dengan karakteristik data penelitian. Penelitian ini dapat mengisi celah terdahulu dengan membandingkan beberapa algoritma Boosting menggunakan prosedur validasi yang konsisten, metrik evaluasi yang tidak hanya bergantung pada akurasi, serta analisis interpretabilitas apabila penelitian melibatkan kebutuhan penjelasan prediktor. Secara akademik, penelitian ini dapat memperkaya kajian statistika komputasi mengenai hubungan antara karakteristik data, penyetelan hiperparameter, strategi validasi, dan kinerja model Boosting. Secara praktis, hasilnya dapat membantu peneliti atau pengguna model memilih algoritma yang lebih tepat, mengenali sumber kesalahan prediksi, dan menggunakan hasil prediksi sebagai dasar pengambilan keputusan yang lebih dapat dipertanggungjawabkan. Bagian yang perlu disesuaikan dengan topik khusus penelitian adalah objek prediksi, sumber dataset, variabel respons, algoritma yang dibandingkan, serta metode validasi yang akan digunakan.
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.
Machine learning merupakan pendekatan komputasi yang memungkinkan sistem mempelajari pola dari data untuk menghasilkan prediksi atau keputusan tanpa harus diprogram secara eksplisit untuk setiap aturan. Dalam penelitian statistik dan ilmu data, machine learning digunakan untuk memodelkan hubungan antara variabel prediktor dan variabel respons, terutama ketika hubungan tersebut bersifat nonlinear atau melibatkan interaksi antarkomponen data. Penggunaan machine learning berkembang dalam berbagai bidang karena algoritmanya dapat digunakan untuk klasifikasi, regresi, predeteksian pola, dan pengambilan keputusan berbasis data (Mienye & Sun, 2022; Zhang et al., 2022).
Secara umum, machine learning dapat dibedakan menjadi pembelajaran terawasi (supervised learning), pembelajaran tidak terawasi (unsupervised learning), dan pembelajaran semi-terawasi. Penelitian yang menggunakan bagging umumnya termasuk dalam pembelajaran terawasi karena model dibangun berdasarkan data pelatihan yang memiliki variabel respons atau label. Pada pembelajaran terawasi, model mempelajari fungsi pemetaan antara himpunan prediktor dan respons. Untuk permasalahan klasifikasi, respons berbentuk kategori, sedangkan pada regresi respons berbentuk numerik kontinu.
Tujuan utama pemodelan machine learning bukan hanya memperoleh kecocokan yang baik terhadap data pelatihan, tetapi juga menghasilkan kemampuan generalisasi yang baik pada data baru. Model yang terlalu kompleks dapat mengalami overfitting, yaitu ketika model sangat sesuai dengan data pelatihan tetapi kurang mampu memprediksi data pengujian. Sebaliknya, model yang terlalu sederhana dapat mengalami underfitting. Oleh karena itu, pemilihan algoritma, pengaturan hiperparameter, pembagian data, dan validasi model merupakan bagian penting dalam penelitian machine learning (Zhao et al., 2025).
Ensemble learning adalah teknik yang menggabungkan beberapa model dasar (base learners) untuk menghasilkan prediksi akhir. Gagasan utama metode ini adalah bahwa kombinasi beberapa model dapat menghasilkan prediksi yang lebih stabil atau lebih akurat dibandingkan satu model saja. Perbaikan tersebut dapat diperoleh melalui pengurangan varians, pengurangan bias, atau pemanfaatan keragaman kesalahan antar-base learners (Mienye & Sun, 2022; Zhang et al., 2022).
Kinerja ensemble dipengaruhi oleh dua unsur penting, yaitu akurasi setiap model dasar dan keragaman antar-model. Model-model yang memiliki akurasi tinggi tetapi menghasilkan prediksi yang hampir sama tidak selalu memberikan peningkatan yang berarti ketika digabungkan. Sebaliknya, model yang memiliki keragaman prediksi dapat saling melengkapi, selama tingkat kesalahan masing-masing model tidak terlalu besar. Dengan demikian, pembentukan ensemble perlu memperhatikan algoritma dasar, mekanisme pembentukan sampel, pemilihan fitur, serta metode penggabungan prediksi.
Tiga pendekatan ensemble yang banyak dibahas adalah bagging, boosting, dan stacking. Bagging membangun model secara paralel pada beberapa sampel hasil bootstrap dan menggabungkan prediksinya. Boosting membangun model secara bertahap dengan memberikan perhatian lebih besar pada observasi yang sebelumnya diprediksi dengan salah. Stacking menggabungkan beberapa model heterogen melalui model tingkat kedua atau meta-learner. Ketiga pendekatan tersebut memiliki mekanisme, kebutuhan komputasi, dan karakteristik performa yang berbeda (Qiu et al., 2025; Zhang et al., 2022).
Boosting merupakan metode ensemble yang membentuk model kuat dari serangkaian weak learner. Pada setiap tahap, algoritma memberikan perhatian lebih besar pada observasi yang sulit diprediksi atau pada residual dari model sebelumnya. Model-model tersebut kemudian digabungkan menjadi fungsi prediksi akhir. Dengan cara ini, Boosting dapat menangkap hubungan nonlinier dan interaksi antarvariabel yang sulit direpresentasikan oleh satu pohon keputusan sederhana (Ahn et al., 2023; Zhang et al., 2022).
Secara umum, model Boosting dapat dituliskan sebagai penjumlahan bertahap:
\[F_m(x)=F_{m-1}(x)+\eta h_m(x),\]
dengan Fmx adalah model pada iterasi ke-m, hmx adalah weak learner baru, dan η adalah learning rate. Nilai learning rate mengendalikan kontribusi setiap model baru. Nilai yang kecil biasanya membutuhkan jumlah pohon yang lebih banyak, sedangkan nilai yang besar dapat mempercepat pembelajaran tetapi meningkatkan risiko overfitting. Dalam implementasi modern, performa Boosting juga dipengaruhi oleh kedalaman pohon, jumlah estimator, subsampling, regularisasi, serta karakteristik data.
Kelebihan utama Boosting adalah kemampuannya menghasilkan kinerja prediksi tinggi pada data tabular. Namun, peningkatan kinerja tidak bersifat universal. Ahn et al. (2023) menunjukkan bahwa XGBoost, LightGBM, dan CatBoost menghasilkan performa berbeda pada tugas peramalan yang sama. Perbedaan tersebut menunjukkan bahwa algoritma Boosting perlu dievaluasi berdasarkan karakteristik data dan tujuan penelitian, bukan hanya berdasarkan reputasi atau hasil pada dataset lain.
Adaptive Boosting atau AdaBoost membangun serangkaian weak learner secara berurutan. Pada tahap awal, observasi diberi bobot yang relatif sama. Setelah model pertama menghasilkan prediksi, bobot observasi yang salah diklasifikasikan dinaikkan sehingga model berikutnya lebih memperhatikan observasi tersebut. Prediksi akhir diperoleh dari kombinasi berbobot seluruh weak learner.
Kelebihan AdaBoost terletak pada struktur algoritmanya yang relatif sederhana dan kemampuannya mengubah beberapa pembelajar lemah menjadi model yang lebih kuat. Namun, peningkatan bobot pada observasi yang salah juga dapat membuat model sensitif terhadap pencilan dan noise. Oleh karena itu, jumlah estimator, tipe weak learner, serta learning rate perlu ditentukan melalui validasi. Pada data kecil dan seimbang, AdaBoost dapat menjadi alternatif yang efisien, tetapi kinerjanya tetap perlu dibandingkan dengan algoritma Boosting berbasis pohon lainnya (Nguyen & Ngo, 2025).
Gradient Boosting membangun model secara bertahap dengan meminimalkan fungsi kerugian. Pada setiap iterasi, algoritma membentuk weak learner baru untuk mendekati arah penurunan fungsi kerugian atau residual model sebelumnya. Pendekatan ini dapat digunakan untuk klasifikasi dan regresi dengan fungsi kerugian yang disesuaikan dengan tujuan analisis.
Keberhasilan Gradient Boosting sangat dipengaruhi oleh kombinasi jumlah pohon, kedalaman pohon, learning rate, dan subsampling. Jumlah pohon yang terlalu sedikit dapat menyebabkan underfitting, sedangkan jumlah pohon yang terlalu besar dapat meningkatkan waktu komputasi dan risiko overfitting. Karena itu, penelitian yang menggunakan Gradient Boosting perlu mencantumkan prosedur penyetelan hiperparameter dan skema validasi yang digunakan.
Studi Ptr et al. (2024) menunjukkan bahwa Gradient Boosting, XGBoost, dan CatBoost dapat menghasilkan kinerja berbeda setelah data mengalami prapemrosesan dan normalisasi. Temuan tersebut memperlihatkan bahwa performa algoritma tidak terlepas dari tahap pengolahan data sebelum pemodelan.
Extreme Gradient Boosting atau XGBoost merupakan pengembangan Gradient Boosting berbasis pohon yang dirancang untuk meningkatkan efisiensi, skalabilitas, dan pengendalian kompleksitas model. XGBoost menggunakan regularisasi dan menyediakan berbagai pengaturan untuk mengendalikan pertumbuhan pohon. Algoritma ini banyak digunakan pada data tabular karena dapat menangani hubungan nonlinier dan interaksi antarprediktor.
Dalam praktiknya, hiperparameter penting pada XGBoost meliputi n_estimators, learning rate, max depth, subsample, colsample bytree, serta parameter regularisasi seperti reg alpha dan reg lambda. Max depth mengendalikan kompleksitas setiap pohon, sedangkan subsample dan colsample bytree mengatur proporsi observasi atau fitur yang digunakan pada proses pembentukan pohon. Pengaturan yang tidak tepat dapat menghasilkan model terlalu kompleks, penggunaan memori tinggi, atau performa yang kurang baik pada data tidak seimbang (Ahn et al., 2023).
Light Gradient Boosting Machine atau LightGBM merupakan implementasi Gradient Boosting yang menekankan efisiensi waktu dan penggunaan memori. Dalam ringkasan Ahn et al. (2023), LightGBM dijelaskan memiliki keunggulan pada kecepatan dan efisiensi memori ketika menangani data berukuran besar. Algoritma ini menggunakan strategi pertumbuhan pohon leaf-wise, sehingga dapat meningkatkan pengurangan fungsi kerugian pada setiap tahap.
Strategi leaf-wise dapat menghasilkan pohon yang lebih kompleks dibandingkan pertumbuhan level-wise apabila tidak dikendalikan. Nguyen & Ngo (2025) menyatakan bahwa LightGBM dapat mengalami overfitting, khususnya pada dataset kecil, dan kinerja algoritma dapat berubah sesuai konteks data. Oleh karena itu, parameter seperti num leaves, max depth, min data in leaf, feature fraction, bagging fraction, dan learning rate perlu disetel secara hati-hati.
Categorical Boosting atau CatBoost merupakan algoritma boosting yang dirancang untuk menangani variabel kategorik secara lebih langsung. Keunggulan tersebut dapat mengurangi kebutuhan terhadap pengkodean kategorik yang kompleks pada tahap awal. Ahn et al. (2023) menjelaskan bahwa CatBoost memiliki kemampuan baik dalam menangani variabel kategorik dan menyediakan mekanisme yang mendukung pengendalian overfitting.
CatBoost tetap memiliki keterbatasan. Waktu pelatihan dan kinerja model dapat berubah sesuai dimensi data, jumlah kategori, jumlah estimator, serta konfigurasi parameter. Dalam studi Ptr et al. (2024), CatBoost memberikan hasil terbaik pada klasifikasi spesifikasi telepon seluler setelah prapemrosesan dan cross-validation. Sebaliknya, Ahn et al. (2023) menemukan bahwa CatBoost menghasilkan kinerja yang lebih rendah daripada XGBoost dan LightGBM pada tugas peramalan harmful algal blooms. Perbedaan temuan tersebut memperkuat alasan untuk melakukan evaluasi empiris pada dataset penelitian sendiri.
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
Data Friedman yang dibangkitkan terdiri dari 200 observasi dan 11
variabel, yaitu 10 prediktor (x.1 sampai x.10)
dan 1 respons (y), seluruhnya bertipe numerik. Setiap
prediktor memiliki nilai minimum mendekati 0 dan maksimum mendekati 1
dengan rata-rata sekitar 0,5, sesuai dengan distribusi seragam pada
interval [0, 1]. Variabel respons y berkisar antara 3,082
sampai 26,146 dengan median 13,810 dan rata-rata 14,270. Median yang
dekat dengan rata-rata menunjukkan distribusi y relatif
simetris.
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
Data dibagi menjadi 140 observasi training (70%) dan 60
observasi testing (30%), masing-masing dengan 11 kolom. Fungsi
createDataPartition() mengambil sampel berdasarkan kuantil
y sehingga sebaran respons pada data training dan
testing tetap sebanding. Jumlah data testing yang
hanya 60 observasi perlu diingat saat membandingkan model, karena
selisih kinerja yang kecil bisa saja timbul akibat variasi sampel.
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.
Ketiga model dibentuk dengan fungsi kerugian gaussian
(kuadrat) dan seluruh 10 prediktor memiliki pengaruh bukan nol pada
masing-masing model. Model dengan \(\nu =
0{,}01\) dilatih sampai 5000 iterasi dan iterasi terbaik menurut
CV jatuh pada 2038. Model dengan \(\nu =
0{,}05\) dilatih sampai 1500 iterasi dengan iterasi terbaik 458,
dan model dengan \(\nu = 0{,}10\)
dilatih sampai 800 iterasi dengan iterasi terbaik 212. Pada ketiga
model, iterasi terbaik berada jauh di dalam batas n.trees
sehingga jumlah pohon maksimum yang ditetapkan sudah memadai dan kurva
CV sempat mencapai titik minimumnya.
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.
Machine learning merupakan pendekatan komputasi yang memungkinkan sistem mempelajari pola dari data untuk menghasilkan prediksi atau keputusan. Dalam penerapannya, keberhasilan pemodelan tidak hanya ditentukan oleh kemampuan model dalam menyesuaikan diri terhadap data pelatihan, tetapi juga oleh kemampuannya melakukan generalisasi terhadap data baru. Oleh karena itu, pemilihan algoritma, pengaturan hiperparameter, pembagian data, dan validasi model menjadi aspek penting untuk memperoleh hasil prediksi yang optimal serta meminimalkan risiko overfitting dan underfitting.
Salah satu pendekatan dalam machine learning adalah ensemble learning, yaitu teknik yang menggabungkan beberapa model dasar untuk menghasilkan prediksi akhir yang lebih stabil atau akurat. Metode ensemble terdiri atas beberapa pendekatan, di antaranya Bagging, Boosting, dan Stacking, yang memiliki mekanisme pembentukan model dan karakteristik berbeda. Metode Boosting membangun model secara bertahap dengan memberikan perhatian lebih besar pada observasi yang sulit diprediksi atau residual dari model sebelumnya. Pendekatan ini memungkinkan model menangkap hubungan nonlinier dan interaksi antarvariabel yang sulit direpresentasikan oleh satu model sederhana.
Algoritma Boosting yang dibahas meliputi AdaBoost, Gradient Boosting, XGBoost, LightGBM, dan CatBoost. Masing-masing algoritma memiliki keunggulan dan keterbatasan, baik dari segi mekanisme pembelajaran, efisiensi komputasi, penanganan variabel kategorik, maupun risiko overfitting. Perbedaan kinerja yang ditemukan pada berbagai penelitian menunjukkan bahwa tidak ada satu algoritma yang selalu memberikan hasil terbaik untuk semua jenis data. Dengan demikian, pemilihan algoritma Boosting perlu disesuaikan dengan karakteristik data dan tujuan penelitian serta dievaluasi melalui pengaturan hiperparameter dan validasi model untuk memperoleh kinerja prediksi yang optimal.
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.
Ahn, J. M., Kim, J., & Kim, K. (2023). Ensemble Machine Learning of Gradient Boosting (XGBoost, LightGBM, CatBoost) and Attention-Based CNN-LSTM for Harmful Algal Blooms Forecasting. Toxins, 15(10). https://doi.org/10.3390/toxins15100608
Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu
Mienye, I. D., & Sun, Y. (2022). A Survey of Ensemble Learning: Concepts, Algorithms, Applications, and Prospects. In IEEE Access (Vol. 10). https://doi.org/10.1109/ACCESS.2022.3207287
Nguyen, N., & Ngo, D. (2025). Comparative analysis of boosting algorithms for predicting personal default. Cogent Economics and Finance, 13(1). https://doi.org/10.1080/23322039.2025.2465971
Ptr, A. F. L., Siregar, M. M., & Daniel, I. (2024). Analysis of Gradient Boosting, XGBoost, and CatBoost on Mobile Phone Classification. Journal of Computer Networks, Architecture and High Performance Computing, 6(2). https://doi.org/10.47709/cnahpc.v6i2.3790
Qiu, R., Yin, Y., Su, Q., & Guan, T. (2025). Func-Bagging: An Ensemble Learning Strategy for Improving the Performance of Heterogeneous Anomaly Detection Models. Applied Sciences (Switzerland), 15(2). https://doi.org/10.3390/app15020905
Zhang, Y., Liu, J., & Shen, W. (2022). A Review of Ensemble Learning Algorithms Used in Remote Sensing Applications. In Applied Sciences (Switzerland) (Vol. 12, Number 17). https://doi.org/10.3390/app12178654
Zhao, H., Liu, W., Wang, Y., & Wu, L. (2025). Comparative analysis of algorithmic approaches in ensemble learning: bagging vs. boosting. Scientific Reports, 15(1). https://doi.org/10.1038/s41598-025-15971-0