BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Machine learning merupakan salah satu bidang yang memungkinkan komputer mengenali pola berdasarkan data untuk menghasilkan prediksi maupun keputusan. Bidang ini banyak diterapkan dalam analisis data karena model yang dibangun dapat mempelajari informasi dari data yang tersedia, kemudian menggunakannya untuk memperkirakan hasil pada data baru. Menurut Alpaydın (2020), machine learning berfokus pada pengembangan algoritma yang memungkinkan komputer memanfaatkan data atau pengalaman sebelumnya dalam menyelesaikan suatu permasalahan. Salah satu pendekatan yang digunakan dalam machine learning adalah supervised learning, yaitu metode pembelajaran yang menggunakan data dengan variabel prediktor dan variabel respons. Pendekatan ini bertujuan untuk mempelajari pola hubungan antara variabel prediktor dan variabel respons sehingga model dapat digunakan untuk melakukan prediksi terhadap pengamatan baru.

Salah satu metode supervised learning yang dapat digunakan untuk membangun model prediksi adalah Classification and Regression Tree (CART). Metode ini bekerja dengan membagi data secara bertahap berdasarkan variabel prediktor hingga terbentuk struktur menyerupai pohon keputusan. CART terdiri atas dua jenis model, yaitu Classification Tree yang digunakan untuk memprediksi variabel respons kategorik dan Regression Tree yang digunakan untuk memprediksi variabel respons numerik. Abedinia dan Seydi (2024) menyatakan bahwa pohon keputusan merupakan metode pembelajaran statistik yang dapat diterapkan pada permasalahan klasifikasi maupun regresi melalui pembagian data secara rekursif. Hasil pembagian tersebut membentuk aturan prediksi yang terstruktur sehingga model lebih mudah dipahami dan diinterpretasikan. Untuk mengendalikan kompleksitas model, CART juga menggunakan proses pruning atau pemangkasan cabang pada pohon keputusan. Chew dkk., (2025) menyatakan penggunaan pruning untuk menyederhanakan struktur pohon keputusan dengan tetap memperhatikan kinerja model. Oleh sebab itu, CART dapat menghasilkan model prediksi yang mudah diinterpretasikan dengan tingkat kompleksitas yang dapat dikendalikan sesuai kebutuhan analisis.

Oleh karena itu, pemahaman mengenai machine learning dan metode CART menjadi landasan penting dalam mempelajari pemodelan prediksi menggunakan pohon keputusan. Pemahaman ini meliputi mekanisme pembagian data, proses pembentukan struktur pohon, serta perbedaan fungsi Classification Tree dan Regression Tree berdasarkan jenis variabel respons yang digunakan. Selain itu, pemahaman tentang kompleksitas pohon dan penerapan pruning juga diperlukan untuk mendukung interpretasi model yang dihasilkan. Dengan mempelajari konsep-konsep tersebut, mahasiswa diharapkan mampu memahami prinsip kerja metode Decision Tree serta penerapannya dalam analisis data.

1.2 Rumusan Masalah

Berdasarkan latar belakang tersebut, rumusan masalah dalam praktikum ini adalah sebagai berikut:

  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

Berdasarkan rumusan masalah, tujuan yang dapat disimpulkan adalah sebagai berikut:

  1. Menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).
  2. Membangun model Classification Tree menggunakan algoritma CART.

BAB II TINJAUAN PUSTAKA

2.1 Machine learning

Machine learning merupakan pendekatan dalam ilmu komputer yang memungkinkan sistem mempelajari pola dan hubungan dari data untuk menghasilkan prediksi atau keputusan. Proses pembelajaran dilakukan dengan membangun model berdasarkan data yang tersedia, sehingga model tersebut dapat digunakan untuk menganalisis pengamatan baru. Kemampuan model dalam menghasilkan prediksi dipengaruhi oleh karakteristik data, pemilihan metode, serta proses evaluasi yang dilakukan.

Salah satu pendekatan dalam Machine learning adalah supervised learning, yaitu pembelajaran menggunakan data yang memiliki variabel prediktor dan variabel respons. Variabel prediktor digunakan sebagai dasar untuk memperkirakan nilai variabel respons. Berdasarkan jenis variabel responsnya, supervised learning dibedakan menjadi klasifikasi dan regresi. Klasifikasi digunakan ketika variabel respons berbentuk kategori, sedangkan regresi digunakan ketika variabel respons berbentuk numerik.

Salah satu metode supervised learning adalah Decision Tree. Metode ini membentuk model prediksi melalui serangkaian aturan pemisahan data berdasarkan variabel prediktor. Hasil pemodelannya berupa struktur pohon yang menunjukkan proses pengambilan keputusan dari simpul awal hingga simpul akhir. Decision Tree dapat digunakan untuk klasifikasi maupun regresi, serta memiliki kelebihan berupa struktur model yang relatif mudah dipahami dan diinterpretasikan. Oleh karena itu, metode ini dapat digunakan untuk mempelajari hubungan antara variabel prediktor dan variabel respons dalam suatu data (Fransiska, 2026).

2.2 Decision Tree

Decision Tree merupakan salah satu algoritma pada pengolahan data metode klasifikasi. Algoritma machine learning yang satu ini mempresentasikan strukturnya seperti struktur pohon untuk menemukan hasil keputusan. Konsep dari Decision Tree ini adalah dengan menyajikan pernyataan-pernyataan bersyarat pada setiap langkah yang bercabang untuk pengambilan keputusan berdasarkan perhitungan dari dataset itu sendiri. Dalam metode Klasifikasi, algoritma Decision Tree merupakan yang paling banyak digunakan (Biyantoro dan Prasetyo, 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.3 Classification and Regression Tree (CART)

Salah satu metode dalam Decision Tree adalah Classification and Regression Tree (CART). CART dapat digunakan untuk dua jenis pemodelan, yaitu klasifikasi untuk memprediksi kategori atau kelas regresi untuk memprediksi nilai numerik. Jika variabel respon berupa kategori, pohon yang terbentuk disebut pohon klasifikasi (Classification Tree), jika variabel respon berupa numerik kontinu disebut pohon regresi (Regression Tree) (Fransiska, 2026).

Pada Classification Tree, proses pemisahan data dilakukan dengan memilih aturan yang mampu menghasilkan simpul-simpul yang semakin homogen. Beberapa ukuran yang digunakan dalam proses pemisahan tersebut antara lain Entropy, Information Gain, dan Gini Index. Entropy digunakan untuk mengukur tingkat ketidakpastian atau ketidakmurnian kelas dalam suatu simpul. Semakin kecil nilai Entropy, semakin homogen simpul tersebut. Entropy dirumuskan sebagai (Fransiska, 2026): \[Entropy(t) = -\sum_{k} p_k \log_2(p_k)\] dengan 𝑡 adalah node, 𝑘 adalah indeks kelas ke-𝑘, 𝑘 = 1,2,3,…,𝐾 dan 𝑝𝑘 merupakan proporsi observasi dari kelas ke-𝑘 dalam node. Andaikan memiliki sebuah dataset 𝐷 yang terdiri dari dua kelas (Ya atau Tidak) dengan persentase Ya adalah 𝑝1 dan persentase Tidak adalah 𝑝2 maka (Fransiska, 2026): \[p_1 + p_2 = 1\] \[E(D) = -p_1 \log_2(p_1) - p_2 \log_2(p_2)\] 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.

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 (Fransiska, 2026): \[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 (Fransiska, 2026): \[IG = E(D) - \left[\frac{|D_1|}{|D|} E(D_1) +\frac{|D_2|}{|D|} E(D_2)\right]\] 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_{k} p_k^2\] Jika dataset 𝐷 dipartisi menjadi dua bagian 𝐷1 dan 𝐷2, maka nilai Gini setelah pemisahan dihitung menggunakan rata-rata terbobot (Fransiska, 2026): \[Gini_{split} = \frac{|D_1|}{|D|} Gini(D_1) + \frac{|D_2|}{|D|} Gini(D_2)\] Regression Tree digunakan ketika variabel respons atau target berupa data numerik kontinu. Prinsip pembentukan pohonnya sama dengan Classification Tree, yaitu membagi data secara bertahap melalui proses splitting. Perbedaannya pada Regression Tree pemisahan dilakukan agar nilai respon dalam setiap simpul menjadi semakin seragam atau homogen. Salah satu ukuran yang dapat digunakan untuk menilai hasil pemisahan adalah Mean Square Error (MSE), yaitu rata-rata kuadrat selisih antara nilai respon dengan rata-rata respon dalam suatu simpul (Fransiska, 2026). \[MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2\] Pemisahan dipilih apabila mampu menghasilkan simpul-simpul dengan nilai MSE yang lebih kecil. Dengan demikian, amatan yang berada dalam satu simpul memiliki nilai respons yang semakin mirip (Fransiska, 2026).

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data yang digunakan dalam penelitian ini berupa data kuantitatif. Data kuantitatif adalah jenis data yang berbentuk angka atau berskala numerik yang dapat dihitung secara langsung. Sumber data yang digunakan adalah data sekunder. Data sekunder adalah data yang diperoleh secara tidak langsung melalui perantara. Data yang digunakan pada penelitian ini adalah data BreastCancer pada package mlbench pada program R.

3.2 Variabel Penelitian

Variabel penelitian adalah segala sesuatu yang menjadi objek pengamatan dalam suatu penelitian. Variabel penelitian yang digunakan berasal dari dataset BreastCancer dengan jumlah 699 observasi dan 11 variabel, termasuk satu variabel identitas sampel. Variabel-variabel tersebut meliputi Sample code number, Clump Thickness, Uniformity of Cell Size, Uniformity of Cell Shape, Marginal Adhesion, Single Epithelial Cell Size, Bare Nuclei, Bland Chromatin, Normal Nucleoli, Mitoses, dan Class. Variabel Class merupakan variabel respons yang digunakan untuk mengklasifikasikan kondisi kanker payudara ke dalam dua kategori, yaitu benign dan malignant. Sementara itu, variabel karakteristik sel digunakan sebagai variabel prediktor dalam pembentukan model klasifikasi.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis dalam penelitian ini adalah sebagai berikut:

  1. Input data.
  2. Pengecekan dan penanganan missing value menggunakan metode MICE.
  3. Menghapus variabel Id dan membagi data training dan testing.
  4. Membentuk model Classification Tree menggunakan algoritma CART.
  5. Visualisasi pohon klasifikasi.
  6. Analisis variabel importance.
  7. Melakukan prediksi dan evaluasi hasil klasifikasi sebelum pruning menggunakan menggunakan confusion matrix.
  8. menentukan nilai CP terbaik.
  9. Pemangkasan pohon (pruning).
  10. Evaluasi model setelah pruning menggunakan confusion matrix, kurva ROC, dan AUC.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Data

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(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.1     ✔ readr     2.2.0
## ✔ ggplot2   4.0.3     ✔ stringr   1.6.0
## ✔ lubridate 1.9.5     ✔ tibble    3.3.1
## ✔ purrr     1.2.2     ✔ tidyr     1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rpart)
library(caret)
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(rpart.plot)
library(ROCR)
library(mlbench)

#Data
d <- data(package = "mlbench")
d$results[, "Item"]
##  [1] "BostonHousing"     "BostonHousing2"    "BreastCancer"     
##  [4] "DNA"               "Glass"             "HouseVotes84"     
##  [7] "Ionosphere"        "LetterRecognition" "Ozone"            
## [10] "Satellite"         "Servo"             "Shuttle"          
## [13] "Sonar"             "Soybean"           "SynthDiabetes"    
## [16] "SynthDiabetes2"    "Vehicle"           "Vowel"            
## [19] "Zoo"
data(BreastCancer)
str(BreastCancer)
## 'data.frame':    699 obs. of  11 variables:
##  $ Id             : chr  "1000025" "1002945" "1015425" "1016277" ...
##  $ Cl.thickness   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
##  $ Cell.size      : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
##  $ Cell.shape     : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
##  $ Marg.adhesion  : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
##  $ Epith.c.size   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
##  $ Bare.nuclei    : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
##  $ Bl.cromatin    : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
##  $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
##  $ Mitoses        : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 5 1 ...
##  $ Class          : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...

Dataset BreastCancer terdiri dari 699 observasi dengan 11 variabel. Variabel Id merupakan identitas sampel. Sembilan variabel lainnya merupakan prediktor yang menggambarkan karakteristik sel, sedangkan Class merupakan variabel respons yang terdiri dari dua kategori, yaitu benign (jinak) dan malignant (ganas).

4.2 Pengecekan Missing Value

BreastCancer$Bare.nuclei <-as.character(BreastCancer$Bare.nuclei)
BreastCancer$Bare.nuclei[BreastCancer$Bare.nuclei == "?"] <- NA
BreastCancer$Bare.nuclei <- factor(BreastCancer$Bare.nuclei)

sum(is.na(BreastCancer))
## [1] 16
colSums(is.na(BreastCancer))
##              Id    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion 
##               0               0               0               0               0 
##    Epith.c.size     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses 
##               0              16               0               0               0 
##           Class 
##               0

Berdasarkan hasil output terdapat 16 missing value dari total 699 observasi. Nilai yang hilang terdapat pada variabel Bare.nuclei, sedangkan 10 varibael yang lain tidak terdapat missing value, sehingga perlu dilakukan penanganan missing value menggunakan metode imputasi melalui package mice sebelum membangun model Classification Tree.

4.3 Penanganan Missing Value Menggunakan MICE

library(mice)
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
BreastCancer <- BreastCancer[, -1]

metode <- make.method(BreastCancer)
metode["Class"] <- ""

prediktor <- make.predictorMatrix(BreastCancer)
prediktor[, "Class"] <- 0
prediktor["Class", ] <- 0

set.seed(234)
data_mice <- mice(
  BreastCancer,
  m = 5,
  method = metode,
  predictorMatrix = prediktor,
  seed = 234)
## 
##  iter imp variable
##   1   1  Bare.nuclei
##   1   2  Bare.nuclei
##   1   3  Bare.nuclei
##   1   4  Bare.nuclei
##   1   5  Bare.nuclei
##   2   1  Bare.nuclei
##   2   2  Bare.nuclei
##   2   3  Bare.nuclei
##   2   4  Bare.nuclei
##   2   5  Bare.nuclei
##   3   1  Bare.nuclei
##   3   2  Bare.nuclei
##   3   3  Bare.nuclei
##   3   4  Bare.nuclei
##   3   5  Bare.nuclei
##   4   1  Bare.nuclei
##   4   2  Bare.nuclei
##   4   3  Bare.nuclei
##   4   4  Bare.nuclei
##   4   5  Bare.nuclei
##   5   1  Bare.nuclei
##   5   2  Bare.nuclei
##   5   3  Bare.nuclei
##   5   4  Bare.nuclei
##   5   5  Bare.nuclei
BreastCancer <- complete(data_mice, 1)
sum(is.na(BreastCancer))
## [1] 0
colSums(is.na(BreastCancer))
##    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion    Epith.c.size 
##               0               0               0               0               0 
##     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses           Class 
##               0               0               0               0               0

Berdasarkan hasil imputasi menggunakan metode MICE, proses imputasi dilakukan terhadap variabel Bare.nuclei yang sebelumnya memiliki 16 missing value. Hasil menunjukkan bahwa jumlah missing value setelah imputasi adalah 0, baik secara keseluruhan maupun pada setiap variabel. Dengan demikian, proses penanganan missing value berhasil dilakukan sehingga dataset dapat digunakan untuk tahap pemodelan Classification Tree.

4.4 Pembagian Data Training dan Testing

BreastCancer$Class <- factor(
  BreastCancer$Class,
  levels = c("benign", "malignant"))

set.seed(234)
train <- createDataPartition(
  BreastCancer$Class,
  p = 0.7,
  list = FALSE)

BreastCancer.train <- BreastCancer[train, ]
BreastCancer.test <- BreastCancer[-train, ]

Class.test <- BreastCancer.test$Class

Dari 699 observasi, data dibagi menjadi 70% data training dan 30% data testing dengan mempertahankan proporsi kelas benign dan malignant. Data training digunakan untuk membangun model Classification Tree, sedangkan data testing digunakan untuk mengevaluasi hasil klasifikasi model.

4.5 Membangun Classification Tree

fit.tree <- rpart(
  Class ~ .,
  data = BreastCancer.train,
  method = "class",
  cp = 0.008)

fit.tree
## n= 490 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 490 169 benign (0.65510204 0.34489796)  
##    2) Cell.size=1,2 309  11 benign (0.96440129 0.03559871)  
##      4) Bare.nuclei=1,2,3,5 300   4 benign (0.98666667 0.01333333) *
##      5) Bare.nuclei=10,4,6,7,8 9   2 malignant (0.22222222 0.77777778) *
##    3) Cell.size=3,4,5,6,7,8,9,10 181  23 malignant (0.12707182 0.87292818)  
##      6) Bare.nuclei=1,6 23   9 benign (0.60869565 0.39130435)  
##       12) Cell.size=1,2,3 12   0 benign (1.00000000 0.00000000) *
##       13) Cell.size=4,5,6,7,8,9,10 11   2 malignant (0.18181818 0.81818182) *
##      7) Bare.nuclei=10,2,3,4,5,7,8,9 158   9 malignant (0.05696203 0.94303797) *
rpart.plot(fit.tree)

Model Classification Tree dibangun menggunakan 490 observasi data training. Pada simpul akar (root node), kelas benign memiliki proporsi sebesar 65%, sedangkan kelas malignant sebesar 35%. Pemisahan pertama dilakukan berdasarkan variabel Cell.size, dengan kategori 1–2 didominasi oleh kelas benign sebesar 96%, sedangkan kategori 3–10 didominasi oleh kelas malignant sebesar 87%. Pada kelompok Cell.size kategori 1–2, pemisahan berdasarkan variabel Bare.nuclei menghasilkan kelas benign sebesar 99% pada kategori 1, 2, 3, dan 5. Sementara itu, kategori 4, 6, 7, 8, dan 10 didominasi oleh kelas malignant sebesar 78%. Selanjutnya, pada kelompok Cell.size kategori 3–10 dengan Bare.nuclei kategori 1 atau 6, pemisahan lanjutan berdasarkan Cell.size menghasilkan kelas benign sebesar 100% pada kategori 1–3 dan kelas malignant sebesar 82% pada kategori 4–10. Adapun pada cabang lainnya, yaitu kelompok Cell.size kategori 3–10 dengan Bare.nuclei kategori 2, 3, 4, 5, 7, 8, 9, dan 10, kelas malignant mendominasi dengan proporsi sebesar 94%.

4.6 Analisis Variable Importance

fit.tree$variable.importance
##       Cell.size      Cell.shape     Bare.nuclei     Bl.cromatin    Epith.c.size 
##      167.736760      134.863251      132.969691      122.495034      117.704827 
## Normal.nucleoli   Marg.adhesion    Cl.thickness 
##      114.854366        6.286741        3.404128
fit.tree$variable.importance %>%
  data.frame() %>%
  rownames_to_column(var = "Feature") %>%
  rename(Overall = ".") %>%
  ggplot(
    aes(
      x = fct_reorder(Feature, Overall),
      y = Overall
    )
  ) +
  geom_pointrange(
    aes(
      ymin = 0,
      ymax = Overall
    ),
    color = "cadetblue",
    size = 0.3
  ) +
  theme_minimal() +
  coord_flip() +
  labs(
    x = "",
    y = "",
    title = "Variable Importance with Classification Tree")

Berdasarkan hasil variable importance, variabel Cell.size memiliki nilai kepentingan tertinggi sebesar 167,74, diikuti Cell.shape sebesar 134,86 dan Bare.nuclei sebesar 132,97. Sementara itu, Cl.thickness memiliki nilai kepentingan terendah sebesar 3,40, diikuti Marg.adhesion sebesar 6,29. Hasil ini menunjukkan bahwa Cell.size merupakan variabel yang paling berperan dalam pembentukan model Classification Tree.

4.7 Prediksi dan Evaluasi Classification Tree

pred.tree <- predict(
  fit.tree,
  newdata = BreastCancer.test,
  type = "class")

table(pred.tree, Class.test)
##            Class.test
## pred.tree   benign malignant
##   benign       122         0
##   malignant     15        72
## Confusion Matrix Sebelum Pruning
matriks_kesalahan <- confusionMatrix(
  data = pred.tree,
  reference = Class.test,
  positive = "malignant")

matriks_kesalahan
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       122         0
##   malignant     15        72
##                                           
##                Accuracy : 0.9282          
##                  95% CI : (0.8844, 0.9593)
##     No Information Rate : 0.6555          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.8486          
##                                           
##  Mcnemar's Test P-Value : 0.0003006       
##                                           
##             Sensitivity : 1.0000          
##             Specificity : 0.8905          
##          Pos Pred Value : 0.8276          
##          Neg Pred Value : 1.0000          
##              Prevalence : 0.3445          
##          Detection Rate : 0.3445          
##    Detection Prevalence : 0.4163          
##       Balanced Accuracy : 0.9453          
##                                           
##        'Positive' Class : malignant       
## 

Berdasarkan hasil evaluasi Classification Tree sebelum pruning, model memperoleh nilai akurasi sebesar 92,82% dan nilai Kappa sebesar 0,8486. Dari 209 data testing, sebanyak 122 data benign dan 72 data malignant diklasifikasikan dengan benar, sedangkan 15 data benign salah diklasifikasikan sebagai malignant. Model memiliki sensitivitas sebesar 100% dan spesifisitas sebesar 89,05%, yang menunjukkan bahwa seluruh data aktual malignant berhasil teridentifikasi, sementara 89,05% data aktual benign diklasifikasikan dengan benar.

4.8 Menentukan CP Terbaik

printcp(fit.tree)
## 
## Classification tree:
## rpart(formula = Class ~ ., data = BreastCancer.train, method = "class", 
##     cp = 0.008)
## 
## Variables actually used in tree construction:
## [1] Bare.nuclei Cell.size  
## 
## Root node error: 169/490 = 0.3449
## 
## n= 490 
## 
##         CP nsplit rel error  xerror     xstd
## 1 0.798817      0   1.00000 1.00000 0.062260
## 2 0.035503      1   0.20118 0.27811 0.038571
## 3 0.029586      3   0.13018 0.18343 0.031886
## 4 0.008000      4   0.10059 0.18343 0.031886
plotcp(fit.tree, upper = "splits")

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

bestcp
## [1] 0.0295858

Berdasarkan tabel complexity parameter dan plot CP, nilai cross-validation error (xerror) terendah sebesar 0,18343 diperoleh pada CP 0,029586 dan 0,008. Pada plot, nilai kesalahan validasi silang menurun tajam dari satu pemisahan menjadi tiga pemisahan, kemudian cenderung stabil pada empat pemisahan. Berdasarkan hasil tersebut, nilai CP terbaik adalah 0,0295858, sesuai dengan hasil pemilihan CP melalui nilai xerror minimum. Nilai ini selanjutnya digunakan untuk melakukan pruning pada pohon keputusan.

4.9 Pruning Classification Tree

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

rpart.plot(pruned.tree)

##Prediksi Setelah Pruning
pred.prune <- predict(
  pruned.tree,
  newdata = BreastCancer.test,
  type = "class")

table(pred.prune, Class.test)
##            Class.test
## pred.prune  benign malignant
##   benign       126         1
##   malignant     11        71

Selanjutnya dilakukan pruning classification tree. Berdasarkan hasil pruning, pohon keputusan menjadi lebih sederhana dengan mengurangi jumlah percabangan. Pada data testing, sebanyak 126 data benign dan 71 data malignant diklasifikasikan dengan benar. Sementara itu, 11 data benign salah diklasifikasikan sebagai malignant dan 1 data malignant salah diklasifikasikan sebagai benign. Hasil ini menunjukkan bahwa model setelah pruning memiliki struktur pohon yang lebih sederhana dengan hasil klasifikasi yang perlu dievaluasi kembali menggunakan confusion matrix.

4.10 Confusion Matrix Setelah Pruning

matriks_kesalahan <- confusionMatrix(
  data = pred.prune,
  reference = Class.test,
  positive = "malignant")
matriks_kesalahan
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       126         1
##   malignant     11        71
##                                         
##                Accuracy : 0.9426        
##                  95% CI : (0.9019, 0.97)
##     No Information Rate : 0.6555        
##     P-Value [Acc > NIR] : < 2.2e-16     
##                                         
##                   Kappa : 0.8769        
##                                         
##  Mcnemar's Test P-Value : 0.009375      
##                                         
##             Sensitivity : 0.9861        
##             Specificity : 0.9197        
##          Pos Pred Value : 0.8659        
##          Neg Pred Value : 0.9921        
##              Prevalence : 0.3445        
##          Detection Rate : 0.3397        
##    Detection Prevalence : 0.3923        
##       Balanced Accuracy : 0.9529        
##                                         
##        'Positive' Class : malignant     
## 

Berdasarkan output, model memperoleh akurasi sebesar 94,26% dan nilai Kappa sebesar 0,8769. Dari 209 data testing, sebanyak 126 data benign dan 71 data malignant diklasifikasikan dengan benar, sedangkan 11 data benign salah diklasifikasikan sebagai malignant dan 1 data malignant salah diklasifikasikan sebagai benign. Model memiliki sensitivitas sebesar 98,61% dan spesifisitas sebesar 91,97%. Hasil ini menunjukkan bahwa model setelah pruning memiliki kinerja klasifikasi yang lebih baik dibandingkan model sebelum pruning, dengan peningkatan akurasi dari 92,82% menjadi 94,26%.

4.11 Menyiapkan Probabilitas Prediksi

breastcancer_preds_cart <- bind_cols(
  as.data.frame(
    predict(
      pruned.tree,
      newdata = BreastCancer.test,
      type = "prob")),
  predicted = pred.prune,
  actual = Class.test)
breastcancer_preds_cart
##         benign  malignant predicted    actual
## 5   0.96440129 0.03559871    benign    benign
## 7   0.96440129 0.03559871    benign    benign
## 9   0.96440129 0.03559871    benign    benign
## 12  0.96440129 0.03559871    benign    benign
## 19  0.05696203 0.94303797 malignant malignant
## 27  0.96440129 0.03559871    benign    benign
## 30  0.96440129 0.03559871    benign    benign
## 32  0.96440129 0.03559871    benign    benign
## 33  0.05696203 0.94303797 malignant malignant
## 37  0.18181818 0.81818182 malignant malignant
## 41  0.05696203 0.94303797 malignant    benign
## 45  0.18181818 0.81818182 malignant malignant
## 46  0.96440129 0.03559871    benign    benign
## 50  0.05696203 0.94303797 malignant malignant
## 51  0.05696203 0.94303797 malignant malignant
## 56  0.05696203 0.94303797 malignant malignant
## 57  0.18181818 0.81818182 malignant malignant
## 62  0.96440129 0.03559871    benign    benign
## 67  0.96440129 0.03559871    benign    benign
## 68  0.05696203 0.94303797 malignant malignant
## 70  0.96440129 0.03559871    benign    benign
## 73  1.00000000 0.00000000    benign    benign
## 74  0.05696203 0.94303797 malignant malignant
## 75  0.05696203 0.94303797 malignant malignant
## 79  0.96440129 0.03559871    benign    benign
## 87  0.05696203 0.94303797 malignant malignant
## 93  0.96440129 0.03559871    benign    benign
## 94  0.96440129 0.03559871    benign    benign
## 98  0.96440129 0.03559871    benign    benign
## 99  0.18181818 0.81818182 malignant malignant
## 100 0.05696203 0.94303797 malignant malignant
## 101 0.05696203 0.94303797 malignant malignant
## 102 0.05696203 0.94303797 malignant malignant
## 110 0.05696203 0.94303797 malignant malignant
## 112 0.05696203 0.94303797 malignant malignant
## 114 0.05696203 0.94303797 malignant malignant
## 120 0.96440129 0.03559871    benign    benign
## 123 0.05696203 0.94303797 malignant malignant
## 124 0.05696203 0.94303797 malignant malignant
## 126 0.96440129 0.03559871    benign    benign
## 131 0.96440129 0.03559871    benign    benign
## 134 0.96440129 0.03559871    benign    benign
## 138 0.96440129 0.03559871    benign    benign
## 144 0.96440129 0.03559871    benign    benign
## 145 0.96440129 0.03559871    benign    benign
## 152 0.96440129 0.03559871    benign malignant
## 167 0.05696203 0.94303797 malignant malignant
## 168 0.18181818 0.81818182 malignant malignant
## 173 0.96440129 0.03559871    benign    benign
## 175 0.05696203 0.94303797 malignant malignant
## 177 0.96440129 0.03559871    benign    benign
## 178 0.18181818 0.81818182 malignant malignant
## 180 0.05696203 0.94303797 malignant malignant
## 185 0.05696203 0.94303797 malignant malignant
## 186 0.96440129 0.03559871    benign    benign
## 188 0.05696203 0.94303797 malignant malignant
## 191 0.05696203 0.94303797 malignant malignant
## 197 0.05696203 0.94303797 malignant    benign
## 199 0.96440129 0.03559871    benign    benign
## 205 0.96440129 0.03559871    benign    benign
## 209 0.96440129 0.03559871    benign    benign
## 211 0.05696203 0.94303797 malignant malignant
## 217 0.96440129 0.03559871    benign    benign
## 219 0.05696203 0.94303797 malignant malignant
## 222 0.05696203 0.94303797 malignant malignant
## 226 0.96440129 0.03559871    benign    benign
## 229 0.96440129 0.03559871    benign    benign
## 231 0.05696203 0.94303797 malignant malignant
## 232 0.05696203 0.94303797 malignant malignant
## 235 1.00000000 0.00000000    benign    benign
## 238 0.05696203 0.94303797 malignant malignant
## 244 0.96440129 0.03559871    benign    benign
## 247 0.05696203 0.94303797 malignant malignant
## 253 0.05696203 0.94303797 malignant    benign
## 256 0.05696203 0.94303797 malignant malignant
## 261 0.05696203 0.94303797 malignant malignant
## 269 0.05696203 0.94303797 malignant malignant
## 270 0.96440129 0.03559871    benign    benign
## 272 0.96440129 0.03559871    benign    benign
## 275 0.96440129 0.03559871    benign    benign
## 280 0.05696203 0.94303797 malignant malignant
## 282 0.96440129 0.03559871    benign    benign
## 287 0.05696203 0.94303797 malignant malignant
## 290 0.05696203 0.94303797 malignant malignant
## 297 0.05696203 0.94303797 malignant    benign
## 298 0.05696203 0.94303797 malignant    benign
## 310 0.96440129 0.03559871    benign    benign
## 320 0.05696203 0.94303797 malignant    benign
## 323 0.96440129 0.03559871    benign    benign
## 325 0.96440129 0.03559871    benign    benign
## 328 0.96440129 0.03559871    benign    benign
## 329 0.05696203 0.94303797 malignant malignant
## 333 0.96440129 0.03559871    benign    benign
## 338 0.96440129 0.03559871    benign    benign
## 341 0.05696203 0.94303797 malignant malignant
## 345 0.05696203 0.94303797 malignant malignant
## 346 0.96440129 0.03559871    benign    benign
## 348 0.96440129 0.03559871    benign    benign
## 349 0.18181818 0.81818182 malignant malignant
## 355 0.96440129 0.03559871    benign    benign
## 357 0.05696203 0.94303797 malignant malignant
## 364 0.05696203 0.94303797 malignant    benign
## 365 0.96440129 0.03559871    benign    benign
## 370 0.96440129 0.03559871    benign    benign
## 371 1.00000000 0.00000000    benign    benign
## 381 0.96440129 0.03559871    benign    benign
## 387 0.05696203 0.94303797 malignant malignant
## 389 0.96440129 0.03559871    benign    benign
## 392 0.05696203 0.94303797 malignant malignant
## 394 0.96440129 0.03559871    benign    benign
## 395 0.96440129 0.03559871    benign    benign
## 399 0.96440129 0.03559871    benign    benign
## 401 0.05696203 0.94303797 malignant malignant
## 403 1.00000000 0.00000000    benign    benign
## 408 0.96440129 0.03559871    benign    benign
## 409 0.05696203 0.94303797 malignant    benign
## 416 0.05696203 0.94303797 malignant    benign
## 420 1.00000000 0.00000000    benign    benign
## 421 0.96440129 0.03559871    benign    benign
## 424 0.96440129 0.03559871    benign    benign
## 430 0.96440129 0.03559871    benign    benign
## 431 1.00000000 0.00000000    benign    benign
## 440 0.96440129 0.03559871    benign    benign
## 441 0.05696203 0.94303797 malignant malignant
## 442 0.96440129 0.03559871    benign    benign
## 450 0.05696203 0.94303797 malignant malignant
## 451 0.96440129 0.03559871    benign    benign
## 457 0.05696203 0.94303797 malignant malignant
## 464 0.96440129 0.03559871    benign    benign
## 465 0.96440129 0.03559871    benign    benign
## 466 0.05696203 0.94303797 malignant malignant
## 467 0.05696203 0.94303797 malignant malignant
## 469 0.96440129 0.03559871    benign    benign
## 474 0.96440129 0.03559871    benign    benign
## 477 0.96440129 0.03559871    benign    benign
## 493 0.96440129 0.03559871    benign    benign
## 494 0.05696203 0.94303797 malignant malignant
## 496 0.96440129 0.03559871    benign    benign
## 499 0.96440129 0.03559871    benign    benign
## 500 0.96440129 0.03559871    benign    benign
## 503 0.96440129 0.03559871    benign    benign
## 505 0.96440129 0.03559871    benign    benign
## 510 0.96440129 0.03559871    benign    benign
## 512 0.96440129 0.03559871    benign    benign
## 513 0.96440129 0.03559871    benign    benign
## 514 0.96440129 0.03559871    benign    benign
## 516 0.05696203 0.94303797 malignant malignant
## 521 0.96440129 0.03559871    benign    benign
## 532 0.96440129 0.03559871    benign    benign
## 535 0.96440129 0.03559871    benign    benign
## 540 0.96440129 0.03559871    benign    benign
## 541 0.96440129 0.03559871    benign    benign
## 547 0.05696203 0.94303797 malignant malignant
## 550 0.05696203 0.94303797 malignant malignant
## 552 0.96440129 0.03559871    benign    benign
## 553 0.96440129 0.03559871    benign    benign
## 554 0.05696203 0.94303797 malignant    benign
## 556 1.00000000 0.00000000    benign    benign
## 557 0.96440129 0.03559871    benign    benign
## 559 0.96440129 0.03559871    benign    benign
## 562 0.96440129 0.03559871    benign    benign
## 567 0.96440129 0.03559871    benign    benign
## 568 0.96440129 0.03559871    benign    benign
## 574 0.96440129 0.03559871    benign    benign
## 576 0.96440129 0.03559871    benign    benign
## 578 0.96440129 0.03559871    benign    benign
## 581 0.96440129 0.03559871    benign    benign
## 582 0.05696203 0.94303797 malignant malignant
## 583 0.05696203 0.94303797 malignant malignant
## 590 0.96440129 0.03559871    benign    benign
## 594 0.96440129 0.03559871    benign    benign
## 597 0.96440129 0.03559871    benign    benign
## 600 0.96440129 0.03559871    benign    benign
## 606 0.05696203 0.94303797 malignant malignant
## 607 0.96440129 0.03559871    benign    benign
## 611 0.05696203 0.94303797 malignant malignant
## 621 0.96440129 0.03559871    benign    benign
## 624 0.96440129 0.03559871    benign    benign
## 626 0.96440129 0.03559871    benign    benign
## 639 0.96440129 0.03559871    benign    benign
## 640 0.96440129 0.03559871    benign    benign
## 641 0.96440129 0.03559871    benign    benign
## 642 0.96440129 0.03559871    benign    benign
## 644 0.96440129 0.03559871    benign    benign
## 647 0.96440129 0.03559871    benign    benign
## 651 0.96440129 0.03559871    benign    benign
## 655 0.96440129 0.03559871    benign    benign
## 656 0.96440129 0.03559871    benign    benign
## 657 0.96440129 0.03559871    benign    benign
## 658 0.18181818 0.81818182 malignant    benign
## 663 0.96440129 0.03559871    benign    benign
## 665 0.96440129 0.03559871    benign    benign
## 668 0.96440129 0.03559871    benign    benign
## 669 0.18181818 0.81818182 malignant malignant
## 670 0.05696203 0.94303797 malignant malignant
## 671 0.05696203 0.94303797 malignant malignant
## 673 0.96440129 0.03559871    benign    benign
## 680 0.96440129 0.03559871    benign    benign
## 681 0.05696203 0.94303797 malignant malignant
## 685 0.96440129 0.03559871    benign    benign
## 686 0.96440129 0.03559871    benign    benign
## 688 0.96440129 0.03559871    benign    benign
## 691 0.96440129 0.03559871    benign    benign
## 692 0.05696203 0.94303797 malignant malignant
## 693 0.96440129 0.03559871    benign    benign
## 695 0.96440129 0.03559871    benign    benign
## 697 0.05696203 0.94303797 malignant malignant
## 698 0.05696203 0.94303797 malignant malignant
## 699 0.05696203 0.94303797 malignant malignant

Berdasarkan output, probabilitas prediksi kelas benign dan malignant untuk setiap observasi pada data testing setelah pruning. Kolom predicted menunjukkan kelas hasil prediksi model, sedangkan kolom actual menunjukkan kelas sebenarnya. Sebagian besar observasi memiliki hasil prediksi yang sesuai dengan kelas aktual, meskipun masih terdapat beberapa kesalahan klasifikasi. Sebagai contoh, observasi 41 diprediksi sebagai malignant dengan probabilitas 94,30%, sedangkan kelas aktualnya termasuk dalam kategori benign.

4.12 Evaluasi ROC dan AUC

mdl_auc <- Metrics::auc(
  actual = as.numeric(
    breastcancer_preds_cart$actual == "malignant"),
  predicted = breastcancer_preds_cart$malignant)

yardstick::roc_curve(
  breastcancer_preds_cart,
  truth = actual,
  malignant,
  event_level = "second") %>%
  autoplot() +
  labs(
    title = "ROC Curve",
    subtitle = paste0(
      "AUC = ",
      round(mdl_auc, 4)))

Berdasarkan output kurva ROC, model Classification Tree setelah pruning memperoleh nilai AUC sebesar 0,9524. Nilai tersebut menunjukkan bahwa model memiliki kemampuan yang sangat baik dalam membedakan kelas benign dan malignant. Kurva ROC yang berada dekat dengan sudut kiri atas menunjukkan sensitivitas yang tinggi dengan tingkat false positive yang cenderung rendah.

BAB V KESIMPULAN

5.1 Kesimpulan

Decision Tree merupakan metode machine learning yang membentuk model prediksi melalui aturan pemisahan berdasarkan variabel prediktor. Metode ini terdiri atas Classification Tree untuk variabel respons kategoris dan Regression Tree untuk variabel respons numerik. Pada Regression Tree, data dibagi menjadi beberapa kelompok berdasarkan kemiripan nilai respons, dengan prediksi pada simpul terminal berupa rata-rata nilai respons dalam kelompok tersebut.

Tahapan pembentukan Regression Tree meliputi penanganan missing value, pembagian data training dan testing, pembentukan pohon, analisis variable importance, serta evaluasi menggunakan confusion matrix, krva ROC dan AUC. Kompleksitas pohon dikendalikan melalui Complexity Parameter (CP), sedangkan pruning digunakan untuk menyederhanakan pohon. Pemilihan CP dapat mengacu pada nilai cross-validation error (xerror) terkecil.

Berdasarkan hasil analisis, pemodelan Classification Tree pada dataset BreastCancer dilakukan dengan menangani 16 missing value pada variabel Bare.nuclei menggunakan metode MICE, kemudian membagi data menjadi 70% data training dan 30% data testing. Variabel Cell.size menjadi variabel paling penting dalam pembentukan pohon keputusan. Setelah dilakukan pruning menggunakan nilai CP terbaik sebesar 0,029586, model menghasilkan akurasi sebesar 94,26%, sensitivitas 98,61%, spesifisitas 91,97%, dan AUC sebesar 0,9524. Hasil tersebut menunjukkan bahwa model Classification Tree setelah pruning memiliki kinerja klasifikasi yang sangat baik dalam membedakan kelas benign (jinak) dan malignant (ganas), serta memberikan hasil yang lebih baik dibandingkan model sebelum pruning.

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.

Alpaydın, E. (2020). Introduction to machine learning (4th ed.). The MIT Press.

Biyantoro, A. S., & Prasetiyo, B. (2024). Application of decision tree for health status classification, compared to KNN and Naive Bayes. IJIRSE: Indonesian Journal of Informatic Research and Software Engineering, 4(1), 47–55.

Chew, Y. J., Ooi, S. Y., Pang, Y. H., & Lim, Z. Y. (2025). Decision tree pruning with privacy-preserving strategies. Electronics, 14(15), Article 3139.

Fransiska, H. (2026). Modul Praktikum Machine Learning dan Modern Prediction. Bengkulu: Universitas Bengkulu.