BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

   Perkembangan teknologi informasi menyebabkan jumlah data yang tersedia semakin meningkat, sehingga diperlukan metode yang tepat untuk mengolah data menjadi informasi yang bermanfaat. Salah satu teknik yang dapat digunakan adalah machine learning, yaitu metode yang memungkinkan komputer mempelajari pola dari data untuk menghasilkan prediksi atau klasifikasi. Salah satu algoritma yang digunakan dalam proses klasifikasi adalah Decision Tree. Menurut Nasrullah (2021), algoritma Decision Tree C4.5 dapat digunakan untuk mengklasifikasikan data dan memiliki keunggulan berupa hasil yang relatif mudah dipahami serta diinterpretasikan oleh manusia (Samiudin, 2018).
   Decision Tree atau pohon keputusan merupakan metode klasifikasi yang membentuk struktur menyerupai pohon berdasarkan atribut dan aturan keputusan tertentu. Struktur tersebut terdiri atas simpul akar (root node), simpul internal (internal node), cabang (branch), dan simpul daun (leaf node) yang menunjukkan hasil keputusan atau prediksi. Penerapan algoritma ini dapat ditemukan dalam berbagai bidang, seperti pendidikan, kesehatan, dan pengambilan keputusan. Decision Tree diterapkan untuk mengklasifikasikan data prediksi kelulusan mahasiswa dan memperoleh akurasi sebesar 87,93%. Hasil tersebut menunjukkan bahwa algoritma Decision Tree dapat dimanfaatkan untuk membantu proses klasifikasi berdasarkan karakteristik data (Elwahdiyah & Hartono, 2025).
   Berdasarkan uraian tersebut, praktikum kali ini untuk memahami konsep dasar dan tahapan penerapan algoritma pohon keputusan dalam analisis data. Melalui praktikum ini, mahasiswa diharapkan mampu memahami proses pembentukan pohon keputusan, menentukan atribut yang digunakan dalam klasifikasi, serta menginterpretasikan hasil pemodelan yang diperoleh. Selain itu, praktikum ini bertujuan untuk meningkatkan pemahaman mengenai penerapan algoritma Decision Tree dalam menyelesaikan permasalahan berbasis data serta mengevaluasi kemampuan model dalam menghasilkan klasifikasi yang sesuai.

1.2 Rumusan Masalah

   Berdasarkan latar belakang, rumusan masalah yang disimpulkan adalah:
   1. Bagaimana konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART?
   2. Bagaimana membangun model Classification Tree menggunakan algoritma CART?

1.3 Tujuan Penelitian

   Berdasarkan rumusan masalah, tujuan yang dapat disimpulkan adalah:
   1.  Menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART.
   2. Membangun model Classification Tree menggunakan algoritma CART.

1.4 Manfaat Penelitian

   Adapun manfaat pada penelitian ini, yaitu: 
   1. Bagi penulis
      a. Dapat memberikan informasi serta pengetahuan tentang  CART.
      b. Dapat menerapkan wawasan ilmu yang telah diperoleh dalam bidang statistika tentang CART.
   2. Bagi pembaca
      Menambah ilmu pengetahuan dan pemahaman yang berkaitan tentang  CART.

1.5 Batasan Masalah

  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 Pengertian CART (Classification and Regression Trees)

   CART (Classification and Regression Trees) merupakan metode statistik yang digunakan untuk melakukan klasifikasi dan regresi melalui pembentukan pohon keputusan. Metode ini membagi data menjadi dua kelompok pada setiap tahap pemisahan (binary split) berdasarkan variabel prediktor yang paling optimal. CART dapat digunakan untuk variabel respons kategorik maupun numerik sehingga penerapannya cukup luas dalam analisis data (Prabawati dkk., 2019).

2.2 Konsep Dasar CART

   CART memiliki beberapa komponen utama, yaitu root node sebagai simpul awal, internal node sebagai simpul pemisah, branch sebagai cabang yang menghubungkan simpul, dan leaf node sebagai simpul akhir yang menghasilkan prediksi. Dalam klasifikasi, CART menggunakan indeks Gini untuk menentukan pemisahan terbaik sehingga kelompok data yang terbentuk semakin homogen. Pemisahan dilakukan secara berulang hingga memenuhi kriteria penghentian tertentu (Pratiwi dkk., 2020).
   Tahapan pembentukan model CART meliputi pembentukan pohon klasifikasi, penentuan pemisahan terbaik, penghentian pertumbuhan pohon, dan pemangkasan (pruning). Pemisahan data dilakukan berdasarkan kriteria yang sesuai, seperti indeks Gini untuk klasifikasi. Pohon yang terbentuk kemudian dapat dipangkas untuk mengurangi kompleksitas model dan mencegah overfitting. Selanjutnya, kinerja model dievaluasi menggunakan data pengujian dengan metrik seperti akurasi, presisi, sensitivitas, dan F1-score (Pratiwi dkk., 2020).
   Pada Classification Tree, pemisahan data dilakukan dengan menentukan aturan yang dapat membentuk kelompok data dengan kelas yang semakin homogen.Beberapa ukuran yang digunakan dalam proses pemisahan tersebut antara lain Entropy, Information Gain, dan Gini Index (Fransiska, 2026).

1. Entropy

    Entropy digunakan untuk mengukur tingkat ketidakpastian atau ketidakmurnian kelas dalam suatu simpul. Semakin kecil nilai Entropy, semakin homogen simpul tersebut. Dirumuskan sebagai (Fransiska, 2026):

\[ \ \mathrm{Entropy}(t)=-\sum_{k=1}^{K}p_k\log_2(p_k) \ \] Semakin kecil nilai Entropy, semakin homogen data dalam suatu simpul. Sebaliknya, nilai Entropy semakin besar apabila proporsi kelas dalam simpul semakin seimbang. Jika seluruh amatan dalam suatu simpul berasal dari satu kelas yang sama, maka nilai Entropy sama dengan 0.

2. Information Gain

   Digunakan untuk mengukur seberapa besar tingkat ketidakpastian (Entropy) berkurang setelah dilakukan suatu split. Semakin besar nilai Information Gain, semakin baik pemisahan yang dilakukan karena kelompok data yang terbentuk menjadi semakin homogen. Jika suatu dataset 𝐷 dipartisi menjadi beberapa bagian 𝐷1,𝐷2,…,𝐷𝑗, maka Information Gain dirumuskan sebagai:

\[ \ IG=E(D)-\sum_{j=1}^{J}\frac{|D_j|}{|D|}E(D_j) \ \]

Jika data hanya dibagi menjadi dua bagian, yaitu 𝐷1 dan 𝐷2 maka rumusnya dapat ditulis sebagai:

\[ \ IG=E(D)-\left[\frac{|D_1|}{|D|}E(D_1)+\frac{|D_2|}{|D|}E(D_2)\right] \ \]

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

\[ \ \mathrm{Gini}(t)=1-\sum_{k=1}^{K}p_k^2 \ \]

Jika dataset 𝐷 dipartisi menjadi dua bagian 𝐷1 dan 𝐷2, maka nilai Gini setelah pemisahan dihitung menggunakan rata-rata terbobot:

\[ \ \mathrm{Gini}_{\mathrm{split}}= \frac{|D_1|}{|D|}\mathrm{Gini}(D_1) +\frac{|D_2|}{|D|}\mathrm{Gini}(D_2) \ \]

4. Pengulangan Perhitungan

Proses perhitungan entropy dan gain diulang secara rekursif pada setiap node hingga seluruh data terpartisi sempurna atau tidak ada lagi atribut yang dapat dipartisi (Fatah & Kholishah, 2026).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

   Jenis data pada penelitian ini adalah data kuantitatif. Data kuantitatif merupakan data atau informasi yang didapatkan dalam bentuk angka atau numerik. Pada batasan masalah, data yang digunakan adalah dataset BreastCancer dari package mlbench pada program R, yang digunakan untuk klasifikasi kondisi kanker payudara. Sumber data yang digunakan adalah data sekunder. Data sekunder adalah data yang telah dikumpulkan dan diolah sebelumnya oleh pihak lain, bukan oleh peneliti yang sedang melakukan penelitian saat ini. Data sekunder yang digunakan pada penelitian ini berasal dari dataset program R.

3.2 Variabel Penelitian

   Variabel penelitian adalah atribut atau nilai yang memiliki variasi tertentu dan dipilih peneliti untuk dianalisis.Variabel yang digunakan yaitu Class, Cl.thickness (ketebalan gumpalan sel), Cell.size (keseragaman ukuran sel), Cell.shape (keseragaman bentuk sel), Marg.adhesion (perlekatan sel), Epith.c.size (ukuran sel epitel), Bare.nuclei (kondisi inti sel), Bl.cromatin (struktur kromatin sel), Normal.nucleoli (kondisi nukleolus sel), dan Mitoses (aktivitas pembelahan sel). Variabel Class menunjukkan kondisi kanker payudara yang dikategorikan menjadi benign (jinak) dan malignant (ganas).

3.3 Langkah-langkah Analisis

   Berikut adalah algoritma untuk menyelesaiankan batasan masalah:
   1. Mulai.
  1. Memanggil package yang diperlukan, yaitu ISLR, dplyr, rpart, rpart.plot, caret, ggplot2, dan tibble.
  2. Memanggil dataset Hitters dan memeriksa struktur serta ukuran data.
  3. Memeriksa keberadaan missing value pada setiap variabel.
  4. Menangani missing value dengan menghapus baris yang mengandung data hilang menggunakan fungsi na.omit().
  5. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% dengan menetapkan seed agar hasil pembagian data dapat direproduksi.
  6. Membangun model Decision Tree (Regression Tree) dengan variabel Salary sebagai variabel respons dan seluruh variabel lainnya sebagai prediktor menggunakan fungsi rpart() dengan metode anova.
  7. Menampilkan dan memvisualisasikan struktur pohon regresi menggunakan fungsi rpart.plot().
  8. Mengidentifikasi tingkat kepentingan masing-masing variabel prediktor (variable importance) serta menyajikannya dalam bentuk tabel dan grafik.
  9. Melakukan prediksi nilai Salary pada data testing menggunakan model awal.
  10. Mengevaluasi kinerja model awal dengan menghitung nilai Mean Squared Error (MSE).
  11. Menentukan nilai Complexity Parameter (CP) terbaik berdasarkan nilai cross-validation error (xerror) terkecil pada tabel kompleksitas pohon.
  12. Melakukan pruning untuk menyederhanakan struktur pohon menggunakan fungsi prune() berdasarkan nilai CP terpilih.
  13. Memvisualisasikan pohon regresi setelah proses pruning.
  14. Melakukan prediksi kembali pada data testing menggunakan model setelah pruning.
  15. Menghitung nilai MSE setelah pruning dan membandingkannya dengan MSE model awal untuk mengevaluasi perubahan kinerja model.
  16. Selesai.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library

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

Interpretasi

Berdasarkan tampilan awal dataset Hitters, data memuat informasi mengenai performa dan pengalaman setiap pemain bisbol, yang disajikan dalam bentuk baris dan kolom. Variabel yang tersedia meliputi AtBat, Hits, HmRun, Runs, RBI, Walks, dan Years, yang masing-masing menggambarkan aspek permainan serta pengalaman pemain. Perbedaan nilai pada variabel-variabel tersebut memperlihatkan bahwa setiap pemain memiliki karakteristik yang beragam. Dalam analisis ini, variabel Salary digunakan sebagai target prediksi, sedangkan variabel lainnya berfungsi sebagai prediktor dalam pembentukan model Regression Tree. Sebelum model dibangun, kelengkapan data diperiksa terlebih dahulu dan observasi yang mengandung nilai hilang dihapus menggunakan fungsi na.omit() agar proses analisis menggunakan data yang lengkap.

4.2 Handling 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

Hasil pengolahan dataset Hitters menunjukkan bahwa data telah melalui proses pembersihan menggunakan fungsi na.omit(), sehingga observasi yang mengandung nilai hilang tidak disertakan dalam analisis. Dataset yang digunakan memiliki ukuran 263 × 20, yaitu 263 observasi pemain bisbol dengan 20 variabel yang merepresentasikan karakteristik masing-masing pemain. Pada pemodelan ini, Salary ditetapkan sebagai variabel yang akan diprediksi, sementara 19 variabel lainnya digunakan sebagai faktor penjelas. Data tersebut kemudian dianalisis menggunakan metode Regression Tree untuk membentuk model prediksi gaji pemain bisbol berdasarkan karakteristik yang tersedia.

4.3 Pembagian 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

Intepretasi Hasil 4.3

Proses pemisahan dataset menggunakan fungsi createDataPartition() menghasilkan 185 observasi untuk data training dan 78 observasi untuk data testing dari keseluruhan 263 pemain bisbol. Data training mencakup sekitar 70,34% dari total pengamatan dan dimanfaatkan untuk membentuk model Regression Tree dengan Salary sebagai variabel yang diprediksi. Sementara itu, 29,66% data testing digunakan untuk mengukur kemampuan model dalam menghasilkan prediksi pada observasi yang tidak dilibatkan dalam pembentukan model. Pembagian ini memungkinkan evaluasi kinerja model dilakukan secara terpisah dari proses pelatihan.

4.4 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

Berdasarkan output print(fit.tree), model Regression Tree dibangun menggunakan 185 observasi pemain bisbol pada data training. Pembagian awal pohon menggunakan variabel CRBI dengan titik pemisah 300,5, yang menghasilkan rata-rata gaji sebesar 296,148 untuk kelompok dengan CRBI di bawah 300,5 dan 849,182 untuk kelompok dengan CRBI minimal 300,5. Proses pemisahan berlanjut menggunakan variabel lain, seperti CAtBat, Hits, RBI, Years, dan CHmRun, untuk membentuk kelompok pemain berdasarkan karakteristik yang berkaitan dengan gaji. Pada output tersebut, yval menunjukkan nilai prediksi gaji pada setiap node, n menyatakan jumlah observasi, sedangkan deviance menggambarkan tingkat variasi nilai respons dalam kelompok. Simbol * menandai node terminal yang tidak mengalami pemisahan lebih lanjut, dengan prediksi gaji tertinggi sebesar 1.640,052. Tahap berikutnya adalah melakukan pruning untuk menyederhanakan struktur pohon dan mengevaluasi kemampuan model dalam memprediksi gaji pemain bisbol.

4.5 Visulisasi Regression Tree

rpart.plot(
  fit.tree,
  type = 2,
  extra = 101,
  fallen.leaves = TRUE,
  main = "Classification Tree untuk Klasifikasi Kanker Payudara"
)

Intepretasi Hasil 4.5

BBerdasarkan visualisasi pohon regresi, CRBI menjadi variabel utama yang menentukan pemisahan awal data pemain bisbol dalam memprediksi Salary. Sekitar 58% pemain memiliki CRBI di bawah 301 dengan prediksi gaji rata-rata sebesar 296, sedangkan 42% pemain lainnya memiliki CRBI minimal 301 dengan prediksi rata-rata sebesar 849. Pembentukan cabang berikutnya melibatkan variabel CAtBat, Hits, RBI, Walks, HmRun, dan CHmRun untuk menghasilkan kelompok pemain dengan estimasi gaji yang beragam. Prediksi gaji tertinggi, yaitu 1.640, diperoleh pada kelompok pemain dengan CRBI minimal 301, Hits minimal 123, dan CHmRun minimal 257. Sebaliknya, prediksi terendah sebesar 115 terdapat pada kelompok dengan CRBI di bawah 301, CAtBat di bawah 1.447, RBI minimal 16, dan CRuns di bawah 102. Hal ini menunjukkan bahwa kombinasi statistik performa dan pengalaman pemain menjadi dasar pembentukan kelompok dengan prediksi gaji yang berbeda.

4.6 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 = "pink") +
  coord_flip() +
  theme_minimal() +
  labs(
    title = "Variable Importance Regression Tree",
    x = "Variabel Prediktor",
    y = "Tingkat Kepentingan"
  )

Intepretasi Hasil 4.6

Grafik Variable Importance Regression Tree memperlihatkan bahwa CRBI menjadi variabel dengan kontribusi terbesar dalam memperkirakan Salary, disusul oleh CRuns, CHits, dan CAtBat. Selain itu, Years dan CWalks turut memberikan pengaruh yang relatif besar, sedangkan Division memiliki kontribusi paling kecil. Hal ini mengindikasikan bahwa catatan performa pemain yang terakumulasi selama kariernya, seperti RBI, run, hit, dan jumlah at-bat, menjadi faktor penting dalam estimasi gaji. Variabel dengan nilai kepentingan lebih tinggi memiliki peranan yang lebih besar dalam menentukan pembentukan cabang dan hasil prediksi pada model 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

Berdasarkan hasil pengujian, model Regression Tree sebelum dilakukan pruning menghasilkan nilai Mean Squared Error (MSE) sebesar 80.020,62. Nilai ini menggambarkan rata-rata kuadrat perbedaan antara gaji sebenarnya dan gaji yang diperkirakan oleh model. MSE tersebut selanjutnya dijadikan tolok ukur untuk membandingkan kinerja model sebelum dan sesudah proses pruning. Semakin rendah nilai MSE yang diperoleh, semakin akurat prediksi model dalam memperkirakan gaji pemain.

4.8 CP Terbaik

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

Grafik Complexity Parameter (CP) menunjukkan bahwa nilai cross-validation error menurun ketika jumlah cabang pohon bertambah, sebelum akhirnya cenderung konstan. Kesalahan validasi terkecil terlihat pada pohon dengan ukuran sekitar 6–11. Parameter CP yang optimal dipilih berdasarkan nilai xerror minimum pada output printcp(fit.tree). Parameter tersebut selanjutnya diterapkan dalam proses pruning untuk mengurangi kompleksitas pohon regresi sekaligus menjaga kemampuan model dalam melakukan prediksi. Kinerja pohon yang telah disederhanakan kemudian dibandingkan dengan model awal melalui perhitungan MSE guna mengetahui perubahan tingkat kesalahan prediksinya.

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 Visualisasi Regression Tree setelah proses pruning memperlihatkan struktur pohon yang lebih ringkas akibat pengurangan beberapa cabang. Variabel CRBI tetap menjadi pemisah utama dengan nilai batas 301. Pemain yang memiliki CRBI di bawah 301 memperoleh prediksi gaji rata-rata sebesar 296, sedangkan pemain dengan CRBI sebesar 301 atau lebih memiliki prediksi rata-rata sebesar 849. Pada percabangan berikutnya, model menggunakan variabel CAtBat, Hits, CHmRun, dan Years untuk membentuk kelompok pemain berdasarkan karakteristiknya. Estimasi gaji tertinggi, yaitu 1.640, diperoleh pada pemain dengan CRBI minimal 301, Hits minimal 123, dan CHmRun minimal 257. Sebaliknya, prediksi gaji terendah sebesar 206 ditemukan pada kelompok pemain dengan CRBI di bawah 301 dan CAtBat kurang dari 1.447. Secara keseluruhan, pruning menyederhanakan struktur pohon sehingga lebih mudah dipahami, sedangkan efektivitas prediksinya perlu ditinjau melalui perbandingan nilai MSE sebelum dan sesudah proses tersebut.

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

Evaluasi model menunjukkan bahwa nilai MSE setelah proses pruning sebesar 75.515,11. Nilai tersebut lebih kecil dibandingkan MSE model awal yang mencapai 80.020,62. Hal ini menunjukkan bahwa proses pruning mampu meningkatkan ketepatan prediksi model Regression Tree dengan mengurangi tingkat kesalahan prediksi.

4.11 Perbandingan MSE Sebelum dan Setelah 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 hasil perbandingan, model Regression Tree sebelum pruning menghasilkan nilai MSE sebesar 80.020,62, sementara model setelah pruning memiliki nilai MSE sebesar 75.515,11. Selisih sebesar 4.505,51 menunjukkan adanya penurunan kesalahan prediksi setelah penyederhanaan struktur pohon dilakukan. Oleh karena itu, model Regression Tree hasil pruning memberikan kinerja prediksi yang lebih baik pada data pengujian karena menghasilkan nilai MSE yang lebih rendah dibandingkan model awal.

BAB V KESIMPULAN

5.1 Kesimpulan

   Konsep dasar Decision Tree menggunakan metode CART adalah membentuk struktur pohon keputusan dengan membagi data secara bertahap menjadi dua kelompok pada setiap pemisahan (binary split). Proses pemisahan dilakukan berdasarkan variabel prediktor yang mampu menghasilkan kelompok data paling homogen, dengan menggunakan indeks Gini sebagai kriteria pemisahan pada klasifikasi. Struktur pohon terdiri atas simpul akar (root node), simpul keputusan (internal node), cabang (branch), dan simpul akhir (leaf node) yang menghasilkan prediksi kelas berdasarkan karakteristik data.
   Model Classification Tree menggunakan algoritma CART dibangun melalui beberapa tahapan, yaitu menyiapkan dan melakukan prapemrosesan data, menentukan variabel prediktor dan variabel respons, serta membagi data menjadi data latih (training data) dan data uji (testing data). Selanjutnya, algoritma CART membentuk pohon dengan memilih pemisahan terbaik berdasarkan indeks Gini hingga memenuhi kriteria penghentian, kemudian melakukan pemangkasan (pruning) apabila diperlukan untuk mengurangi kompleksitas model. Tahap terakhir adalah mengevaluasi kinerja model menggunakan data uji melalui confusion matrix dan metrik klasifikasi, seperti akurasi, presisi, sensitivitas, dan F1-score.
   Berdasarkan analisis yang telah dilakukan, metode Regression Tree mampu memperkirakan gaji pemain bisbol dengan memanfaatkan variabel statistik dan rekam jejak performa pemain selama kariernya. CRBI merupakan variabel dengan tingkat kepentingan tertinggi dalam membentuk pohon regresi, kemudian disusul oleh CRuns, CHits, dan CAtBat. Penerapan pruning berhasil mengurangi kompleksitas pohon sehingga model menjadi lebih ringkas dan mudah dipahami. Perbaikan ini juga ditunjukkan oleh penurunan nilai MSE dari 80.020,62 menjadi 75.515,11. Dengan demikian, model setelah pruning menghasilkan kesalahan prediksi yang lebih kecil dan menunjukkan kinerja yang lebih baik dalam memperkirakan gaji pemain berdasarkan data pengujian.

DAFTAR PUSTAKA

Elwahdiyah, A., & Hartono. (2025). Jenis Data dan Skala Pengukuran: Mengenal Klasifikasi Data, Skala Pengukuran dan Implikasinya dalam Analisis. Jurnal Ilmiah PGSD FKIP Universitas Mandiri, 11(4), 223-238.
Fransiska, H. (2026). Modul praktikum machine learning and modern prediction. Universitas Bengkulu.
Prabawati, N. I., Widodo, & Ajie, H. (2019). Kinerja algoritma Classification and Regression Tree (CART) dalam mengklasifikasikan lama masa studi mahasiswa yang mengikuti organisasi di Universitas Negeri Jakarta. Jurnal Pendidikan Teknik Informatika dan Komputer, 3(2). 
Pratiwi, R., Hayati, N., & Prangga, S. (2020). Perbandingan klasifikasi algoritma C5.0 dengan Classification and Regression Tree (studi kasus: Data sosial kepala keluarga masyarakat Desa Teluk Baru Kecamatan Muara Ancalong tahun 2019). Jurnal Ilmu Matematika dan Terapan, 14(2), 267–278. 
Samiudin. (2018). Cara Mudah Menyusun Proposal Skripsi untuk Penelitian Kualitatif. Jurnal studi Islam, 13(2), 12-27.