BAB I PENDAHULUAN

1.1 Latar Belakang

   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.2 Rumusan Masalah

 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.3 Tujuan

 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

1.4 Batasan Masalah

   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!

BAB II TINJAUAN PUSTAKA

2.1 Decision Tree

  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

2.2 Classification Tree

   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) \]

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

   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)..

3.2 Variabel Penelitian

   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.

3.3 Analisis Data

   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.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library

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

Intepretasi Hasil 4.1

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.

4.2 Menangani Missing Value

# 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

Intepretasi Hasil 4.2

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.

4.3 Membagi Data Training dan Testing

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

Intepretas Hasil 4.3

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.

4.4 Membangun Regression Tree

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 *

Intepretasi Hasil 4.4

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.

4.5 Visualisasi Regression Tree

rpart.plot(
  fit.tree,
  type = 2,
  extra = 101,
  fallen.leaves = TRUE,
  main = "Regression Tree untuk Prediksi Salary"
)

Intepretasil Hasil 4.5

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.

4.6 Analisis Variable Importance

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"
  )

Intepretasi Hasil 4.6

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.

4.7 Prediksi dan Evaluasi Model Awal

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

Intepretasi Hasil 4.7

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.

4.8 Menentuka CP Terbaik

# 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

Intepretasi Hasil 4.8

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.

4.9 Pruning Regression Tree

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"
)

Intepretasi Hasil 4.9

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.

4.10 Prediksi dan Evaluasi 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

Intepretasi Hasil 4.10

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.

4.11 Membandingkan MSE sebelum dan Sesudah Pruning

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

Intepretasi Hasil 4.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.

BAB V KESIMPULAN

5.1 Kesimpulan

   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.

5.2 Saran

   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

DAFTAR PUSTAKA

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