BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Kemajuan teknologi informasi dan analisis data telah membawa perubahan besar dalam bidang kesehatan, terutama dalam diagnosis penyakit dan pengambilan keputusan klinis. Machine learning menjadi salah satu pendekatan yang banyak digunakan untuk mengolah data medis dalam jumlah besar serta menemukan pola prediktif yang dapat membantu tenaga medis (Purnomo dkk., 2025). Salah satu metode machine learning yang dapat digunakan untuk klasifikasi penyakit adalah Decision Tree. Metode ini mampu mengolah data dengan atribut numerik maupun kategorikal serta menyajikan hasil klasifikasi dalam bentuk pohon keputusan yang mudah dipahami dan diinterpretasikan oleh tenaga kesehatan (Fiqriansyah dkk., 2022).

Algoritma Decision Tree bekerja dengan membagi dataset ke dalam beberapa cabang berdasarkan atribut tertentu hingga diperoleh keputusan akhir berupa kelas target. Dalam bidang medis, Decision Tree telah digunakan untuk membantu diagnosis berbagai penyakit, seperti penyakit jantung, kanker payudara, pneumonia, dan penyakit ginjal kronis (Fatah & Kholishah, 2026). Namun, salah satu tantangan dalam pengolahan data medis adalah adanya data yang hilang atau tidak konsisten. Oleh karena itu, preprocessing data menjadi langkah penting dalam mempersiapkan data sebelum pemodelan (Yuliani, 2022).

Sehubungan dengan hal tersebut, praktikum ini bertujuan untuk menerapkan dan menganalisis kinerja algoritma Decision Tree menggunakan metode Classification and Regression Tree (CART) dalam mengklasifikasikan kondisi kanker payudara berdasarkan dataset BreastCancer dari package mlbench di R. Analisis dilakukan untuk mengetahui kemampuan algoritma dalam menghasilkan klasifikasi yang akurat berdasarkan data medis serta mengevaluasi kinerja model menggunakan confusion matrix, kurva ROC, dan nilai AUC sebelum dan sesudah proses pruning.

1.2 Rumusan Masalah

  1. Bagaimana konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree)?
  2. Bagaimana membangun model Classification Tree menggunakan algoritma CART?

1.3 Tujuan

  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 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 (Fransiska, 2026).

Pada decision tree terdapat 3 jenis node, yaitu (Prabawati dkk., 2019: a. Root Node: Node awal. yang tidak memiliki input dan dapat memiliki satu atau lebih output. b. Internal Node: Node percabangan. Node ini hanya memiliki satu input dan minimal dua output. c. Leaf node atau terminal node: node akhir, node ini hanya terdapat satu input dan tidak mempunyai output.

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

2.2 Classification Tree

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

2.2.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.2.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] \ \]

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

2.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 Sumber Data

Sumber data yang digunakan dalam penelitian ini adalah data sekunder berupa dataset BreastCancer dari package mlbench pada program R, yang digunakan untuk klasifikasi kondisi kanker payudara.

3.2 Variabel Penelitian

Pada penelitian ini, variabel yang digunakan terdiri atas variabel prediktor dan variabel target. Variabel target yang digunakan yaitu Class, sedangkan variabel prediktor terdiri atas 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).

Variabel Class menunjukkan klasifikasi kondisi kanker payudara, yaitu benign (jinak) dan malignant (ganas), sedangkan variabel prediktor digunakan untuk mengklasifikasikan kondisi tersebut.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis dalam penelitian ini adalah sebagai berikut:

  1. Memuat dataset BreastCancer dari package mlbench pada program R.
  2. Memeriksa dan menangani 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 dan menganalisis variable importance.
  6. Melakukan prediksi pada data testing dan mengevaluasi hasil klasifikasi sebelum pruning menggunakan confusion matrix.
  7. Menentukan nilai CP terbaik berdasarkan nilai kesalahan cross validation terkecil.
  8. Melakukan pruning menggunakan nilai CP terbaik dan visualisasi pohon hasil pemangkasan (pruning).
  9. Melakukan prediksi menggunakan model setelah pruning dan mengevaluasi hasil klasifikasi dengan confusion matrix.
  10. Menghitung nilai AUC dan visualisasi kurva ROC berdasarkan probabilitas prediksi model setelah pruning.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library & Data

### 1. Library
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(mlbench)
library(mice)
## 
## Attaching package: 'mice'
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(yardstick)
## 
## Attaching package: 'yardstick'
## 
## The following objects are masked from 'package:caret':
## 
##     precision, recall, sensitivity, specificity
## 
## The following object is masked from 'package:readr':
## 
##     spec
library(Metrics)
## 
## Attaching package: 'Metrics'
## 
## The following objects are masked from 'package:yardstick':
## 
##     accuracy, mae, mape, mase, mse, precision, recall, rmse, smape
## 
## The following objects are masked from 'package:caret':
## 
##     precision, recall
### 2. Data
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

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

4.6 Visualisasi Classification Tree

rpart.plot(fit.tree)

Interpretasi:

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

  2. Pemisahan pertama dilakukan berdasarkan variabel Cell.size. Kategori 1–2 didominasi kelas benign sebesar 96%, sedangkan kategori 3–10 didominasi kelas malignant sebesar 87%.

  3. Pada kelompok Cell.size kategori 1–2, pemisahan berdasarkan Bare.nuclei menghasilkan kelas benign sebesar 99% untuk kategori 1, 2, 3, dan 5. Sementara itu, kategori 4, 6, 7, 8, dan 10 didominasi kelas malignant sebesar 78%.

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

  5. 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 sebesar 94%.

4.7 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.8 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
### 10. 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.9 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 relatif 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.10 Pruning Classification Tree

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

rpart.plot(pruned.tree)

### 13. 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.11 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.12 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.13 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 relatif rendah.

BAB V KESIMPULAN

5.1 Kesimpulan

DAFTAR PUSTAKA

Akbar, F., Fiqriansyah, F., Andiko, V. C., Ahmad, K. G., Rasywir, E., Meisak, D., Pratama, Y., & Feranika, A. (2022). Penerapan algoritma Naïve Bayes untuk mengetahui pasien penyakit gagal jantung. Jurnal Informatika dan Rekayasa Komputer (JAKAKOM), 2(2). https://doi.org/10.33998/jakakom.2022.2.2.117

Fatah, Z., & Kholishah, R. N. (2026). Penerapan algoritma decision tree untuk klasifikasi diagnosa pasien. JAMASTIKA: Jurnal Mahasiswa Teknik Informatika, 5(1), 98–103. https://doi.org/10.35473/jamastika.v5i1.4596

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. PINTER: Jurnal Pendidikan Teknik Informatika dan Komputer, 3(2), 139–145. https://doi.org/10.21009/pinter.3.2.9

Purnomo, H., Pambudi, R. E., & Irawan, R. (2025). Penerapan decision tree untuk klasifikasi penyakit berdasarkan data rekam medis. Aisyah Journal of Informatics and Electrical Engineering, 7(1), 1–8.

Yuliani, Y. (2022). Algoritma Random Forest untuk prediksi kelangsungan hidup pasien gagal jantung menggunakan seleksi fitur Bestfirst. Infotek: Jurnal Informatika dan Teknologi, 5(2), 298–306. https://doi.org/10.29408/jit.v5i2.5896