BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

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

1.2 Rumusan Masalah

  1. Bagaimana konsep dasar Decision Tree untuk klasifikasi menggunakan metode Classification and Regression Tree (CART)?
  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 Classification and Regression Tree (CART).
  2. Mahasiswa mampu membangun model Classification Tree menggunakan algoritma CART..

BAB II TINJAUAN PUSTAKA

2.1 Decision Tree

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:

  • \(Gini(t)\) = tingkat ketidakmurnian pada simpul \(t\).
  • \(K\) = jumlah kategori kelas.
  • \(p_k\) = proporsi observasi kelas ke-\(k\) pada simpul \(t\).

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

2.2 Classification and Regression Tree (CART)

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:

  • \(n\) = jumlah observasi sebelum pemisahan.
  • \(n_L\) dan \(n_R\) = jumlah observasi pada kelompok kiri dan kanan.
  • \(Gini(L)\) dan \(Gini(R)\) = indeks Gini pada masing-masing kelompok.

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

BAB III METODE PENELITIAN

3.1 Sumber Data

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

3.2 Variabel Penelitian

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.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan dalam praktikum Decision Tree menggunakan Regression Tree adalah sebagai berikut:

  1. Memanggil paket ISLR dan memuat dataset Hitters ke dalam R.
  2. Memeriksa keberadaan missing value pada setiap variabel.
  3. Menangani missing value dengan menghapus pengamatan yang mengandung nilai hilang menggunakan fungsi na.omit().
  4. Membagi data menjadi data training dan data testing.
  5. Membangun model Regression Tree menggunakan data training.
  6. Memvisualisasikan struktur pohon regresi yang telah terbentuk.
  7. Menganalisis variable importance pada model..
  8. Mengevaluasi hasil prediksi menggunakan Mean Squared Error (MSE).
  9. Menentukan nilai complexity parameter (CP) terbaik berdasarkan validasi silang.
  10. Melakukan pruning atau pemangkasan pohon menggunakan nilai CP terbaik.
  11. Melakukan prediksi kembali pada data testing menggunakan model hasil pruning.
  12. Menghitung kembali MSE setelah pruning.
  13. Membandingkan nilai MSE sebelum dan sesudah pruning untuk mengevaluasi perubahan kinerja model.
  14. Menarik kesimpulan berdasarkan hasil yang diperoleh.

BAB IV HASIL DAN PEMBAHASAN

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.

4.1 Library dan Statistik Deskriptif

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 ...
dim(Hitters)
## [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.

4.2 Handling Missing Value

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:

# Cek Missing Value
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
# Handling Missing Value
Hitters_clean <- na.omit(Hitters)
dim(Hitters_clean)
## [1] 263  20
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

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.

4.3 Splitting Data

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
dim(Hitters.test)
## [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.

4.4 Pembentukan dan Visualisasi Regression Tree

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.

4.5 Analisis Variable Importance

Variable importance digunakan untuk mengetahui tingkat kepentingan setiap variabel prediktor dalam pembentukan model.

Sintaks yang digunakan adalah sebagai berikut:

# Variable Importance
importance <- fit.tree$variable.importance
importance
##        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.

4.6 Prediksi dan Evaluasi Model Sebelum Pruning

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.

4.7 Penentuan CP Terbaik

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:

# Menentukan 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
plotcp(fit.tree, upper = "splits")

bestcp <- fit.tree$cptable[
  which.min(fit.tree$cptable[, "xerror"]),
  "CP"
]

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

4.8 Pruning dan Evaluasi Model Setelah 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:

# Pruning
pruned.tree <- prune(
  fit.tree,
  cp = bestcp
)

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

BAB V KESIMPULAN

5.1 Kesimpulan

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.

DAFTAR PUSTAKA

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