BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Pengolahan data merupakan salah satu kegiatan yang dilakukan untuk memperoleh informasi yang dapat digunakan dalam memahami suatu permasalahan. Salah satu teknik yang dapat digunakan adalah klasifikasi, yaitu proses pengelompokan data ke dalam kelas tertentu berdasarkan karakteristik atau atribut yang dimiliki. Dalam analisis data, klasifikasi dapat dilakukan menggunakan berbagai metode, salah satunya adalah Decision Tree (Gulo dkk., 2022).

Decision Tree atau pohon keputusan merupakan metode klasifikasi yang menyajikan aturan pengambilan keputusan dalam bentuk struktur pohon. Metode ini bekerja dengan membagi data berdasarkan atribut tertentu hingga diperoleh hasil klasifikasi pada simpul akhir. Struktur tersebut membuat aturan keputusan lebih mudah dipahami karena proses klasifikasi dapat ditelusuri melalui cabang-cabang pohon yang terbentuk (Herlambang & Arifin, 2026).

Pemahaman terhadap metode Decision Tree diperlukan agar proses pembentukan model, pembagian data, dan hasil klasifikasi dapat dipahami dengan baik. Oleh karena itu, praktikum ini dilakukan untuk mempelajari penerapan Decision Tree dalam klasifikasi data, menginterpretasikan struktur pohon keputusan yang dihasilkan, serta mengevaluasi kinerja model menggunakan ukuran evaluasi klasifikasi yang sesuai

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.

1.4 Batasan Masalah

Adapun batasan masalah pada penelitian ini yaitu, gunakan dataset BreastCancer dari package mlbench untuk mengklasifikasikan kondisi kanker payudara menggunakan Decision Tree (Classification Tree). Lakukan pengecekan dan penanganan missing value menggunakan mice, kemudian bagi data menjadi training dan testing. Selanjutnya, bangun dan visualisasikan tree, analisis variable importance, lakukan prediksi dan evaluasi menggunakan confusion matrix, tentukan CP terbaik, lakukan pruning, dan evaluasi kembali model menggunakan confusion matrix, ROC, dan AUC.

BAB II TINJAUAN PUSTAKA

2.1 Decision Tree

Decision Tree merupakan salah satu algoritma pada pengolahan data metode klasifikasi. Algoritma machine learningyang 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 data set itu sendiri. Dalam metode Klasifikasi, algoritma Decision Tree merupakan yang paling banyak digunakan (Biyantoro & Prasetiyo, 2024)

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

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.

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

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)
## Warning: package 'dplyr' was built under R version 4.6.1
## 
## 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)
## Warning: package 'tidyverse' was built under R version 4.6.1
## Warning: package 'ggplot2' was built under R version 4.6.1
## Warning: package 'tibble' was built under R version 4.6.1
## Warning: package 'tidyr' was built under R version 4.6.1
## Warning: package 'readr' was built under R version 4.6.1
## Warning: package 'purrr' was built under R version 4.6.1
## Warning: package 'stringr' was built under R version 4.6.1
## Warning: package 'forcats' was built under R version 4.6.1
## Warning: package 'lubridate' was built under R version 4.6.1
## ── 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)
## Warning: package 'rpart' was built under R version 4.6.1
library(caret)
## Warning: package 'caret' was built under R version 4.6.1
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.6.1
library(mlbench)
## Warning: package 'mlbench' was built under R version 4.6.1
library(mice)
## Warning: package 'mice' was built under R version 4.6.1
## 
## Attaching package: 'mice'
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(yardstick)
## Warning: package 'yardstick' was built under R version 4.6.1
## 
## 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)
## Warning: package 'Metrics' was built under R version 4.6.1
## 
## 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 ...

Pada penelitian ini data yang digunakan yaitu 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

Pada dataset BreastCancer terdapat 16 missing value dari total 699 observasi. Nilai yang hilang tersebut terdapat pada variabel Bare.nuclei. Pada 10 varibael yang lainnya tidak terdapat missing value. Pada variabel yang terdapat missing value 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, sebanyak 16 missing value pada variabel Bare.nuclei berhasil ditangani. Setelah proses imputasi, tidak ditemukan lagi missing value, baik secara keseluruhan maupun pada masing-masing variabel. Dengan demikian, dataset telah lengkap dan 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 dibentuk menggunakan 490 observasi pada data training. Pada simpul akar (root node), kelas benign memiliki proporsi sebesar 65%, sedangkan kelas malignant sebesar 35%.

  1. Pembagian awal data menggunakan variabel Cell.size. Pada kategori 1–2, sebagian besar data termasuk kelas benign dengan proporsi 96%. Sebaliknya, kategori 3–10 didominasi oleh kelas malignant sebesar 87%.

  2. Pada kelompok Cell.size kategori 1–2, pembagian berikutnya dilakukan berdasarkan variabel Bare.nuclei. Kategori 1, 2, 3, dan 5 didominasi kelas benign sebesar 99%, sedangkan kategori 4, 6, 7, 8, dan 10 didominasi kelas malignant sebesar 78%.

  3. Pada kelompok Cell.size kategori 3–10 dengan Bare.nuclei kategori 1 atau 6, dilakukan pemisahan lanjutan berdasarkan Cell.size. Hasilnya, kategori 1–3 memiliki kelas benign sebesar 100%, sedangkan kategori 4–10 didominasi kelas malignant sebesar 82%.

  4. Pada cabang dengan Cell.size kategori 3–10 dan Bare.nuclei kategori 2, 3, 4, 5, 7, 8, 9, serta 10, kelas malignant menjadi kelas yang paling dominan, dengan proporsi 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 model Classification Tree sebelum dilakukan pruning, diperoleh nilai akurasi sebesar 92,82% dan koefisien Kappa sebesar 0,8486. Dari total 209 data testing, sebanyak 122 data benign dan 72 data malignant berhasil diklasifikasikan secara tepat, sedangkan 15 data benign diklasifikasikan sebagai malignant. Model menghasilkan sensitivitas sebesar 100% dan spesifisitas sebesar 89,05%. Hal ini menunjukkan bahwa seluruh data aktual malignant berhasil diidentifikasi dengan benar, sementara 89,05% data aktual benign berhasil diklasifikasikan secara tepat.

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.

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

Decision Tree merupakan metode klasifikasi yang menggunakan struktur pohon untuk membentuk aturan keputusan berdasarkan variabel prediktor. Salah satu algoritma yang digunakan adalah Classification and Regression Tree (CART), yang membagi data secara bertahap berdasarkan karakteristik variabel hingga diperoleh klasifikasi pada setiap simpul akhir. Kinerja model dapat dievaluasi menggunakan confusion matrix, sedangkan penyederhanaan pohon dapat dilakukan melalui pruning dengan menentukan nilai Complexity Parameter (CP) yang optimal.

Berdasarkan hasil praktikum pada dataset BreastCancer, model Decision Tree berhasil mengklasifikasikan kondisi kanker payudara ke dalam kelas benign dan malignant. Variabel Cell.size menjadi variabel yang paling berperan dalam pembentukan model. Setelah dilakukan pruning menggunakan CP sebesar 0,0295858, akurasi model meningkat dari 92,82% menjadi 94,26%, dengan nilai AUC sebesar 0,9524. Hasil tersebut menunjukkan bahwa model setelah pruning memiliki kinerja klasifikasi yang lebih baik secara keseluruhan dan kemampuan yang sangat baik dalam membedakan kedua kelas kanker payudara.

DAFTAR PUSTAKA

Biyantoro, A. S., & Prasetiyo, B. (2024). Application of Decision Tree for Health Status Classification, Compared to KNN and Naive Bayes. MALCOM: Indonesian Journal of Machine Learning and Computer Science, 04(01), 47–55.

Fransiska, H. (2026). Modul praktikum machine learning and modern prediction. Universitas Bengkulu.

Gulo, E. S., -, C., Gulo, Y. R., & Marbun, S. F. (2022). Perbandingan Efektifitas Algoritma Decission Tree, Naïve Bayes, K-Nearest Neighbor Dan Support Vector Machine Dalam Melakukan Klasifikasi. Jurnal Teknologi Dan Ilmu Komputer Prima (Jutikomp), 5(2), 54–59. https://doi.org/10.34012/jutikomp.v5i2.2940

Herlambang, B., & Arifin, F. (2026). Klasifikasi Tipe Berat Badan Obesitas Menggunakan Metode Decision Tree Classification of. 6(8), 1598–1609.