BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan teknologi informasi mendorong meningkatnya jumlah data yang dapat dimanfaatkan untuk memperoleh informasi dan mendukung pengambilan keputusan. Salah satu teknik pengolahan data yang dapat digunakan adalah klasifikasi, yaitu proses pengelompokan data ke dalam kelas tertentu berdasarkan karakteristik atau atribut yang dimiliki. Klasifikasi merupakan salah satu permasalahan yang dapat diselesaikan menggunakan berbagai metode, termasuk Decision Tree, Naive Bayes, dan KNN (Ramadhani & Rosyid, 2022).

Decision Tree merupakan metode klasifikasi yang merepresentasikan proses pengambilan keputusan dalam bentuk struktur pohon yang terdiri atas simpul akar, cabang, dan simpul daun. Struktur tersebut menggambarkan aturan keputusan berdasarkan atribut tertentu sehingga hasil klasifikasi lebih mudah dipahami dan diinterpretasikan. Hasanah et al. (2021) menjelaskan penerapan Decision Tree dengan algoritma Classification and Regression Tree (CART) untuk mengklasifikasikan kategori curah hujan yang berpotensi menyebabkan banjir.

Algoritma CART merupakan salah satu algoritma Decision Tree yang dapat digunakan untuk membangun model klasifikasi dengan membagi data secara bertahap berdasarkan kriteria pemisahan terbaik hingga diperoleh kelompok data yang sesuai dengan kelasnya. Pembangunan Classification Tree menggunakan CART meliputi penentuan variabel, pembentukan pohon keputusan, pemilihan pemisah berdasarkan tingkat ketidakmurnian kelas, serta evaluasi kinerja model. Stiawan dan Nugroho (2023) menunjukkan bahwa algoritma CART dapat diterapkan untuk klasifikasi penerima beasiswa dengan mengevaluasi kinerja model berdasarkan nilai accuracy, precision, dan recall.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, masalah yang dapat disimpulkan adalah:

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

Berdasarkan rumusan masalah pada penelitian ini, tujuan yang dapat disimpulkan adalah:

  1. Mahasiswa dapat menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).

  2. Mahasiswa dapat Membangun model Classification Tree menggunakan algoritma CART.

BAB II TINJAUAN PUSTAKA

2.1 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 divisualisasikan dalam bentuk pohon.

  2. Dapat menggunakan variabel prediktor numerik maupun kategorik.

  3. Membagi data secara bertahap melalui proses splitting sehingga kelompok yang terbentuk semakin homogen.

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

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

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_{\text{split}} = \frac{|D_1|}{|D|} Gini(D_1) + \frac{|D_2|}{|D|} Gini(D_2) \] Regression Tree digunakan ketika variabel respon 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 respon yang semakin mirip (Fransiska, 2026).

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data pada penelitian ini adalah data kuantitatif dan data kualitatif. Data kuantitatif merupakan data atau informasi yang didapatkan dalam bentuk angka atau numerik. Data kuantitatif dapat diproses menggunakan rumus matematika atau dapat juga dianalisis dengan sistem statistik. Data kualitatif adalah suatu data yang tidak bisa diukur dengan angka. Data kualitatif adalah data yang dinyatakan dalam bentuk deskriptif atau naratif, bukan dalam bentuk angka.

Sumber data yang digunakan oleh penulis merupakan data sekunder. Data sekunder adalah sumber data yang diperoleh secara tidak langsung atau melalui media perantara. Data yang digunakan pada batasan masalah laporan ini merupakan data BreastCancer yang diperoleh langsung dari program R.

3.2 Variabel Penelitian

Variabel penelitian adalah karakter atau segala sesuatu yang menjadi perhatian dalam suatu penelitian. Pada laporan ini terdapat 10 variabel yang digunakan pada data. Variabel tersebut, yaitu Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl,cromatin, Normal.nucleoli, Mitoses, dan Class.

3.3 Langkah-langkah Analisis

  1. Input data.

  2. Pengecekan dan penanganan missing value.

  3. Pembagian data latih dan data uji.

  4. Pembentukan model klasifikasi menggunakan metode Decision Tree.

  5. Visualisasi pohon klasifikasi.

  6. Analisis variabel importance.

  7. Prediksi dan evaluasi model menggunakan confusion matrix.

  8. Penentuan nilai CP terbaik.

  9. Pemangkasan pohon (pruning).

  10. Evaluasi model setelah pruning menggunakan confusion matrix, kurva ROC, dan AUC.

  11. Output dan interpretasi.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library

Langkah pertama yang dilakukan adalah memanggil library dan mengimport 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(ISLR)
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
#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 dari package mlbench terdiri atas 699 observasi dan 11 variabel. Variabel tersebut mencakup satu variabel identitas (Id), sembilan variabel prediktor yang menggambarkan karakteristik sel, serta satu variabel respon (Class) yang terdiri atas dua kategori, yaitu benign (jinak) dan malignant (ganas).

4.2 Pengecekan dan Penanganan Missing Value

#Menghapus variabel ID
BreastCancer = BreastCancer[,-1]

#Pengecekan Missing Value
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 
##              16               0               0               0               0
#Penanganan Missing Value menggunakan mice
data_mice <- mice(BreastCancer, m = 1, method = "pmm",
                  seed = 234)
## 
##  iter imp variable
##   1   1  Bare.nuclei
##   2   1  Bare.nuclei
##   3   1  Bare.nuclei
##   4   1  Bare.nuclei
##   5   1  Bare.nuclei
BreastCancer <- complete(data_mice)

#Mengubah variabel respon menjadi faktor
BreastCancer$Class = as.factor(BreastCancer$Class)

Pengecekan missing value menunjukkan bahwa variabel Bare.nuclei memiliki 16 nilai hilang, sedangkan variabel lainnya tidak memiliki nilai hilang. Penanganan dilakukan menggunakan package mice dengan metode Predictive Mean Matching (pmm). Setelah proses imputasi, data dilengkapi kembali menggunakan fungsi complete(), sehingga data dapat digunakan untuk pemodelan tanpa nilai hilang.

4.3 Membangi Data Latih dan Uji

#Data Training dan Testing
set.seed(234)
train <- createDataPartition(
  BreastCancer$Class,
  p = 0.7,
  list = FALSE)

BreastCancer.train = BreastCancer[train,]
BreastCancer.test = BreastCancer[-train,]
Class.test = BreastCancer$Class[-train]

Data dibagi menjadi data latih sebesar 70% dan data uji sebesar 30% menggunakan fungsi createDataPartition(). Dari total 699 observasi, sebanyak 490 observasi digunakan sebagai data latih dan 209 observasi sebagai data uji. Pembagian ini mempertahankan proporsi kelas respon sehingga kedua kelompok data dapat digunakan untuk membangun dan mengevaluasi model klasifikasi.

4.4 Membangun dan Memvisualisasikan Classification Tree

#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=4,6,7,8,10 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 22   8 benign (0.63636364 0.36363636)  
##       12) Cell.size=1,2,3 12   0 benign (1.00000000 0.00000000) *
##       13) Cell.size=4,5,6,7,8,9,10 10   2 malignant (0.20000000 0.80000000) *
##      7) Bare.nuclei=2,3,4,5,6,7,8,9,10 159   9 malignant (0.05660377 0.94339623) *
#Visualisasi Tree
rpart.plot(fit.tree)

Model Decision Tree dibangun menggunakan fungsi rpart() dengan metode klasifikasi dan nilai awal Complexity Parameter (CP) sebesar 0,008. Hasil pohon menunjukkan bahwa Cell.size dan Bare.nuclei merupakan variabel yang digunakan dalam percabangan pohon. Variabel Cell.size menjadi pemisah pada akar pohon, sedangkan Bare.nuclei digunakan untuk membentuk percabangan berikutnya. Hal ini menunjukkan bahwa kedua variabel tersebut berperan penting dalam membedakan kelas kanker payudara pada model yang terbentuk.

4.5 Analisis Variabel Importance

#Variable Importance
fit.tree$variable.importance
##       Cell.size      Cell.shape     Bare.nuclei     Bl.cromatin    Epith.c.size 
##      167.034783      134.398275      133.737946      122.207637      117.003541 
## Normal.nucleoli   Marg.adhesion    Cl.thickness 
##      114.153425        5.585455        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 = .3) +
  theme_minimal() +
  coord_flip() +
  labs(
    x = "",
    y = "",
    title =
      "Variable Importance with Classification Tree")

Hasil variabel importance menunjukkan bahwa Cell.size memiliki nilai kepentingan tertinggi sebesar 167,03, diikuti oleh Cell.shape sebesar 134,40 dan Bare.nuclei sebesar 133,74. Sementara itu, Marg.adhesion dan Cl.thickness memiliki nilai yang relatif rendah, masing-masing sebesar 5,59 dan 3,40. Dengan demikian, Cell.size merupakan variabel yang paling berkontribusi terhadap pemisahan kelas pada model, sedangkan nilai kepentingan variabel lainnya menunjukkan kontribusi relatif dalam proses klasifikasi.

4.6 Prediksi dan Evalusi Model Awal

#Prediksi
pred.tree = predict(
  fit.tree,
  BreastCancer.test,
  type = "class"
)

table(
  pred.tree,
  Class.test)
##            Class.test
## pred.tree   benign malignant
##   benign       122         0
##   malignant     15        72
#Confusion Matrix
matriks_kesalahan <- confusionMatrix(
  pred.tree,
  BreastCancer.test$Class)

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 : 0.8905          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.8276          
##              Prevalence : 0.6555          
##          Detection Rate : 0.5837          
##    Detection Prevalence : 0.5837          
##       Balanced Accuracy : 0.9453          
##                                           
##        'Positive' Class : benign          
## 
matriks_kesalahan <- confusionMatrix(
  pred.tree,
  BreastCancer.test$Class,
  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 prediksi terhadap 209 data uji, diperoleh 122 data benign yang diprediksi benar sebagai benign dan 72 data malignant yang diprediksi benar sebagai malignant. Selain itu, terdapat 15 data benign yang salah diklasifikasikan sebagai malignant, sedangkan tidak terdapat data malignant yang salah diklasifikasikan sebagai benign.

Hasil evaluasi model menunjukkan nilai accuracy sebesar 92,82% dan Kappa sebesar 0,8486. Ketika kelas positif ditetapkan sebagai malignant, diperoleh sensitivity sebesar 100% dan specificity sebesar 89,05%. Artinya, model berhasil mendeteksi seluruh kasus malignant pada data uji, tetapi masih terdapat beberapa kasus benign yang salah diklasifikasikan sebagai malignant.

4.7 Menetukan CP Terbaik

#Menampilkan Tabel CP
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.17160 0.030908
#Menentukan CP Terbaik
fit.tree$cptable[
  which.min(
    fit.tree$cptable[,"xerror"]
  ),
  "CP"]
## [1] 0.008
bestcp <- fit.tree$cptable[
  which.min(fit.tree$cptable[,"xerror"]),
  "CP"]

bestcp
## [1] 0.008
#Visualisasi CP
plotcp(fit.tree, upper = "splits")

Penentuan CP terbaik dilakukan berdasarkan nilai cross-validation error terkecil pada tabel CP. Hasil menunjukkan bahwa nilai terkecil sebesar 0,17160 diperoleh pada CP sebesar 0,008 dengan empat percabangan (nsplit = 4). Oleh karena itu, nilai CP terbaik yang diperoleh adalah 0,008, yang selanjutnya digunakan dalam proses pruning.

4.8 Melakukan Pruning dan Visualisasi

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

#Visualisasi Tree setelah Pruning
rpart.plot(pruned.tree)

Proses pruning dilakukan menggunakan nilai CP terbaik sebesar 0,008. Berdasarkan hasil yang diperoleh, struktur pohon setelah pruning tidak mengalami perubahan dibandingkan pohon awal karena nilai CP yang digunakan sama dengan nilai CP awal pembentukan model. Dengan demikian, proses pruning tersebut tidak menghasilkan penyederhanaan pohon klasifikasi.

4.9 Prediksi dan Evaluasi Model setelah Pruning

#Prediksi setelah Pruning
pred.prune = predict(
  pruned.tree,
  BreastCancer.test,
  type = "class")

table(pred.prune, Class.test)
##            Class.test
## pred.prune  benign malignant
##   benign       122         0
##   malignant     15        72
#Confusion Matrix setelah Pruning
matriks_kesalahan <- confusionMatrix(
  pred.prune,
  BreastCancer.test$Class)

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 : 0.8905          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.8276          
##              Prevalence : 0.6555          
##          Detection Rate : 0.5837          
##    Detection Prevalence : 0.5837          
##       Balanced Accuracy : 0.9453          
##                                           
##        'Positive' Class : benign          
## 
matriks_kesalahan <- confusionMatrix(
  pred.prune,
  BreastCancer.test$Class,
  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       
## 

Hasil prediksi setelah pruning menunjukkan matriks klasifikasi yang sama dengan model awal, yaitu 122 data benign dan 72 data malignant berhasil diklasifikasikan dengan benar, sedangkan 15 data benign salah diklasifikasikan sebagai malignant. Nilai accuracy tetap sebesar 92,82%, sensitivity sebesar 100%, dan specificity sebesar 89,05% ketika kelas positif ditetapkan sebagai malignant. Hasil ini menunjukkan bahwa proses pruning tidak mengubah kinerja model pada data uji.

4.10 Evaluasi Akhir

#Probabilitas Prediksi
breastcancer_preds_cart <- bind_cols(
  predict(
    pruned.tree,
    newdata = BreastCancer.test,
    type = "prob"),

  predicted = predict(
    pruned.tree,
    newdata = BreastCancer.test,
    type = "class"),

  actual = BreastCancer.test$Class)

breastcancer_preds_cart
## # A tibble: 209 × 4
##    benign malignant predicted actual   
##     <dbl>     <dbl> <fct>     <fct>    
##  1 0.987     0.0133 benign    benign   
##  2 0.222     0.778  malignant benign   
##  3 0.987     0.0133 benign    benign   
##  4 0.987     0.0133 benign    benign   
##  5 0.0566    0.943  malignant malignant
##  6 0.987     0.0133 benign    benign   
##  7 0.987     0.0133 benign    benign   
##  8 0.987     0.0133 benign    benign   
##  9 0.0566    0.943  malignant malignant
## 10 0.2       0.8    malignant malignant
## # ℹ 199 more rows
#Confusion Matrix
breastcancer_cm_cart <- confusionMatrix(
  breastcancer_preds_cart$predicted,
  reference = breastcancer_preds_cart$actual,
  positive = "malignant")

breastcancer_cm_cart
## 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       
## 
#AUC
mdl_auc <- Metrics::auc(
  actual =
    breastcancer_preds_cart$actual == "malignant",
  predicted =
    breastcancer_preds_cart$malignant)

mdl_auc
## [1] 0.9629461
#ROC Curve
yardstick::roc_curve(
  breastcancer_preds_cart,
  actual,
  malignant
) %>%
  autoplot() +
  labs(
    title = "ROC Curve",
    subtitle =
      paste0(
        "AUC = ",
        round(mdl_auc, 4)))

Hasil evaluasi akhir menunjukkan bahwa model setelah pruning memiliki accuracy sebesar 92,82%, sensitivity sebesar 100%, dan specificity sebesar 89,05%. Sementara itu, nilai AUC yang diperoleh adalah 0,9629. Nilai tersebut menunjukkan bahwa model memiliki kemampuan yang sangat baik dalam membedakan kelas benign dan malignant berdasarkan probabilitas prediksinya.

Secara keseluruhan, model Decision Tree menghasilkan kinerja klasifikasi yang baik dengan akurasi 92,82% dan AUC 0,9629. Namun, model masih menghasilkan 15 kesalahan klasifikasi pada kelas benign. Selain itu, karena nilai CP terbaik sama dengan CP awal, proses pruning tidak memberikan perubahan pada struktur pohon maupun hasil evaluasi model.

BAB V KESIMPULAN

5.1 Kesimpulan

Decision Tree merupakan metode klasifikasi yang membentuk struktur pohon melalui proses pemisahan data secara bertahap untuk menghasilkan keputusan berdasarkan variabel prediktor. Metode CART (Classification and Regression Tree) membentuk pohon klasifikasi dengan memilih pemisahan yang menghasilkan kelompok data semakin homogen, yang dapat diukur menggunakan Entropy, Information Gain, atau Gini Index. Kompleksitas pohon dapat dikurangi melalui proses pruning untuk menghasilkan model yang lebih sederhana dan mengurangi risiko overfitting.

Model Classification Tree menggunakan algoritma CART dibangun dengan menyiapkan data, menentukan variabel prediktor dan variabel respon, serta membagi data menjadi data latih dan data uji. Selanjutnya, model dibentuk melalui proses splitting untuk memperoleh kelompok data yang homogen, kemudian divisualisasikan dan dianalisis berdasarkan tingkat kepentingan variabel. Model dapat disederhanakan melalui pruning menggunakan nilai complexity parameter (CP) terbaik, lalu dievaluasi menggunakan confusion matrix, kurva ROC, dan nilai AUC untuk mengetahui kinerja klasifikasinya.

Berdasarkan hasil pemodelan Classification Tree menggunakan algoritma CART pada dataset BreastCancer, diperoleh model dengan akurasi sebesar 92,82% dan nilai AUC sebesar 0,9629, yang menunjukkan kemampuan klasifikasi yang sangat baik. Variabel Cell.size menjadi variabel dengan tingkat kepentingan tertinggi, sedangkan evaluasi menunjukkan bahwa seluruh data kanker ganas (malignant) berhasil diklasifikasikan dengan benar, meskipun terdapat 15 data jinak (benign) yang salah diklasifikasikan sebagai ganas. Proses pruning menggunakan nilai CP sebesar 0,008 tidak mengubah struktur maupun kinerja model, sehingga model awal tetap menghasilkan performa yang sama setelah pemangkasan.

DAFTAR PUSTAKA

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. https://journal.irpi.or.id/index.php/ijirse

Stiawan, D. B., & Nugroho, Y. S. (2023). Perbandingan Performa Algoritma Decision Tree untuk Klasifikasi Penerima Beasiswa Bank Indonesia. Indonesian Journal of Computer Science, 12(4), 2108–2123.

Fransiska, H. (2026). Modul Praktikum Machine Learning dan Modern Prediction. Bengkulu: Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.

Hasanah, M. A., Soim, S., & Handayani, A. S. (2021). Implementasi CRISP-DM Model Menggunakan Metode Decision Tree dengan Algoritma CART untuk Prediksi Curah Hujan Berpotensi Banjir. Journal of Applied Informatics and Computing (JAIC), 5(2), 103–108. http://jurnal.polibatam.ac.id/index.php/JAIC

Ramadhani, N. A., & Rosyid, H. A. (2022). Algoritma-algoritma Data Mining untuk Klasifikasi Data. Jurnal Inovasi Teknik Dan Edukasi Teknologi, 2(12), 550–557. https://doi.org/10.17977/um068v2i122022p550-556