Perkembangan teknologi informasi menyebabkan meningkatnya jumlah data yang dihasilkan dalam berbagai bidang, sehingga diperlukan metode analisis data yang efektif dan efisien. Salah satu metode dalam data mining adalah decision tree atau pohon keputusan, yaitu metode yang merepresentasikan proses pengambilan keputusan dalam bentuk struktur pohon berdasarkan variabel-variabel prediktor. Metode ini memiliki keunggulan dalam hal interpretasi, karena proses pengambilan keputusan dapat dipahami melalui aturan yang terbentuk. Selain itu, decision tree mampu menangani data numerik maupun kategorikal sehingga dapat diterapkan dalam berbagai permasalahan analisis data (Mellina, Suhartono, dan Yaqin, 2024).
Salah satu algoritma pengembangan decision tree adalah Classification and Regression Tree (CART), yang digunakan untuk menyelesaikan permasalahan klasifikasi dan regresi. CART membentuk pohon keputusan melalui proses pemisahan data secara biner (binary splitting) berdasarkan variabel dan titik pemisah yang optimal. Pada Classification Tree, model digunakan untuk memprediksi kategori, sedangkan Regression Tree digunakan untuk memprediksi nilai kontinu. Kemampuan decision tree dalam mengidentifikasi pola hubungan antarvariabel tanpa memerlukan asumsi statistik yang kompleks menjadikannya bermanfaat dalam berbagai bidang, termasuk kesehatan dan prediksi stunting (Putri, Pradini, dan Anshori, 2024).
Meskipun mudah diinterpretasikan, decision tree memiliki kelemahan, seperti rentan terhadap overfitting dan sensitif terhadap perubahan data. Salah satu upaya untuk mengatasinya adalah melalui pruning atau pemangkasan pohon guna mengurangi kompleksitas model. Selain itu, pengembangan metode berbasis pohon melalui ensemble learning, seperti Random Forest, dapat meningkatkan stabilitas dan akurasi prediksi. Oleh karena itu, penerapan dan pengembangan decision tree, khususnya algoritma CART, penting untuk menghasilkan model analisis dan prediksi yang akurat, stabil, serta mudah dipahami (Patlisan dan Rusdah, 2023).
Decision Tree merupakan salah satu metode Supervised Learning berbasis pohon yang dapat digunakan untuk membentuk aturan prediksi. Pada metode ini, data dibagi secara bertahap melalui proses splitting berdasarkan variabel prediktor sehingga terbentuk kelompok-kelompok data yang semakin homogen. Setiap percabangan pada pohon menunjukkan aturan pemisahan sedangkan simpul akhir (leaf node) menunjukkan hasil prediksi. Pada permasalahan klasifikasi, Decision Tree membagi data berdasarkan nilai variabel prediktor hingga diperoleh kelompok yang memiliki kelas relatif homogen. Proses pemisahan dilakukan secara bertahap mulai dari simpul akar sampai simpul daun. Pemilihan variabel untuk pemisahan didasarkan pada kriteria tertentu agar menghasilkan kelompok yang semakin baik dalam membedakan kelas. Salah satu ukuran yang digunakan dalam pembentukan pohon klasifikasi adalah indeks Gini, yang mengukur tingkat ketidakmurnian suatu simpul (Mienye dan Jere, 2024).
Indeks Gini dirumuskan sebagai berikut:
\[ Gini(t) = 1 - \sum_{k=1}^{K} p_k^2 \] Keterangan:
Nilai indeks Gini yang semakin kecil menunjukkan bahwa observasi dalam simpul semakin didominasi oleh satu kelas. Sebaliknya, nilai yang semakin besar menunjukkan bahwa kelas dalam simpul lebih beragam. Oleh karena itu, pemisahan yang baik diharapkan dapat menghasilkan kelompok dengan tingkat ketidakmurnian yang lebih rendah (Mienye dan Jere, 2024).
Classification and Regression Tree (CART) merupakan algoritma pohon keputusan yang digunakan untuk menyelesaikan permasalahan klasifikasi maupun regresi. Pada klasifikasi, CART digunakan untuk memprediksi kategori respons, sedangkan pada regresi digunakan untuk memprediksi nilai numerik. Salah satu karakteristik CART adalah pemisahan data secara biner (binary split), yaitu setiap pemisahan membentuk dua kelompok berdasarkan variabel prediktor dan titik pemisahan tertentu (Mienye dan Jere, 2024).
Pada klasifikasi, CART dapat menggunakan indeks Gini untuk menentukan pemisahan terbaik. Kualitas suatu pemisahan dapat dihitung berdasarkan rata-rata tertimbang indeks Gini dari kedua kelompok yang terbentuk, yaitu:
\[ Gini_{split} =\frac{n_L}{n} Gini(L) +\frac{n_R}{n} Gini(R) \] Keterangan:
Pemisahan dipilih dengan mempertimbangkan nilai ketidakmurnian tertimbang yang lebih kecil dibandingkan alternatif pemisahan lainnya. Dengan demikian, data dapat dibagi secara bertahap hingga terbentuk pohon yang mampu membedakan kategori respons berdasarkan karakteristik variabel prediktor (Robbaniyyah dkk., 2026).
Pohon klasifikasi yang terbentuk dapat memiliki banyak cabang sehingga berisiko mengalami overfitting, yaitu ketika model terlalu menyesuaikan diri dengan data pelatihan dan kurang baik dalam memprediksi data baru. Untuk mengatasi hal tersebut, CART menyediakan proses pemangkasan pohon (pruning) guna menyederhanakan struktur pohon dan mengurangi cabang yang kurang diperlukan. Dalam proses ini, nilai Complexity Parameter (CP) dapat digunakan sebagai dasar untuk menentukan tingkat pemangkasan pohon (Mienye dan Jere, 2024).
Data yang digunakan dalam praktikum ini merupakan data kuantitatif
yang bersumber dari dataset sekunder Hitters dalam paket
ISLR pada RStudio. Dataset ini digunakan untuk membangun
model Decision Tree dengan pendekatan Regression Tree.
Sebelum pemodelan dilakukan, data diperiksa untuk mengetahui keberadaan
nilai hilang (missing value) dan ditangani menggunakan fungsi
na.omit().
Variabel penelitian terdiri atas variabel respons dan variabel
prediktor. Variabel respons yang digunakan adalah Salary, yaitu
gaji pemain bisbol dalam satuan ribuan dolar Amerika Serikat. Variabel
Salary merupakan variabel kuantitatif sehingga sesuai untuk
pemodelan regresi. Sedangkan, variabel prediktor merupakan variabel lain
dalam dataset Hitters yang digunakan untuk memprediksi
Salary, seperti pengalaman bermain, jumlah pertandingan, serta
statistik pukulan dan pertahanan pemain. Variabel-variabel tersebut
digunakan sebagai dasar pembentukan pohon regresi untuk mengidentifikasi
pola hubungan antara karakteristik pemain dan gaji yang diterima.
Langkah-langkah analisis yang dilakukan dalam praktikum Decision Tree menggunakan Regression Tree adalah sebagai berikut:
ISLR dan memuat dataset
Hitters ke dalam R.na.omit().Pada batasan masalah diminta untuk memprediksi variabel
Salary menggunakan algoritma Decision Tree
(Regression Tree) pada dataset Hitters dari
package ISLR. Tahapan yang diminta meliputi pengecekan dan
penanganan missing value menggunakan na.omit(),
pembagian data menjadi training dan testing,
pembentukan dan visualisasi tree, analisis variable
importance, prediksi dan evaluasi menggunakan Mean Squared
Error (MSE), penentuan nilai Complexity Parameter (CP)
terbaik, pruning, serta evaluasi kembali model menggunakan
MSE.
Tahap awal dilakukan dengan memuat library yang diperlukan
dan dataset Hitters dari paket ISLR. Variabel
Salary digunakan sebagai variabel respons, sedangkan
variabel lainnya menjadi prediktor dalam pemodelan.
Sintaks yang digunakan adalah sebagai berikut:
# Library
library(ISLR)
library(dplyr)
library(ggplot2)
library(caret)
library(rpart)
library(rpart.plot)
library(tibble)
library(forcats)
# Data
data(Hitters)
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 ...
## [1] 322 20
Hasil pemeriksaan awal juga menunjukkan bahwa variabel
Salary memiliki nilai yang hilang (NA). Kondisi tersebut
perlu ditangani sebelum pembagian data dan pemodelan dilakukan.
Missing value merupakan kondisi ketika suatu observasi tidak memiliki nilai pada variabel tertentu. Pemeriksaan dilakukan untuk mengetahui jumlah data yang hilang pada setiap variabel.
Sintaks yang digunakan adalah sebagai berikut:
## 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
## [1] 263 20
## 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
Hasil pemeriksaan menunjukkan bahwa variabel Salary
memiliki 59 missing value, sedangkan 19 variabel lainnya tidak
memiliki nilai hilang. Setelah dilakukan penghapusan menggunakan fungsi
na.omit(), jumlah data berkurang dari 322 menjadi 263
observasi dengan 20 variabel. Pemeriksaan ulang memastikan bahwa seluruh
data telah terbebas dari nilai hilang, sehingga dapat digunakan dalam
proses pemodelan regresi.
Splitting data merupakan proses membagi dataset menjadi data
training dan data testing. Data training
digunakan untuk membentuk model, sedangkan data testing
digunakan untuk mengevaluasi kemampuan model pada data yang tidak
digunakan selama proses pelatihan. Pembagian dataset dilakukan dengan
proporsi 70% data training dan 30% data testing
menggunakan fungsi createDataPartition().
Sintaks yang digunakan adalah sebagai berikut:
# Data Training dan Testing
set.seed(234)
train <- createDataPartition(
y = Hitters_clean$Salary,
p = 0.7,
list = FALSE
)
Hitters.train <- Hitters_clean[train, ]
Hitters.test <- Hitters_clean[-train, ]
dim(Hitters.train)## [1] 185 20
## [1] 78 20
Hasil pembagian menunjukkan bahwa data training terdiri atas 185 observasi dan 20 variabel, sedangkan data testing terdiri atas 78 observasi dan 20 variabel. Data training digunakan untuk membangun Regression Tree, sementara data testing digunakan untuk menghitung MSE.
Regression Tree merupakan metode pemodelan yang membagi data ke dalam sejumlah kelompok berdasarkan nilai prediktor, sehingga setiap kelompok memiliki nilai respons yang relatif serupa. Pada setiap simpul terminal, prediksi berupa rata-rata nilai respons dari observasi pada simpul tersebut.
Sintaks yang digunakan adalah sebagai berikut:
# Regression Tree
fit.tree <- rpart(
Salary ~ .,
data = Hitters.train,
method = "anova",
control = rpart.control(cp = 0.001)
)
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 *
# Visualisasi Tree
rpart.plot(
fit.tree,
type = 2,
extra = 101,
fallen.leaves = TRUE,
main = "Regression Tree untuk Prediksi Salary"
)Berdasarkan hasil pemodelan, simpul akar menghasilkan prediksi
Salary sebesar 529,319 dengan jumlah 185 observasi. Pemisahan
pertama menggunakan variabel CRBI pada nilai 300,5. Cabang
CRBI < 300,5 terdiri atas 107 observasi (58%) dengan
nilai prediksi 296,148, sedangkan cabang CRBI >= 300,5
mencakup 78 observasi (42%) dengan prediksi 849,182.
Pada cabang CRBI < 300,5, pemisahan dilanjutkan
dengan CAtBat pada nilai 1.447, kemudian menggunakan
RBI, CRuns, Years,
Walks, dan Division. Pada cabang
CRBI >= 300,5, pemisahan dilanjutkan dengan
Hits pada nilai 122,5, kemudian menggunakan
HmRun, CHmRun, Years, dan
CRuns. Hal ini menunjukkan bahwa model membentuk kelompok
pemain berdasarkan kombinasi akumulasi performa karier, pengalaman
bermain, dan statistik permainan.
Pohon awal memiliki 12 pemisahan dan 13 simpul terminal. Nilai prediksi simpul terminal terendah adalah 114,730 (37 observasi), sedangkan tertinggi adalah 1.640,052 (7 observasi). Kompleksitas ini memungkinkan model menangkap pola yang rinci, tetapi pohon yang terlalu besar berpotensi mengalami overfitting. Oleh karena itu, diperlukan evaluasi kesalahan prediksi dan penentuan CP terbaik sebelum dilakukan pruning.
Variable importance digunakan untuk mengetahui tingkat kepentingan setiap variabel prediktor dalam pembentukan model.
Sintaks yang digunakan adalah sebagai berikut:
## 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
importance_df <- data.frame(
Feature = names(importance),
Overall = as.numeric(importance)
) %>%
arrange(desc(Overall))
importance_df## Feature Overall
## 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
Hasil tersebut disajikan dalam diagram batang menggunakan sintaks berikut.
ggplot(
importance_df,
aes(x = fct_reorder(Feature, Overall), y = Overall)
) +
geom_col(fill = "cadetblue") +
coord_flip() +
theme_minimal() +
labs(
title = "Variable Importance pada Regression Tree",
x = "Variabel",
y = "Tingkat Kepentingan"
)Berdasarkan hasil analisis variable importance, terdapat 15
variabel yang memiliki nilai kepentingan dalam model. Variabel
CRBI menempati urutan tertinggi (18.006.203,09), diikuti
CRuns (16.275.302,12), CHits (15.846.822,12),
CAtBat (15.773.269,72), Years (12.575.599,24),
dan CWalks (11.352.010,78). Sementara itu,
Hits berada di urutan ketujuh dengan nilai 3.995.824,17,
sedangkan Division memiliki nilai terendah sebesar
96.930,34. Adapun variabel Assists, Errors,
League, dan NewLeague tidak tercatat dalam
hasil tersebut.
Hasil tersebut menunjukkan bahwa variabel akumulasi performa karier
dan pengalaman bermain paling berkontribusi terhadap pembentukan pohon.
Namun, CRBI, CRuns, CHits, dan
CAtBat sama-sama merupakan akumulasi statistik karier dan
kemungkinan saling berkorelasi. Karena variable importance pada
rpart ikut menghitung surrogate split, kontribusi
variabel-variabel tersebut saling tumpang tindih, sehingga selisih
antarvariabel tidak sebaiknya ditafsirkan terlalu tajam. Selain itu,
nilai variable importance menunjukkan kontribusi relatif dalam
model yang terbentuk, bukan bukti hubungan sebab-akibat terhadap
Salary.
Setelah model terbentuk, dilakukan prediksi terhadap data testing. Hasil prediksi dibandingkan dengan nilai aktual Salary untuk menghitung Mean Squared Error (MSE), yaitu rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi.
Sintaks yang digunakan adalah sebagai berikut:
# Prediksi dan Evaluasi MSE Sebelum Pruning
pred.tree <- predict(
fit.tree,
newdata = Hitters.test
)
mse_before <- mean(
(Hitters.test$Salary - pred.tree)^2
)
mse_before## [1] 80020.62
Berdasarkan hasil evaluasi, diperoleh MSE sebelum pruning sebesar 80.020,62. Nilai ini digunakan sebagai pembanding terhadap model setelah pruning, dengan nilai yang lebih rendah menunjukkan kesalahan prediksi yang lebih kecil pada data yang sama.
Complexity Parameter (CP) merupakan parameter yang mengendalikan kompleksitas pohon. Pemisahan dipertahankan hanya apabila memberikan penurunan galat relatif minimal sebesar nilai CP.
Sintaks yang digunakan adalah sebagai berikut:
##
## 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
## [1] 0.02238561
Berdasarkan hasil, nilai rel error terus menurun seiring
bertambahnya pemisahan, tetapi xerror berhenti membaik
setelah pemisahan kelima. Nilai xerror terkecil sebesar
0,58019 diperoleh pada 5 pemisahan, dengan CP terbaik sebesar
0,02238561. Pada grafik, titik ini berada di bawah garis putus-putus,
sedangkan penambahan pemisahan setelahnya tidak memberikan perbaikan
yang berarti. Oleh karena itu, CP sebesar 0,02238561 dipilih sebagai
dasar pruning.
Pruning merupakan proses menyederhanakan pohon dengan menghilangkan cabang yang kurang diperlukan berdasarkan nilai CP yang ditentukan. Proses ini bertujuan mengurangi kompleksitas model dan berpotensi memperbaiki kemampuan prediksi pada data baru.
Sintaks yang digunakan adalah sebagai berikut:
## 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 Tree Setelah Pruning
rpart.plot(
pruned.tree,
type = 2,
extra = 101,
fallen.leaves = TRUE,
main = "Regression Tree Setelah Pruning"
)Berdasarkan hasil, pohon setelah pruning menjadi jauh lebih
sederhana, yaitu dari 12 pemisahan (13 simpul terminal) menjadi 5
pemisahan (6 simpul terminal). Pohon tetap menggunakan CRBI
sebagai pemisahan awal. Pada cabang CRBI < 300,5,
pemisahan menggunakan CAtBat pada nilai 1.447 sehingga
terbentuk dua simpul terminal dengan prediksi 205,711 (71 observasi) dan
474,509 (36 observasi). Pada cabang CRBI >= 300,5,
pemisahan menggunakan Hits pada nilai 122,5. Kelompok dengan
Hits < 122,5 menjadi simpul terminal dengan prediksi
593,177 (32 observasi), sedangkan kelompok dengan
Hits >= 122,5 dipisah lagi berdasarkan
CHmRun dan Years menjadi tiga simpul terminal
dengan prediksi 753,535 (23 observasi), 1.152,677 (16 observasi), dan
1.640,052 (7 observasi).
Variabel RBI, CRuns, Walks,
Division, dan HmRun yang sebelumnya digunakan
sebagai pemisah pada pohon awal tidak lagi digunakan sebagai pemisahan
setelah pruning. Dengan demikian, model yang lebih
sederhana hanya mempertahankan lima variabel pemisah, yaitu
CRBI, CAtBat, Hits,
CHmRun, dan Years.
Selanjutnya, dihitung variable importance pada model setelah pruning.
# Variable Importance Setelah Pruning
importance_pruned <- pruned.tree$variable.importance
importance_pruned## CRBI CRuns CHits CAtBat Years CWalks AtBat
## 16886866.7 15507629.7 14858301.0 14777292.4 12482323.9 10975741.4 3581420.4
## Hits CHmRun Runs RBI Walks HmRun PutOuts
## 3556168.8 3100277.6 2555996.3 2000345.0 1889214.7 1111302.8 442896.8
Hasilnya menunjukkan bahwa CRBI tetap menjadi variabel
dengan tingkat kepentingan tertinggi, yaitu 16.886.866,7, diikuti
CRuns (15.507.629,7), CHits (14.858.301,0),
CAtBat (14.777.292,4), Years (12.482.323,9),
dan CWalks (10.975.741,4). Variabel Division
tidak lagi muncul, sehingga jumlah variabel yang tercatat berkurang dari
15 menjadi 14. Urutan variabel utama tidak berubah, sehingga variabel
akumulasi performa karier dan pengalaman bermain tetap memiliki
kontribusi relatif terbesar meskipun kompleksitas pohon telah
dikurangi.
Evaluasi model setelah pruning dilakukan dengan memprediksi Salary pada data testing yang sama, kemudian menghitung MSE.
# Prediksi dan Evaluasi MSE Setelah Pruning
pred.prune <- predict(
pruned.tree,
newdata = Hitters.test
)
mse_after <- mean(
(Hitters.test$Salary - pred.prune)^2
)
mse_after## [1] 75515.11
# Perbandingan MSE
hasil_mse <- data.frame(
Model = c("Sebelum Pruning", "Setelah Pruning"),
MSE = c(mse_before, mse_after)
)
hasil_mse## Model MSE
## 1 Sebelum Pruning 80020.62
## 2 Setelah Pruning 75515.11
Berdasarkan hasil evaluasi, diperoleh MSE setelah pruning sebesar 75.515,11. Nilai tersebut lebih rendah dibandingkan MSE sebelum pruning, yaitu 80.020,62. Perbandingan kedua model disajikan pada tabel berikut.
| Model | Jumlah Pemisahan | MSE |
|---|---|---|
| Sebelum pruning | 12 | 80.020,62 |
| Setelah pruning | 5 | 75.515,11 |
Penurunan MSE sebesar 4.505,51 atau sekitar 5,63% menunjukkan bahwa pada data testing yang digunakan, model setelah pruning memiliki kesalahan prediksi yang lebih rendah dengan struktur yang jauh lebih sederhana. Namun, evaluasi ini hanya berdasarkan satu kali pembagian data dengan 78 observasi testing, sehingga selisih tersebut dapat berubah apabila pembagian data berbeda.
Secara keseluruhan, analisis menggunakan dataset Hitters
menghasilkan model Regression Tree untuk memprediksi
Salary. Penanganan missing value dengan
na.omit() menghasilkan 263 observasi lengkap, yang dibagi
menjadi 185 observasi training dan 78 observasi
testing. Pada pohon awal, CRBI merupakan variabel
dengan tingkat kepentingan tertinggi dan sekaligus menjadi pemisah
pertama. CP terbaik yang diperoleh berdasarkan xerror
terkecil adalah 0,02238561. Setelah dilakukan pruning, jumlah
pemisahan berkurang dari 12 menjadi 5, sedangkan MSE turun dari
80.020,62 menjadi 75.515,11. Berdasarkan hasil tersebut, model setelah
pruning lebih sederhana dan memiliki kesalahan prediksi yang lebih
rendah pada data testing yang digunakan.
Decision Tree dalam metode klasifikasi bekerja dengan membagi data secara bertahap berdasarkan variabel prediktor yang paling optimal hingga terbentuk kelompok dengan kelas yang relatif homogen. Hasil pembagian tersebut menghasilkan aturan keputusan yang digunakan untuk menentukan kelas dari suatu observasi baru. Metode ini memiliki keunggulan karena mudah dipahami dan diinterpretasikan, sehingga dapat membantu proses pengambilan keputusan berdasarkan pola yang terdapat dalam data.
Pembentukan Regression Tree dilakukan melalui beberapa tahapan, yaitu pemeriksaan dan penanganan missing value, pembagian data menjadi data training dan testing, pembentukan serta visualisasi pohon, analisis variable importance, dan evaluasi hasil prediksi menggunakan Mean Squared Error (MSE). Kompleksitas pohon dapat dikendalikan menggunakan Complexity Parameter (CP), sedangkan proses pruning dilakukan untuk menyederhanakan pohon dengan menghilangkan cabang yang tidak diperlukan. Pemilihan CP dapat didasarkan pada nilai cross-validation error terkecil. MSE digunakan untuk mengukur rata-rata kuadrat kesalahan prediksi, dengan nilai yang lebih rendah menunjukkan kesalahan prediksi yang lebih kecil pada data yang dievaluasi.
Hasil penerapan Regression Tree pada dataset
Hitters menunjukkan bahwa 59 missing value pada
variabel Salary berhasil ditangani menggunakan
na.omit(), sehingga tersisa 263 observasi. Data tersebut
dibagi menjadi 185 observasi training dan 78 observasi
testing. Variabel CRBI memiliki tingkat
kepentingan tertinggi pada model awal, sedangkan CP terbaik yang
diperoleh adalah 0,02238561. Setelah dilakukan pruning, jumlah
pemisahan berkurang dari 12 menjadi 5. MSE juga mengalami penurunan dari
80.020,62 sebelum pruning menjadi 75.515,11 setelah
pruning, atau turun sekitar 5,63%. Hasil ini menunjukkan bahwa
model setelah pruning memiliki kesalahan prediksi yang lebih
rendah pada data testing yang digunakan.
Mellina, A. D. F., Suhartono, S., dan Yaqin, M. A. (2024). Algoritma Decision Tree untuk Prediksi Deteksi Penyakit Kanker Payudara. JISKA (Jurnal Informatika Sunan Kalijaga), 9(1), 70–78.
Mienye, I. D., & Jere, N. (2024). A survey of decision trees: Concepts, algorithms, and applications. IEEE Access, 12, 86716–86727. https://doi.org/10.1109/ACCESS.2024.3416838
Patlisan, P., dan Rusdah, R. (2023). Optimasi Akurasi Model Decision Tree menggunakan Random Forest Regression untuk Prediksi Kuantitas Pembelian Barang. Simetris: Jurnal Teknik Mesin, Industri, Elektro dan Ilmu Komputer, 14(2).
Putri, I. S. I., Pradini, R. S., dan Anshori, M. (2024). Decision Tree Tegression untuk Prediksi Prevalensi Stunting di Provinsi Nusa Tenggara Timur. Jurnal Teknologi Informatika dan Komputer, 10(2).
Robbaniyyah, N. A., Asmawati, I., & Bahri, S. (2026). Breast cancer classification model using decision tree algorithm. Jurnal Matematika, Statistika dan Komputasi, 22(3), 617–626. https://doi.org/10.20956/j.v22i3.49472