Perkembangan teknologi informasi menyebabkan jumlah data yang tersedia semakin besar dan kompleks, sehingga diperlukan metode yang mampu mengolah data dan menghasilkan informasi yang dapat digunakan dalam pengambilan keputusan. Salah satu pendekatan yang banyak digunakan dalam machine learning adalah metode klasifikasi. Decision Tree merupakan salah satu metode supervised learning yang dapat digunakan untuk permasalahan klasifikasi maupun regresi dengan membentuk struktur pohon berdasarkan aturan keputusan dari data. Metode ini tetap banyak digunakan karena memiliki struktur yang relatif sederhana dan mudah dipahami dibandingkan beberapa metode machine learning lainnya (Blockeel et al., 2023).
Decision Tree bekerja dengan melakukan pembagian data secara bertahap berdasarkan karakteristik atau atribut tertentu hingga menghasilkan kelompok atau kelas pada bagian akhir pohon. Proses tersebut menghasilkan aturan keputusan yang dapat digunakan untuk menentukan kelas suatu observasi baru. Salah satu keunggulan Decision Tree adalah hasil pemodelannya dapat direpresentasikan dalam bentuk aturan yang lebih mudah diinterpretasikan, sehingga pengguna dapat mengetahui proses yang mendasari suatu hasil klasifikasi. Selain itu, Decision Tree dapat digunakan pada data dengan variabel numerik maupun kategorik, sehingga penerapannya cukup fleksibel pada berbagai jenis dataset (Abedinia & Seydi, 2024).
Berdasarkan uraian tersebut, Decision Tree merupakan salah satu metode yang relevan untuk digunakan dalam analisis klasifikasi karena mampu menghasilkan model prediksi sekaligus aturan keputusan yang relatif mudah dipahami. Kemampuan dalam menangani berbagai tipe variabel serta menghasilkan model yang interpretatif menjadikan Decision Tree sebagai salah satu metode yang penting untuk dipelajari dalam machine learning. Oleh karena itu, penerapan Decision Tree diperlukan untuk memahami proses pembentukan pohon keputusan, aturan klasifikasi yang dihasilkan, serta kemampuan metode dalam mengklasifikasikan suatu data.
1. Bagaimana konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree)?
2. Bagaimana cara membangun model Classification Tree menggunakan algoritma CART?
1. Mahasiswa mampu menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).
2. Mahasiswa mampu membangun model Classification Tree menggunakan algoritma CART
Adapun batasan masalah pada penelitian ini adalah Gunakan dataset Hitters dari package ISLR untuk memprediksi Salary menggunakan Decision Tree (Regression Tree). Lakukan pengecekan dan penanganan missing value menggunakan na.omit(), kemudian bagi data menjadi training dan testing. Selanjutnya, bangun dan visualisasikan tree, analisis variable importance, lakukan prediksi dan evaluasi menggunakan MSE, tentukan CP terbaik, lakukan pruning, dan evaluasi kembali model menggunakan MSE!
Decision Tree merupakan salah satu metode machine learning yang digunakan untuk menyelesaikan permasalahan klasifikasi maupun regresi. Metode ini membentuk struktur pohon yang terdiri atas node, cabang, dan leaf node untuk menggambarkan proses pengambilan keputusan berdasarkan karakteristik data. Decision Tree termasuk metode yang banyak digunakan dalam machine learning karena memiliki struktur yang relatif sederhana dan hasil prediksinya lebih mudah diinterpretasikan dibandingkan beberapa metode machine learning lainnya. Selain digunakan sebagai model prediksi, Decision Tree juga dapat menghasilkan aturan keputusan yang menggambarkan hubungan antara variabel prediktor dengan variabel respons (Blockeel et al., 2023).
Classification and Regression Tree (CART) merupakan salah satu metode dalam Decision Tree yang digunakan untuk membangun model prediksi melalui proses pemisahan data secara bertahap. CART dapat digunakan untuk dua jenis permasalahan, yaitu klasifikasi dan regresi. Pada klasifikasi, variabel respons berupa data kategorik sehingga hasil akhir model berupa kelas atau kategori. Sementara itu, pada regresi, variabel respons berupa data numerik kontinu sehingga model digunakan untuk memprediksi suatu nilai numerik (Chen et al., 2024).
Decision Tree memiliki beberapa karakteristik, yaitu (Fransiska, 2026):
1. Mudah dipahami dan diinterpretasikan karena model dapat divisualisasikaan dalam bentuk pohon.
2. Dapat menggunakan variabel prediktor numerik maupun kategorik.
3. Membagi data secara bertahap melalui proses splitting sehingga kelompok yang tebentuk semakin homogan.
4. Dapat digunakan untuk memprediksi kelas pada kasus klasifikasi maupun nilai numerik pada kasus regresi.
5. Dapat disederhanakan melalui pruning untuk mengurangi kompleksitas pohon dan risiko overvitting
Classification Tree merupakan salah satu bentuk Decision Tree yang digunakan ketika variabel respons berupa data kategorik. Proses pembentukan Classification Tree dilakukan dengan membagi data secara bertahap berdasarkan aturan pemisahan tertentu sehingga setiap simpul yang terbentuk memiliki kelas yang semakin homogen. Pada setiap simpul, pemilihan variabel dan aturan pemisahan dilakukan dengan menggunakan ukuran impurity atau ketidakmurnian kelas. Beberapa ukuran yang umum digunakan dalam pembentukan pohon klasifikasi adalah Entropy, Information Gain, dan Gini Index. Pemilihan aturan pemisahan yang tepat berpengaruh terhadap struktur dan kemampuan prediksi pohon yang dihasilkan (Alharbi, 2024). Nilai Entropy yang semakin kecil menunjukkan bahwa simpul memiliki kelas yang semakin homogen. Secara matematis, Entropy pada suatu simpul dapat dirumuskan sebagai (Liu & Yang, 2022) :
\[ Entropy(S) = -\sum_{i=1}^{c} p_i \log_2(p_i) \]
Information Gain merupakan salah satu ukuran yang digunakan dalam pembentukan pohon keputusan untuk menentukan atribut yang paling sesuai sebagai dasar pemisahan data. Ukuran ini menunjukkan seberapa besar ketidakpastian atau Entropy pada suatu dataset dapat dikurangi setelah dataset tersebut dipartisi berdasarkan atribut tertentu. Suatu atribut dikatakan memberikan pemisahan yang lebih baik apabila menghasilkan nilai Information Gain yang lebih besar, karena pemisahan tersebut mampu menghasilkan subset dengan tingkat ketidakpastian yang lebih rendah. Jika dataset $D$ dipartisi menjadi beberapa bagian D1, D2,..., Dj, maka Information Gain dapat dirumuskan sebagai (Cheng & Shi, 2023):
\[ Gain(A) = Entropy(D) - \sum_{j=1}^{v} \frac{|D_j|}{|D|} Entropy(D_j) \]
Gini Index digunakan untuk mengukur tingkat ketidakmurnian kelas (Gini impurity) dalam suatu simpul. Semakin kecil nilai Gini Index, semakin homogen data dalam simpul tersebut. Gini index dirumuskan sebagai (Fransiska, 2026):
\[ Gini(t) = 1 - \sum_{i=1}^{C} p_i^2 \]
Jika dataset D dipartisi menjadi dua bagian D1 dan D2, maka nilai Gini setelah pemisahan dihitung menggunakan rata-rata terbobot (Fransiska, 2026):
\[ Gini_{\text{split}} = \frac{|D_1|}{|D|} Gini(D_1) + \frac{|D_2|}{|D|} Gini(D_2) \]
Jenis data yang digunakan dalam penelitian ini adalah data kuantitatif, yaitu data berbentuk angka yang dapat diolah dan dianalisis secara statistik.
Sumber data yang digunakan merupakan data sekunder yang diperoleh dari dataset Hitters pada package ISLR dalam perangkat lunak R. Dataset ini memuat informasi mengenai pemain bisbol, termasuk variabel Salary yang digunakan sebagai variabel respons untuk membangun model prediksi menggunakan metode Decision Tree (Regression Tree)..
Variabel yang digunakan dalam penelitian ini terdiri atas satu variabel respons dan beberapa variabel prediktor. Variabel respons yang digunakan adalah Salary, yaitu gaji pemain bisbol. Sementara itu, variabel prediktor terdiri atas variabel lainnya dalam dataset Hitters, seperti AtBat, Hits, HmRun, Runs, RBI, Walks, Years, CAtBat, CHits, CHmRun, CRuns, CRBI, CWalks, League, Division, PutOuts, Assists, Errors, dan NewLeague. Variabel-variabel tersebut digunakan untuk membentuk model regresi pohon dalam memprediksi nilai Salary.
Berikut adalah algoritma untuk menyelesaiankan batasan masalah:
1. Mulai.
2. Memanggil package yang diperlukan, yaitu ISLR, dplyr, rpart, rpart.plot, caret, ggplot2, dan tibble.
3. Memanggil dataset Hitters dan memeriksa struktur serta ukuran data.
4. Memeriksa keberadaan missing value pada setiap variabel.
5. Menangani missing value dengan menghapus baris yang mengandung data hilang menggunakan fungsi na.omit().
6. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% dengan menetapkan seed agar hasil pembagian data dapat direproduksi.
7. Membangun model Decision Tree (Regression Tree) dengan variabel Salary sebagai variabel respons dan seluruh variabel lainnya sebagai prediktor menggunakan fungsi rpart() dengan metode anova.
8. Menampilkan dan memvisualisasikan struktur pohon regresi menggunakan fungsi rpart.plot().
9. Mengidentifikasi tingkat kepentingan masing-masing variabel prediktor (variable importance) serta menyajikannya dalam bentuk tabel dan grafik.
10. Melakukan prediksi nilai Salary pada data testing menggunakan model awal.
11. Mengevaluasi kinerja model awal dengan menghitung nilai Mean Squared Error (MSE).
12. Menentukan nilai Complexity Parameter (CP) terbaik berdasarkan nilai cross-validation error (xerror) terkecil pada tabel kompleksitas pohon.
13. Melakukan pruning untuk menyederhanakan struktur pohon menggunakan fungsi prune() berdasarkan nilai CP terpilih.
14. Memvisualisasikan pohon regresi setelah proses pruning.
15. Melakukan prediksi kembali pada data testing menggunakan model setelah pruning.
16. Menghitung nilai MSE setelah pruning dan membandingkannya dengan MSE model awal untuk mengevaluasi perubahan kinerja model.
17. Selesai.
library(ISLR)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(rpart)
library(rpart.plot)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(ggplot2)
library(tibble)
data(Hitters)
# Melihat struktur data
str(Hitters)
## 'data.frame': 322 obs. of 20 variables:
## $ AtBat : int 293 315 479 496 321 594 185 298 323 401 ...
## $ Hits : int 66 81 130 141 87 169 37 73 81 92 ...
## $ HmRun : int 1 7 18 20 10 4 1 0 6 17 ...
## $ Runs : int 30 24 66 65 39 74 23 24 26 49 ...
## $ RBI : int 29 38 72 78 42 51 8 24 32 66 ...
## $ Walks : int 14 39 76 37 30 35 21 7 8 65 ...
## $ Years : int 1 14 3 11 2 11 2 3 2 13 ...
## $ CAtBat : int 293 3449 1624 5628 396 4408 214 509 341 5206 ...
## $ CHits : int 66 835 457 1575 101 1133 42 108 86 1332 ...
## $ CHmRun : int 1 69 63 225 12 19 1 0 6 253 ...
## $ CRuns : int 30 321 224 828 48 501 30 41 32 784 ...
## $ CRBI : int 29 414 266 838 46 336 9 37 34 890 ...
## $ CWalks : int 14 375 263 354 33 194 24 12 8 866 ...
## $ League : Factor w/ 2 levels "A","N": 1 2 1 2 2 1 2 1 2 1 ...
## $ Division : Factor w/ 2 levels "E","W": 1 2 2 1 1 2 1 2 2 1 ...
## $ PutOuts : int 446 632 880 200 805 282 76 121 143 0 ...
## $ Assists : int 33 43 82 11 40 421 127 283 290 0 ...
## $ Errors : int 20 10 14 3 4 25 7 9 19 0 ...
## $ Salary : num NA 475 480 500 91.5 750 70 100 75 1100 ...
## $ NewLeague: Factor w/ 2 levels "A","N": 1 2 1 2 2 1 1 1 2 1 ...
# Melihat beberapa baris pertama
head(Hitters)
## AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits CHmRun
## -Andy Allanson 293 66 1 30 29 14 1 293 66 1
## -Alan Ashby 315 81 7 24 38 39 14 3449 835 69
## -Alvin Davis 479 130 18 66 72 76 3 1624 457 63
## -Andre Dawson 496 141 20 65 78 37 11 5628 1575 225
## -Andres Galarraga 321 87 10 39 42 30 2 396 101 12
## -Alfredo Griffin 594 169 4 74 51 35 11 4408 1133 19
## CRuns CRBI CWalks League Division PutOuts Assists Errors
## -Andy Allanson 30 29 14 A E 446 33 20
## -Alan Ashby 321 414 375 N W 632 43 10
## -Alvin Davis 224 266 263 A W 880 82 14
## -Andre Dawson 828 838 354 N E 200 11 3
## -Andres Galarraga 48 46 33 N E 805 40 4
## -Alfredo Griffin 501 336 194 A W 282 421 25
## Salary NewLeague
## -Andy Allanson NA A
## -Alan Ashby 475.0 N
## -Alvin Davis 480.0 A
## -Andre Dawson 500.0 N
## -Andres Galarraga 91.5 N
## -Alfredo Griffin 750.0 A
# Melihat jumlah baris dan kolom
dim(Hitters)
## [1] 322 20
# Memeriksa jumlah missing value setiap variabel
colSums(is.na(Hitters))
## AtBat Hits HmRun Runs RBI Walks Years CAtBat
## 0 0 0 0 0 0 0 0
## CHits CHmRun CRuns CRBI CWalks League Division PutOuts
## 0 0 0 0 0 0 0 0
## Assists Errors Salary NewLeague
## 0 0 59 0
Berdasarkan enam baris pertama dataset Hitters, terlihat bahwa setiap baris merepresentasikan seorang pemain bisbol, sedangkan kolom menunjukkan karakteristik pemain, seperti jumlah kesempatan memukul (AtBat), jumlah pukulan berhasil (Hits), jumlah home run (HmRun), jumlah runs, jumlah RBI, jumlah walks, dan lama pengalaman bermain (Years). Sebagai contoh, Andy Allanson memiliki nilai AtBat sebesar 293, Hits sebesar 66, HmRun sebesar 1, Runs sebesar 30, RBI sebesar 29, Walks sebesar 14, dan Years sebesar 1. Nilai-nilai tersebut menunjukkan adanya perbedaan karakteristik antar pemain. Dataset ini juga memiliki variabel Salary yang menjadi variabel respons dalam penelitian untuk memprediksi gaji pemain bisbol menggunakan metode Decision Tree (Regression Tree). Sebelum pemodelan dilakukan, jumlah missing value pada setiap variabel perlu diperiksa dan ditangani menggunakan fungsi na.omit() agar analisis dilakukan pada data yang lengkap.
# Menghapus baris yang memiliki missing value
Hitters.clean <- na.omit(Hitters)
# Memeriksa kembali missing value
colSums(is.na(Hitters.clean))
## AtBat Hits HmRun Runs RBI Walks Years CAtBat
## 0 0 0 0 0 0 0 0
## CHits CHmRun CRuns CRBI CWalks League Division PutOuts
## 0 0 0 0 0 0 0 0
## Assists Errors Salary NewLeague
## 0 0 0 0
# Melihat ukuran data setelah pembersihan
dim(Hitters.clean)
## [1] 263 20
Berdasarkan hasil pemeriksaan missing value, seluruh variabel pada dataset Hitters memiliki nilai 0, yang berarti tidak terdapat data hilang pada dataset setelah dilakukan penanganan menggunakan fungsi na.omit(). Selanjutnya, hasil fungsi dim() menunjukkan bahwa dataset memiliki 263 baris dan 20 kolom. Dengan demikian, terdapat 263 pemain bisbol yang menjadi objek pengamatan dan 20 variabel yang memuat informasi karakteristik pemain, termasuk Salary sebagai variabel respons serta variabel lainnya sebagai prediktor. Dataset tersebut selanjutnya digunakan untuk membangun model Decision Tree (Regression Tree) dalam memprediksi gaji pemain bisbol.
set.seed(234)
# Membagi data: 70% training dan 30% testing
indeks.train <- createDataPartition(
Hitters.clean$Salary,
p = 0.7,
list = FALSE
)
Hitters.train <- Hitters.clean[indeks.train, ]
Hitters.test <- Hitters.clean[-indeks.train, ]
# Memeriksa ukuran masing-masing data
nrow(Hitters.train)
## [1] 185
nrow(Hitters.test)
## [1] 78
Berdasarkan hasil pembagian data, fungsi createDataPartition() dengan proporsi 70% menghasilkan sebanyak 185 data training dan 78 data testing dari total 263 data pemain bisbol. Data training digunakan untuk membangun model Decision Tree (Regression Tree) dalam memprediksi variabel Salary, sedangkan data testing digunakan untuk mengevaluasi kemampuan model dalam memprediksi data yang tidak digunakan selama proses pelatihan. Pembagian ini menghasilkan sekitar 70,34% data training dan 29,66% data testing, sesuai dengan proporsi pembagian yang ditentukan.
fit.tree <- rpart(
Salary ~ .,
data = Hitters.train,
method = "anova",
control = rpart.control(cp = 0.001)
)
# Menampilkan ringkasan model
print(fit.tree)
## n= 185
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 185 37300170.00 529.3190
## 2) CRBI< 300.5 107 7781241.00 296.1480
## 4) CAtBat< 1447 71 4787307.00 205.7113
## 8) RBI>=16 64 451745.40 169.8464
## 16) CRuns< 101.5 37 43273.30 114.7297 *
## 17) CRuns>=101.5 27 142042.10 245.3766
## 34) Years< 3.5 10 6090.00 186.0000 *
## 35) Years>=3.5 17 79957.63 280.3039 *
## 9) RBI< 16 7 3500575.00 533.6190 *
## 5) CAtBat>=1447 36 1267980.00 474.5093
## 10) Walks< 60.5 27 759116.70 418.9753
## 20) Division=W 14 300819.20 361.2381 *
## 21) Division=E 13 361367.20 481.1538 *
## 11) Walks>=60.5 9 175788.90 641.1111 *
## 3) CRBI>=300.5 78 15721120.00 849.1817
## 6) Hits< 122.5 32 1830184.00 593.1771
## 12) HmRun< 7.5 16 724360.00 484.0104 *
## 13) HmRun>=7.5 16 724468.40 702.3438 *
## 7) Hits>=122.5 46 10334770.00 1027.2720
## 14) CHmRun< 256.5 39 5352320.00 917.2857
## 28) Years>=9.5 23 1423979.00 753.5352
## 56) CRuns< 751.5 13 361905.40 629.9725 *
## 57) CRuns>=751.5 10 605568.10 914.1667 *
## 29) Years< 9.5 16 2425068.00 1152.6770 *
## 15) CHmRun>=256.5 7 1882174.00 1640.0520 *
Hasil print(fit.tree) menunjukkan bahwa model Regression Tree dibentuk menggunakan 185 data pemain. Pemisahan pertama dilakukan berdasarkan variabel CRBI dengan batas 300,5. Pemain dengan CRBI < 300,5 memiliki rata-rata gaji sebesar 296,148, sedangkan pemain dengan CRBI ≥ 300,5` memiliki rata-rata gaji sebesar 849,182. Selanjutnya, pohon membagi data berdasarkan variabel lain, seperti CAtBat, Hits, RBI, Years, dan CHmRun, untuk menghasilkan kelompok dengan prediksi gaji yang berbeda. Nilai yval menunjukkan rata-rata gaji yang diprediksi pada setiap node, n menunjukkan jumlah pemain, dan deviance menunjukkan variasi gaji dalam kelompok. Tanda * menandakan node terminal atau kelompok akhir. Prediksi gaji tertinggi pada node terminal adalah 1.640,052. Model ini selanjutnya perlu melalui proses pruning untuk menyederhanakan pohon dan mengevaluasi kinerja prediksinya.
rpart.plot(
fit.tree,
type = 2,
extra = 101,
fallen.leaves = TRUE,
main = "Regression Tree untuk Prediksi Salary"
)
Gambar pohon regresi menunjukkan bahwa variabel CRBI menjadi pemisah pertama dalam memprediksi Salary. Dari 185 pemain, sebanyak 58% memiliki CRBI kurang dari 301 dengan rata-rata gaji sebesar 296, sedangkan 42% memiliki CRBI minimal 301 dengan rata-rata gaji sebesar 849. Selanjutnya, pemisahan data dilakukan berdasarkan variabel lain, seperti CAtBat, Hits, RBI, Walks, HmRun, dan CHmRun. Prediksi gaji tertinggi sebesar 1.640 terdapat pada kelompok pemain dengan CRBI minimal 301, Hits minimal 123, dan CHmRun minimal 257. Sementara itu, prediksi gaji terendah sebesar 115 terdapat pada kelompok pemain dengan CRBI kurang dari 301, CAtBat kurang dari 1.447, RBI minimal 16, dan CRuns kurang dari 102. Hasil ini menunjukkan bahwa statistik performa dan pengalaman bermain digunakan untuk membentuk kelompok pemain dengan prediksi gaji yang berbeda.
importance.tree <- fit.tree$variable.importance
importance.tree
## CRBI CRuns CHits CAtBat Years CWalks
## 18006203.09 16275302.12 15846822.12 15773269.72 12575599.24 11352010.78
## Hits CHmRun AtBat Runs RBI Walks
## 3995824.17 3746799.11 3626215.94 3249147.01 3101676.38 2436801.19
## HmRun PutOuts Division
## 1520655.45 553921.48 96930.34
# Mengubah variable importance menjadi data frame
importance.df <- data.frame(
Variabel = names(importance.tree),
Importance = as.numeric(importance.tree)
) %>%
arrange(desc(Importance))
print(importance.df)
## Variabel Importance
## 1 CRBI 18006203.09
## 2 CRuns 16275302.12
## 3 CHits 15846822.12
## 4 CAtBat 15773269.72
## 5 Years 12575599.24
## 6 CWalks 11352010.78
## 7 Hits 3995824.17
## 8 CHmRun 3746799.11
## 9 AtBat 3626215.94
## 10 Runs 3249147.01
## 11 RBI 3101676.38
## 12 Walks 2436801.19
## 13 HmRun 1520655.45
## 14 PutOuts 553921.48
## 15 Division 96930.34
# Visualisasi variable importance
ggplot(
importance.df,
aes(
x = reorder(Variabel, Importance),
y = Importance
)
) +
geom_col(fill = "cadetblue") +
coord_flip() +
theme_minimal() +
labs(
title = "Variable Importance Regression Tree",
x = "Variabel Prediktor",
y = "Tingkat Kepentingan"
)
Berdasarkan grafik Variable Importance Regression Tree, variabel CRBI memiliki tingkat kepentingan tertinggi dalam memprediksi Salary, diikuti oleh CRuns, CHits, dan CAtBat. Variabel Years dan CWalks juga memiliki tingkat kepentingan yang cukup tinggi, sedangkan Division memiliki tingkat kepentingan paling rendah. Hasil ini menunjukkan bahwa statistik performa kumulatif pemain sepanjang karier, seperti jumlah RBI, run, hit, dan jumlah pukulan, berperan penting dalam memprediksi gaji pemain. Semakin tinggi nilai kepentingan suatu variabel, semakin besar kontribusinya dalam proses pembentukan pohon regresi.
pred.tree <- predict(
fit.tree,
newdata = Hitters.test
)
# Menghitung Mean Squared Error (MSE)
mse.awal <- mean(
(Hitters.test$Salary - pred.tree)^2
)
cat("MSE model awal:", mse.awal, "\n")
## MSE model awal: 80020.62
Hasil evaluasi menunjukkan bahwa model Regression Tree awal memperoleh nilai Mean Squared Error (MSE) sebesar 80.020,62 pada data pengujian. Nilai tersebut menunjukkan rata-rata kuadrat selisih antara gaji aktual dan gaji hasil prediksi model. Nilai MSE ini digunakan sebagai acuan untuk mengevaluasi kinerja model setelah proses pruning. Semakin kecil nilai MSE, semakin baik ketepatan prediksi model.
# Menampilkan tabel kompleksitas pohon
printcp(fit.tree)
##
## Regression tree:
## rpart(formula = Salary ~ ., data = Hitters.train, method = "anova",
## control = rpart.control(cp = 0.001))
##
## Variables actually used in tree construction:
## [1] CAtBat CHmRun CRBI CRuns Division Hits HmRun RBI
## [9] Walks Years
##
## Root node error: 37300166/185 = 201623
##
## n= 185
##
## CP nsplit rel error xerror xstd
## 1 0.3699126 0 1.00000 1.01127 0.16904
## 2 0.0953392 1 0.63009 0.69445 0.14286
## 3 0.0831170 2 0.53475 0.73597 0.13762
## 4 0.0462720 3 0.45163 0.69821 0.13559
## 5 0.0403020 4 0.40536 0.66768 0.13365
## 6 0.0223856 5 0.36506 0.58019 0.12556
## 7 0.0122387 6 0.34267 0.59338 0.12585
## 8 0.0102240 7 0.33043 0.58679 0.12543
## 9 0.0089296 8 0.32021 0.59549 0.12777
## 10 0.0071429 9 0.31128 0.59159 0.12783
## 11 0.0025987 10 0.30414 0.58683 0.12819
## 12 0.0015012 11 0.30154 0.60006 0.13284
## 13 0.0010000 12 0.30004 0.60041 0.13284
# Visualisasi cross-validation error
plotcp(
fit.tree,
main = "Pemilihan CP pada Regression Tree"
)
# Menentukan CP dengan nilai xerror terkecil
bestcp <- fit.tree$cptable[
which.min(fit.tree$cptable[, "xerror"]),
"CP"
]
cat("CP terbaik:", bestcp, "\n")
## CP terbaik: 0.02238561
Berdasarkan grafik pemilihan Complexity Parameter (CP), nilai cross-validation error cenderung menurun seiring bertambahnya ukuran pohon, kemudian relatif stabil. Nilai cross-validation error terendah terlihat pada ukuran pohon sekitar 6 hingga 11. Nilai CP terbaik ditentukan berdasarkan nilai xerror terkecil pada tabel printcp(fit.tree). Nilai CP tersebut digunakan dalam proses pruning untuk menyederhanakan pohon regresi dengan tetap mempertahankan kemampuan prediksinya. Setelah itu, model hasil pruning dievaluasi kembali menggunakan MSE untuk mengetahui apakah kinerjanya lebih baik dibandingkan model awal.
pruned.tree <- prune(
fit.tree,
cp = bestcp
)
# Menampilkan model setelah pruning
print(pruned.tree)
## n= 185
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 185 37300170 529.3190
## 2) CRBI< 300.5 107 7781241 296.1480
## 4) CAtBat< 1447 71 4787307 205.7113 *
## 5) CAtBat>=1447 36 1267980 474.5093 *
## 3) CRBI>=300.5 78 15721120 849.1817
## 6) Hits< 122.5 32 1830184 593.1771 *
## 7) Hits>=122.5 46 10334770 1027.2720
## 14) CHmRun< 256.5 39 5352320 917.2857
## 28) Years>=9.5 23 1423979 753.5352 *
## 29) Years< 9.5 16 2425068 1152.6770 *
## 15) CHmRun>=256.5 7 1882174 1640.0520 *
# Visualisasi pohon setelah pruning
rpart.plot(
pruned.tree,
type = 2,
extra = 101,
fallen.leaves = TRUE,
main = "Regression Tree Setelah Pruning"
)
Gambar Regression Tree setelah pruning menunjukkan bahwa pohon menjadi lebih sederhana karena beberapa cabang dihilangkan. Pemisahan pertama tetap menggunakan variabel CRBI dengan batas 301. Pemain dengan CRBI kurang dari 301 memiliki rata-rata prediksi gaji sebesar 296, sedangkan pemain dengan CRBI minimal 301 memiliki rata-rata prediksi gaji sebesar 849. Pemisahan selanjutnya menggunakan variabel CAtBat, Hits, CHmRun, dan Years. Prediksi gaji tertinggi sebesar 1.640 terdapat pada kelompok pemain dengan CRBI minimal 301, Hits minimal 123, dan CHmRun minimal 257. Sementara itu, prediksi gaji terendah sebesar 206 terdapat pada kelompok pemain dengan CRBI kurang dari 301 dan CAtBat kurang dari 1.447. Dengan demikian, proses pruning menghasilkan pohon yang lebih ringkas dan mudah diinterpretasikan, tetapi kinerja prediksinya tetap perlu dibandingkan menggunakan nilai MSE model awal dan model setelah pruning.
pred.prune <- predict(
pruned.tree,
newdata = Hitters.test
)
# Menghitung MSE setelah pruning
mse.prune <- mean(
(Hitters.test$Salary - pred.prune)^2
)
cat("MSE setelah pruning:", mse.prune, "\n")
## MSE setelah pruning: 75515.11
Hasil evaluasi menunjukkan bahwa model Regression Tree setelah pruning memperoleh nilai MSE sebesar 75.515,11, lebih rendah dibandingkan model awal sebesar 80.020,62.
hasil.evaluasi <- data.frame(
Model = c(
"Regression Tree Awal",
"Regression Tree Setelah Pruning"
),
MSE = c(
mse.awal,
mse.prune
)
)
print(hasil.evaluasi)
## Model MSE
## 1 Regression Tree Awal 80020.62
## 2 Regression Tree Setelah Pruning 75515.11
Berdasarkan tabel evaluasi, model Regression Tree awal memperoleh nilai MSE sebesar 80.020,62, sedangkan model setelah pruning memperoleh MSE sebesar 75.515,11. Penurunan MSE sebesar 4.505,51 menunjukkan bahwa proses pruning meningkatkan ketepatan prediksi model. Dengan demikian, model Regression Tree setelah pruning lebih baik dalam memprediksi gaji pemain pada data pengujian karena memiliki nilai MSE yang lebih rendah.
Decision Tree merupakan metode pembelajaran mesin yang membentuk model berupa struktur pohon untuk mengklasifikasikan data berdasarkan atribut atau variabel prediktor. Metode CART (Classification and Regression Tree) membangun pohon keputusan melalui proses pemisahan data secara rekursif menjadi dua kelompok pada setiap simpul (binary split). Pada klasifikasi, CART menggunakan indeks Gini (Gini impurity) untuk mengukur tingkat ketidakmurnian kelas pada suatu simpul. Pemisahan terbaik dipilih berdasarkan penurunan nilai ketidakmurnian terbesar sehingga setiap simpul akhir (terminal node) cenderung memiliki anggota dari kelas yang sama. Hasil klasifikasi ditentukan berdasarkan kelas mayoritas pada simpul akhir tempat suatu pengamatan berada. Untuk menghindari pohon yang terlalu kompleks dan mengurangi risiko overfitting, CART dapat menerapkan proses pemangkasan pohon (pruning).
Pembangunan model Classification Tree menggunakan algoritma CART dilakukan melalui beberapa tahapan. Pertama, menyiapkan data yang terdiri atas variabel respons kategorik dan variabel prediktor, kemudian melakukan prapemrosesan data jika diperlukan. Kedua, menghitung nilai indeks Gini pada simpul awal untuk mengetahui tingkat ketidakmurnian kelas. Ketiga, mengevaluasi berbagai kemungkinan pemisahan berdasarkan variabel prediktor dan memilih pemisahan yang menghasilkan penurunan ketidakmurnian terbesar. Keempat, mengulangi proses pemisahan secara rekursif pada setiap simpul hingga memenuhi kriteria penghentian yang ditentukan. Kelima, melakukan pemangkasan (pruning) untuk memperoleh struktur pohon yang lebih sederhana dan mengurangi overfitting. Keenam, mengevaluasi kinerja model menggunakan data pengujian dengan ukuran evaluasi, seperti confusion matrix, akurasi, presisi, recall, dan F1-score. Model akhir kemudian digunakan untuk mengklasifikasikan pengamatan baru berdasarkan aturan keputusan yang terbentuk pada pohon.
Berdasarkan hasil analisis, metode Regression Tree dapat digunakan untuk memprediksi gaji pemain berdasarkan statistik performa dan pengalaman bermain. Variabel CRBI menjadi pemisah utama dalam pembentukan pohon, diikuti oleh variabel seperti CRuns, CHits, dan CAtBat yang memiliki tingkat kepentingan tinggi. Evaluasi model menunjukkan bahwa Regression Tree awal menghasilkan MSE sebesar 80.020,62, sedangkan setelah proses pruning nilai MSE menurun menjadi 75.515,11. Penurunan tersebut menunjukkan bahwa pruning meningkatkan ketepatan prediksi model. Dengan demikian, model Regression Tree setelah pruning dipilih sebagai model yang lebih baik karena memiliki struktur lebih sederhana dan nilai kesalahan prediksi yang lebih rendah.
Dalam membuat laporan praktikum ini penulis menyarankan untuk selalu memperhatikan sintaks pada program R yang digunakan. Selain itu, perlu untuk memperhatikan tata cara penulisan yang sesuai dengan KBBI dan penulisan yang bercetak tebal. Sehingga dapat menghasilkan laporan yang baik
Abedinia, A., & Seydi, V. (2024). Building semi-supervised decision trees with semi-cart algorithm. International Journal of Machine Learning and Cybernetics, 15(10), 4493–4510. https://doi.org/10.1007/s13042-024-02161-z
Alharbi, A. A. (2024). Classification Performance Analysis of Decision Tree-Based Algorithms with Noisy Class Variable. Discrete Dynamics in Nature and Society, 2024. https://doi.org/10.1155/2024/6671395
Blockeel, H., Devos, L., Frénay, B., Nanfack, G., & Nijssen, S. (2023). Decision trees: from efficient prediction to responsible AI. In Frontiers in Artificial Intelligence (Vol. 6). Frontiers Media SA. https://doi.org/10.3389/frai.2023.1124553
Chen, Y., Cheung, K. C., Sun, R. Z., & Yam, S. C. P. (2024). A user guide of CART and random forests with applications in FinTech and InsurTech. Japanese Journal of Statistics and Data Science, 7(2), 999–1038. https://doi.org/10.1007/s42081-024-00258-x
Cheng, Y., & Shi, Q. (2023). PCMIgr: a fast packet classification method based on information gain ratio. Journal of Supercomputing, 79(7), 7414–7437. https://doi.org/10.1007/s11227-022-04951-0.
Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu.
Liu, Y., & Yang, S. (2022). Application of Decision Tree-Based Classification Algorithm on Content Marketing. Journal of Mathematics, 2022. https://doi.org/10.1155/2022/6469054