BAB I PENDAHULUAN

1.1 Latar Belakang

Perkembangan teknologi informasi menyebabkan peningkatan jumlah data yang dihasilkan dari berbagai bidang. Data tersebut dapat dimanfaatkan untuk memperoleh informasi dan menemukan pola yang berguna dalam mendukung proses pengambilan keputusan. Salah satu teknik yang dapat digunakan untuk mengolah data adalah data mining, yaitu proses menemukan pola atau informasi yang bermanfaat dari sekumpulan data. Data mining dapat digunakan untuk berbagai keperluan, seperti klasifikasi, estimasi, prediksi, asosiasi dan klasterisasi. Salah satu metode klasifikasi yang banyak digunakan adalah Decision Tree atau pohon keputusan (Setio, Saputro dan Winarno, 2020).

Decision Tree merupakan metode pembelajaran mesin yang merepresentasikan proses pengambilan keputusan dalam bentuk struktur pohon. Struktur tersebut terdiri atas simpul akar (root node), simpul keputusan (internal node), cabang (branch) dan simpul daun (leaf node). Setiap simpul keputusan menunjukkan pengujian terhadap atribut tertentu, sedangkan simpul daun menunjukkan hasil klasifikasi atau keputusan yang diperoleh. Melalui struktur tersebut, data dapat diklasifikasikan berdasarkan serangkaian aturan yang terbentuk dari atribut-atribut yang tersedia (Chair, Nasution dan Rizki, 2017).

Metode Decision Tree memiliki keunggulan berupa struktur model yang relatif mudah dipahami dan hasil klasifikasi yang dapat disajikan dalam bentuk aturan keputusan. Salah satu algoritma yang digunakan untuk membangun pohon keputusan adalah C4.5. Algoritma ini menentukan atribut pemisah berdasarkan kriteria tertentu, seperti information gain, yang berkaitan dengan perubahan nilai entropi setelah data dibagi ke dalam kelompok-kelompok tertentu. Pemilihan atribut dilakukan secara bertahap hingga terbentuk struktur pohon yang dapat digunakan untuk mengklasifikasikan data baru (Setio, Saputro dan Winarno, 2020).

1.2 Rumusan Masalah

Berdasarkan latar belakang diatas, rumusan masalah penelitian ini yaitu:

  1. Bagaimana cara 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 Penelitian

Berdasarkan rumusan masalah diatas, tujuan dari penelitian ini yaitu:

  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 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. 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 and Regression Tree (CART)

Classification and Regression Tree (CART) merupakan algoritma yang digunakan untuk membentuk pohon keputusan dalam permasalahan klasifikasi maupun regresi. Klasifikasi digunakan ketika variabel respons berupa kategori, sedangkan regresi digunakan ketika variabel respons berupa nilai numerik. CART membentuk pohon melalui proses pemisahan data secara bertahap berdasarkan atribut prediktor sehingga terbentuk kelompok data yang semakin sesuai dengan tujuan pemodelan. Pada kasus klasifikasi, CART umumnya menggunakan pemisahan biner, yaitu setiap simpul keputusan dibagi menjadi dua cabang. Salah satu kriteria yang dapat digunakan untuk menentukan pemisahan terbaik adalah indeks Gini. Pemisahan dipilih berdasarkan kemampuannya mengurangi ketidakmurnian (impurity) kelas pada simpul hasil pemisahan. Semakin kecil nilai indeks Gini, semakin homogen kelas yang terdapat dalam simpul tersebut (Hasanah, Soim dan Handayani, 2021).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

Jenis data yang digunakan dalam penelitian ini berupa data kuantitatif. Sumber data yang digunakan dalam penelitian ini adalah data sekunder. Data sekunder adalah sumber data yang diperoleh secara tidak langsung melalui perantara (diperoleh dan dicatat oleh pihak lain). Pada penelitian ini data sekunder yang dimaksud adalah data yang diperoleh dari dataset program R, yaitu dataset BreastCancer.

3.2 Variabel Penelitian

Variabel penelitian adalah suatu atribut atau sifat atau nilai dari orang, objek, organisasi, atau kegiatan yang mempunyai variasi tertentu yang ditetapkan oleh peneliti untuk dipelajari dan kemudian ditarik kesimpulannya. Pada penelitian ini menggunakan sepuluh variabel. Variabel tersebut adalah 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

Algoritma batasan masalah adalah sebagai berikut:

  1. Menyiapkan dataset BreastCancer dari package mlbench.
  2. Melakukan eksplorasi data untuk mengetahui struktur, dimensi, distribusi kelas dan karakteristik variabel.
  3. Memeriksa jumlah dan persentase missing value pada setiap variabel.
  4. Melakukan preprocessing data dengan menghapus variabel identitas Id dan mengubah tipe data prediktor menjadi numerik.
  5. Menangani missing value menggunakan metode Multiple Imputation by Chained Equations (MICE).
  6. Membagi data menjadi data training dan testing menggunakan stratified splitting dengan proporsi 80:20.
  7. Membangun model Decision Tree (Classification Tree) menggunakan algoritma CART.
  8. Memvisualisasikan struktur pohon klasifikasi yang terbentuk.
  9. Menganalisis variable importance untuk mengetahui variabel prediktor yang paling berpengaruh dalam klasifikasi.
  10. Melakukan prediksi pada data testing dan mengevaluasi model awal menggunakan confusion matrix.
  11. Menentukan nilai Complexity Parameter (CP) terbaik berdasarkan nilai cross-validation error terkecil.
  12. Melakukan pruning untuk menyederhanakan struktur pohon berdasarkan nilai CP terbaik.
  13. Melakukan prediksi menggunakan model setelah pruning dan mengevaluasi hasilnya menggunakan confusion matrix.
  14. Mengevaluasi dan membandingkan kinerja model sebelum dan setelah pruning menggunakan kurva ROC dan nilai AUC.
  15. Menginterpretasikan hasil klasifikasi serta membandingkan kinerja kedua model untuk menentukan model yang lebih sesuai.

BAB IV HASIL DAN PEMBAHASAN

4.1 Memanggil Dataset

# Memanggil package
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(rpart)
library(rpart.plot)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
library(ggplot2)
library(knitr)

# Mengatur seed agar hasil dapat direproduksi
set.seed(123)
# Memanggil dataset BreastCancer
data("BreastCancer")
# Melihat struktur data
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 ...
# Melihat enam baris pertama
head(BreastCancer)
##        Id Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 1 1000025            5         1          1             1            2
## 2 1002945            5         4          4             5            7
## 3 1015425            3         1          1             1            2
## 4 1016277            6         8          8             1            3
## 5 1017023            4         1          1             3            2
## 6 1017122            8        10         10             8            7
##   Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses     Class
## 1           1           3               1       1    benign
## 2          10           3               2       1    benign
## 3           2           3               1       1    benign
## 4           4           3               7       1    benign
## 5           1           3               1       1    benign
## 6          10           9               7       1 malignant
# Melihat dimensi dataset
dim(BreastCancer)
## [1] 699  11
# Melihat ringkasan data
summary(BreastCancer)
##       Id             Cl.thickness   Cell.size     Cell.shape  Marg.adhesion
##  Length:699         1      :145   1      :384   1      :353   1      :407  
##  Class :character   5      :130   10     : 67   2      : 59   2      : 58  
##  Mode  :character   3      :108   3      : 52   10     : 58   3      : 58  
##                     4      : 80   2      : 45   3      : 56   10     : 55  
##                     10     : 69   4      : 40   4      : 44   4      : 33  
##                     2      : 50   5      : 30   5      : 34   8      : 25  
##                     (Other):117   (Other): 81   (Other): 95   (Other): 63  
##   Epith.c.size  Bare.nuclei   Bl.cromatin  Normal.nucleoli    Mitoses   
##  2      :386   1      :402   2      :166   1      :443     1      :579  
##  3      : 72   10     :132   3      :165   10     : 61     2      : 35  
##  4      : 48   2      : 30   1      :152   3      : 44     3      : 33  
##  1      : 47   5      : 30   7      : 73   2      : 36     10     : 14  
##  6      : 41   3      : 28   4      : 40   8      : 24     4      : 12  
##  5      : 39   (Other): 61   5      : 34   6      : 22     7      :  9  
##  (Other): 66   NA's   : 16   (Other): 69   (Other): 69     (Other): 17  
##        Class    
##  benign   :458  
##  malignant:241  
##                 
##                 
##                 
##                 
## 

Dataset BreastCancer terdiri dari 699 observasi dan 11 variabel, yaitu satu variabel identitas, sembilan variabel prediktor, dan satu variabel target Class. Variabel target terdiri dari 458 data benign dan 241 data malignant.

4.2 Pengecekan Missing Value

# Menghitung jumlah missing value setiap variabel
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
# Menghitung total missing value
sum(is.na(BreastCancer))
## [1] 16
# Menghitung persentase missing value setiap variabel
round(colMeans(is.na(BreastCancer)) * 100, 2)
##              Id    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion 
##            0.00            0.00            0.00            0.00            0.00 
##    Epith.c.size     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses 
##            0.00            2.29            0.00            0.00            0.00 
##           Class 
##            0.00
# Memeriksa missing value pada variabel target
sum(is.na(BreastCancer$Class))
## [1] 0

Terdapat 16 missing value pada variabel Bare.nuclei. Sementara itu, variabel lainnya termasuk variabel target Class tidak memiliki missing value.

4.3 Preprocessing dan Penanganan Missing Value Menggunakan MICE

# Menghapus variabel Id
data_bc <- BreastCancer[, -1]
# Mengubah variabel prediktor menjadi numerik
prediktor <- setdiff(names(data_bc), "Class")
data_bc[prediktor] <- lapply(
  data_bc[prediktor],
  function(x) as.numeric(as.character(x))
)
# Mempertahankan target sebagai faktor
data_bc$Class <- factor(
  data_bc$Class,
  levels = c("benign", "malignant")
)
# Memeriksa struktur data setelah preprocessing
str(data_bc)
## 'data.frame':    699 obs. of  10 variables:
##  $ Cl.thickness   : num  5 5 3 6 4 8 1 2 2 4 ...
##  $ Cell.size      : num  1 4 1 8 1 10 1 1 1 2 ...
##  $ Cell.shape     : num  1 4 1 8 1 10 1 2 1 1 ...
##  $ Marg.adhesion  : num  1 5 1 1 3 8 1 1 1 1 ...
##  $ Epith.c.size   : num  2 7 2 3 2 7 2 2 2 2 ...
##  $ Bare.nuclei    : num  1 10 2 4 1 10 10 1 1 1 ...
##  $ Bl.cromatin    : num  3 3 3 3 3 9 3 3 1 2 ...
##  $ Normal.nucleoli: num  1 2 1 7 1 7 1 1 1 1 ...
##  $ Mitoses        : num  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 ...
# Memeriksa missing value kembali
colSums(is.na(data_bc))
##    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
# Memeriksa distribusi kelas
table(data_bc$Class)
## 
##    benign malignant 
##       458       241
# Menentukan metode imputasi untuk setiap variabel
metode <- mice::make.method(data_bc)
# Imputasi predictive mean matching untuk prediktor numerik
metode[prediktor] <- "pmm"
# Variabel target tidak diimputasi
metode["Class"] <- ""
# Menjalankan multiple imputation menggunakan MICE
set.seed(123)
hasil_mice <- mice(
  data_bc,
  m = 5,
  maxit = 5,
  method = metode,
  seed = 123,
  printFlag = FALSE
)
# Mengambil dataset hasil imputasi pertama
data_bc_imputasi <- complete(hasil_mice, 1)
# Memeriksa missing value setelah imputasi
colSums(is.na(data_bc_imputasi))
##    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
# Melihat ringkasan data setelah imputasi
summary(data_bc_imputasi)
##   Cl.thickness      Cell.size        Cell.shape     Marg.adhesion   
##  Min.   : 1.000   Min.   : 1.000   Min.   : 1.000   Min.   : 1.000  
##  1st Qu.: 2.000   1st Qu.: 1.000   1st Qu.: 1.000   1st Qu.: 1.000  
##  Median : 4.000   Median : 1.000   Median : 1.000   Median : 1.000  
##  Mean   : 4.418   Mean   : 3.134   Mean   : 3.207   Mean   : 2.807  
##  3rd Qu.: 6.000   3rd Qu.: 5.000   3rd Qu.: 5.000   3rd Qu.: 4.000  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##   Epith.c.size     Bare.nuclei      Bl.cromatin     Normal.nucleoli 
##  Min.   : 1.000   Min.   : 1.000   Min.   : 1.000   Min.   : 1.000  
##  1st Qu.: 2.000   1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 1.000  
##  Median : 2.000   Median : 1.000   Median : 3.000   Median : 1.000  
##  Mean   : 3.216   Mean   : 3.514   Mean   : 3.438   Mean   : 2.867  
##  3rd Qu.: 4.000   3rd Qu.: 5.500   3rd Qu.: 5.000   3rd Qu.: 4.000  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##     Mitoses             Class    
##  Min.   : 1.000   benign   :458  
##  1st Qu.: 1.000   malignant:241  
##  Median : 1.000                  
##  Mean   : 1.589                  
##  3rd Qu.: 1.000                  
##  Max.   :10.000

Berdasarkan hasil preprocessing, variabel Id dihapus karena hanya berfungsi sebagai identitas, sehingga tersisa 10 variabel yang terdiri dari sembilan prediktor dan satu variabel target Class. Penanganan missing value menggunakan metode MICE dengan predictive mean matching (PMM) berhasil mengatasi 16 data hilang pada variabel Bare.nuclei. Hasil penanganan menunjukkan, seluruh variabel sudah tidak memiliki missing value. Distribusi kelas tetap terdiri dari 458 data benign dan 241 data malignant, sehingga data siap digunakan untuk tahap pemodelan Decision Tree.

4.4 Membagi Data Training dan Testing

set.seed(123)

# Membagi data secara stratified
indeks_train <- createDataPartition(
  data_bc_imputasi$Class,
  p = 0.80,
  list = FALSE
)
# Data training
train_data <- data_bc_imputasi[indeks_train, ]
# Data testing
test_data <- data_bc_imputasi[-indeks_train, ]
# Melihat dimensi data
dim(train_data)
## [1] 560  10
dim(test_data)
## [1] 139  10
# Memeriksa distribusi kelas pada data training
prop.table(table(train_data$Class))
## 
##    benign malignant 
## 0.6553571 0.3446429
# Memeriksa distribusi kelas pada data testing
prop.table(table(test_data$Class))
## 
##    benign malignant 
## 0.6546763 0.3453237

Berdasarkan hasil pembagian data menggunakan stratified splitting dengan proporsi 80:20, diperoleh 560 observasi data training dan 139 observasi data testing. Proporsi kelas benign dan malignant pada kedua data relatif sama, yaitu sekitar 65,5% dan 34,5%. Hal ini menunjukkan bahwa pembagian data berhasil mempertahankan proporsi kelas sehingga kedua data dapat digunakan untuk membangun dan mengevaluasi model Decision Tree.

4.5 Membangun Model Classification Tree

# Membangun model Decision Tree
model_tree <- rpart(
  Class ~ .,
  data = train_data,
  method = "class",
  control = rpart.control(
    cp = 0.001,
    minsplit = 20,
    minbucket = 7,
    xval = 10
  )
)
# Menampilkan ringkasan model
print(model_tree)
## n= 560 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##   1) root 560 193 benign (0.65535714 0.34464286)  
##     2) Cell.size< 2.5 347  11 benign (0.96829971 0.03170029)  
##       4) Bare.nuclei< 5.5 340   5 benign (0.98529412 0.01470588) *
##       5) Bare.nuclei>=5.5 7   1 malignant (0.14285714 0.85714286) *
##     3) Cell.size>=2.5 213  31 malignant (0.14553991 0.85446009)  
##       6) Cell.shape< 2.5 19   5 benign (0.73684211 0.26315789) *
##       7) Cell.shape>=2.5 194  17 malignant (0.08762887 0.91237113)  
##        14) Bl.cromatin< 4.5 75  15 malignant (0.20000000 0.80000000)  
##          28) Cl.thickness< 6.5 35  14 malignant (0.40000000 0.60000000)  
##            56) Marg.adhesion< 5.5 26  13 benign (0.50000000 0.50000000)  
##             112) Bl.cromatin< 3.5 15   5 benign (0.66666667 0.33333333) *
##             113) Bl.cromatin>=3.5 11   3 malignant (0.27272727 0.72727273) *
##            57) Marg.adhesion>=5.5 9   1 malignant (0.11111111 0.88888889) *
##          29) Cl.thickness>=6.5 40   1 malignant (0.02500000 0.97500000) *
##        15) Bl.cromatin>=4.5 119   2 malignant (0.01680672 0.98319328) *
# Menampilkan tabel kompleksitas
printcp(model_tree)
## 
## Classification tree:
## rpart(formula = Class ~ ., data = train_data, method = "class", 
##     control = rpart.control(cp = 0.001, minsplit = 20, minbucket = 7, 
##         xval = 10))
## 
## Variables actually used in tree construction:
## [1] Bare.nuclei   Bl.cromatin   Cell.shape    Cell.size     Cl.thickness 
## [6] Marg.adhesion
## 
## Root node error: 193/560 = 0.34464
## 
## n= 560 
## 
##          CP nsplit rel error  xerror     xstd
## 1 0.7823834      0   1.00000 1.00000 0.058272
## 2 0.0466321      1   0.21762 0.21762 0.032295
## 3 0.0259067      2   0.17098 0.18653 0.030072
## 4 0.0064767      3   0.14508 0.15544 0.027609
## 5 0.0010000      7   0.11917 0.17617 0.029281

Berdasarkan hasil pembentukan model Decision Tree menggunakan algoritma CART pada 560 data training, diperoleh pohon klasifikasi yang menggunakan enam variabel prediktor, yaitu Cell.size, Bare.nuclei, Cell.shape, Bl.cromatin, Cl.thickness dan Marg.adhesion. Variabel Cell.size menjadi pemisah pertama pada root node, sehingga berperan penting dalam membedakan kelas benign dan malignant. Hasil pembagian menunjukkan bahwa data dengan Cell.size < 2,5 sebagian besar diklasifikasikan sebagai benign, sedangkan data dengan Cell.size >= 2,5 sebagian besar diklasifikasikan sebagai malignant.

Berdasarkan tabel kompleksitas, nilai cross-validation error terkecil adalah 0,15544 pada CP = 0,0064767 dengan tiga pemisahan (nsplit). Nilai tersebut menunjukkan bahwa model dengan kompleksitas tersebut memiliki kesalahan validasi silang paling rendah di antara pilihan yang ditampilkan. Oleh karena itu, nilai CP = 0,0064767 dapat dipilih untuk proses pruning pohon agar model menjadi lebih sederhana dengan tetap mempertahankan kemampuan klasifikasinya.

4.6 Visualisasi Pohon Klasifikasi

rpart.plot::rpart.plot(
  model_tree,
  type = 3,
  extra = 104,
  fallen.leaves = TRUE,
  main = "Classification Tree Kanker Payudara"
)

Pohon klasifikasi menunjukkan bahwa variabel Cell.size, Bare.nuclei, Cell.shape, Bl.cromatin, Cl.thickness dan Marg.adhesion digunakan untuk mengklasifikasikan kanker payudara ke dalam kelas benign dan malignant. Variabel Cell.size menjadi pemisah utama pada akar pohon. Data dengan Cell.size < 2,5 dan Bare.nuclei < 5,5 cenderung diklasifikasikan sebagai benign. Sebaliknya, data dengan Cell.size ≥ 2,5 sebagian besar diklasifikasikan sebagai malignant.

4.7 Analisis Variable Importance

# Mengambil nilai variable importance
importance <- model_tree$variable.importance
# Mengurutkan importance dari terbesar ke terkecil
importance <- sort(importance, decreasing = TRUE)
# Menampilkan nilai variable importance
importance
##       Cell.size      Cell.shape     Bare.nuclei    Epith.c.size     Bl.cromatin 
##      181.084668      158.239385      130.888305      128.794351      127.183265 
## Normal.nucleoli    Cl.thickness   Marg.adhesion         Mitoses 
##      121.403654        9.157423        2.792062        2.174691
# Membuat data frame untuk visualisasi
importance_df <- data.frame(
  Variabel = names(importance),
  Importance = as.numeric(importance)
)
# Visualisasi variable importance
ggplot(
  importance_df,
  aes(
    x = reorder(Variabel, Importance),
    y = Importance
  )
) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  labs(
    title = "Variable Importance Classification Tree",
    x = "Variabel Prediktor",
    y = "Variable Importance"
  ) +
  theme_minimal()

Berdasarkan hasil variable importance dan grafik Variable Importance Classification Tree, variabel Cell.size memiliki tingkat kepentingan tertinggi sebesar 181,084668, diikuti oleh Cell.shape sebesar 158,24 dan Bare.nuclei sebesar 130,888305. Variabel Epith.c.size, Bl.cromatin dan Normal.nucleoli juga memiliki kontribusi yang cukup besar dalam klasifikasi kanker payudara. Sementara itu, Cl.thickness, Marg.adhesion dan Mitoses memiliki tingkat kepentingan yang relatif rendah. Hasil ini menunjukkan bahwa Cell.size dan Cell.shape merupakan variabel yang paling berperan dalam klasifikasi kanker payudara pada model Decision Tree.

4.8 Prediksi dan Evaluasi Model Awal

# Prediksi kelas pada data testing
prediksi_awal <- predict(
  model_tree,
  newdata = test_data,
  type = "class"
)
# Prediksi probabilitas setiap kelas
prob_awal <- predict(
  model_tree,
  newdata = test_data,
  type = "prob"
)
# Confusion matrix model awal
cm_awal <- confusionMatrix(
  data = factor(prediksi_awal, levels = levels(test_data$Class)),
  reference = test_data$Class,
  positive = "malignant"
)
cm_awal
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        86         1
##   malignant      5        47
##                                          
##                Accuracy : 0.9568         
##                  95% CI : (0.9084, 0.984)
##     No Information Rate : 0.6547         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.9064         
##                                          
##  Mcnemar's Test P-Value : 0.2207         
##                                          
##             Sensitivity : 0.9792         
##             Specificity : 0.9451         
##          Pos Pred Value : 0.9038         
##          Neg Pred Value : 0.9885         
##              Prevalence : 0.3453         
##          Detection Rate : 0.3381         
##    Detection Prevalence : 0.3741         
##       Balanced Accuracy : 0.9621         
##                                          
##        'Positive' Class : malignant      
## 

Berdasarkan hasil confusion matrix pada data testing, model Decision Tree memperoleh nilai akurasi sebesar 95,68%, yang menunjukkan bahwa model mampu mengklasifikasikan sebagian besar data dengan benar. Dari 139 data testing, sebanyak 86 data benign dan 47 data malignant berhasil diklasifikasikan dengan benar, sedangkan 6 data mengalami kesalahan klasifikasi. Nilai sensitivity sebesar 97,92% menunjukkan bahwa model mampu mengenali kelas malignant dengan sangat baik, sementara specificity sebesar 94,51% menunjukkan kemampuan model dalam mengenali kelas benign. Selain itu, nilai Kappa sebesar 0,9064 menunjukkan tingkat kesesuaian klasifikasi yang sangat tinggi.

4.9 Menentukan CP Terbaik

# Menampilkan tabel CP
printcp(model_tree)
## 
## Classification tree:
## rpart(formula = Class ~ ., data = train_data, method = "class", 
##     control = rpart.control(cp = 0.001, minsplit = 20, minbucket = 7, 
##         xval = 10))
## 
## Variables actually used in tree construction:
## [1] Bare.nuclei   Bl.cromatin   Cell.shape    Cell.size     Cl.thickness 
## [6] Marg.adhesion
## 
## Root node error: 193/560 = 0.34464
## 
## n= 560 
## 
##          CP nsplit rel error  xerror     xstd
## 1 0.7823834      0   1.00000 1.00000 0.058272
## 2 0.0466321      1   0.21762 0.21762 0.032295
## 3 0.0259067      2   0.17098 0.18653 0.030072
## 4 0.0064767      3   0.14508 0.15544 0.027609
## 5 0.0010000      7   0.11917 0.17617 0.029281
# Visualisasi hubungan CP dengan cross-validation error
plotcp(model_tree)

# Mengambil tabel kompleksitas
tabel_cp <- model_tree$cptable
# Menentukan baris dengan xerror terkecil
indeks_cp <- which.min(tabel_cp[, "xerror"])
# Mengambil nilai CP terbaik
cp_terbaik <- tabel_cp[indeks_cp, "CP"]
# Menampilkan CP terbaik
cat("CP terbaik =", cp_terbaik, "\n")
## CP terbaik = 0.006476684
# Menampilkan informasi model pada CP terbaik
tabel_cp[indeks_cp, ]
##          CP      nsplit   rel error      xerror        xstd 
## 0.006476684 3.000000000 0.145077720 0.155440415 0.027608781

Berdasarkan tabel kompleksitas (complexity parameter), nilai CP terbaik sebesar 0,006476684 diperoleh dari nilai cross-validation error (xerror) terkecil, yaitu 0,15544, dengan jumlah pemisahan (nsplit) sebanyak 3. Nilai ini menunjukkan bahwa model dengan tiga pemisahan memiliki tingkat kesalahan validasi silang paling rendah dibandingkan pilihan lainnya pada tabel. Oleh karena itu, nilai CP tersebut digunakan untuk melakukan pruning agar model Decision Tree menjadi lebih sederhana dengan tetap mempertahankan kemampuan klasifikasinya.

4.10 Pruning Pohon Klasifikasi

# Melakukan pruning
model_pruned <- prune(
  model_tree,
  cp = cp_terbaik
)

# Melihat ringkasan model setelah pruning
print(model_pruned)
## n= 560 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
## 1) root 560 193 benign (0.65535714 0.34464286)  
##   2) Cell.size< 2.5 347  11 benign (0.96829971 0.03170029)  
##     4) Bare.nuclei< 5.5 340   5 benign (0.98529412 0.01470588) *
##     5) Bare.nuclei>=5.5 7   1 malignant (0.14285714 0.85714286) *
##   3) Cell.size>=2.5 213  31 malignant (0.14553991 0.85446009)  
##     6) Cell.shape< 2.5 19   5 benign (0.73684211 0.26315789) *
##     7) Cell.shape>=2.5 194  17 malignant (0.08762887 0.91237113) *
# Visualisasi pohon setelah pruning
rpart.plot(
  model_pruned,
  type = 3,
  extra = 104,
  fallen.leaves = TRUE,
  box.palette = "GnBu",
  shadow.col = "gray",
  nn = TRUE,
  main = "Classification Tree Setelah Pruning"
)

# Membandingkan kompleksitas pohon
cat(
  "Jumlah split model awal:",
  sum(model_tree$frame$var != "<leaf>"),
  "\n"
)
## Jumlah split model awal: 7
cat(
  "Jumlah split model pruning:",
  sum(model_pruned$frame$var != "<leaf>"),
  "\n"
)
## Jumlah split model pruning: 3

Berdasarkan hasil pruning, model Decision Tree mengalami penyederhanaan dari 7 pemisahan (split) pada model awal menjadi 3 pemisahan pada model setelah pruning. Pohon hasil pruning menggunakan tiga variabel, yaitu Cell.size, Bare.nuclei dan Cell.shape untuk mengklasifikasikan kanker payudara ke dalam kelas benign dan malignant. Data dengan Cell.size < 2,5 dan Bare.nuclei < 5,5 sebagian besar diklasifikasikan sebagai benign, sedangkan data dengan Cell.size ≥ 2,5 dan Cell.shape ≥ 2,5 sebagian besar diklasifikasikan sebagai malignant. Kinerja model setelah pruning perlu dievaluasi menggunakan confusion matrix dan nilai AUC untuk mengetahui apakah penyederhanaan tersebut tetap mempertahankan kemampuan klasifikasi model.

4.11 Evaluasi Model Setelah Pruning

# Prediksi kelas setelah pruning
prediksi_pruned <- predict(
  model_pruned,
  newdata = test_data,
  type = "class"
)
# Prediksi probabilitas setelah pruning
prob_pruned <- predict(
  model_pruned,
  newdata = test_data,
  type = "prob"
)
# Confusion matrix setelah pruning
cm_pruned <- confusionMatrix(
  data = factor(
    prediksi_pruned,
    levels = levels(test_data$Class)
  ),
  reference = test_data$Class,
  positive = "malignant"
)
cm_pruned
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        84         0
##   malignant      7        48
##                                          
##                Accuracy : 0.9496         
##                  95% CI : (0.899, 0.9795)
##     No Information Rate : 0.6547         
##     P-Value [Acc > NIR] : < 2e-16        
##                                          
##                   Kappa : 0.8923         
##                                          
##  Mcnemar's Test P-Value : 0.02334        
##                                          
##             Sensitivity : 1.0000         
##             Specificity : 0.9231         
##          Pos Pred Value : 0.8727         
##          Neg Pred Value : 1.0000         
##              Prevalence : 0.3453         
##          Detection Rate : 0.3453         
##    Detection Prevalence : 0.3957         
##       Balanced Accuracy : 0.9615         
##                                          
##        'Positive' Class : malignant      
## 

Berdasarkan hasil confusion matrix setelah pruning, model Decision Tree memperoleh nilai akurasi sebesar 94,96%. Dari 139 data testing, sebanyak 84 data benign dan 48 data malignant berhasil diklasifikasikan dengan benar, sedangkan 7 data mengalami kesalahan klasifikasi. Nilai sensitivity sebesar 100% menunjukkan bahwa model mampu mengenali seluruh data kelas malignant dengan benar. Sementara itu, nilai specificity sebesar 92,31% menunjukkan bahwa model mampu mengenali sebagian besar data kelas benign. Nilai Kappa sebesar 0,8923 juga menunjukkan tingkat kesesuaian klasifikasi yang sangat tinggi. Dengan demikian, model setelah pruning memiliki kinerja klasifikasi yang sangat baik, terutama dalam mendeteksi kelas malignant, meskipun akurasinya sedikit lebih rendah dibandingkan model awal.

4.12 Kurva ROC dan Nilai AUC

# Memanggil package
library(pROC)
library(ggplot2)

# Membentuk kurva ROC model awal
roc_awal <- pROC::roc(
  response = test_data$Class,
  predictor = prob_awal[, "malignant"],
  levels = c("benign", "malignant"),
  direction = "<",
  quiet = TRUE
)

# Membentuk kurva ROC model setelah pruning
roc_pruned <- pROC::roc(
  response = test_data$Class,
  predictor = prob_pruned[, "malignant"],
  levels = c("benign", "malignant"),
  direction = "<",
  quiet = TRUE
)

# Menghitung nilai AUC
auc_awal <- as.numeric(pROC::auc(roc_awal))
auc_pruned <- as.numeric(pROC::auc(roc_pruned))

# Menampilkan nilai AUC
cat("AUC model awal =", round(auc_awal, 4), "\n")
## AUC model awal = 0.9765
cat("AUC model pruning =", round(auc_pruned, 4), "\n")
## AUC model pruning = 0.9662
# Menyiapkan data untuk visualisasi ROC
data_roc_awal <- data.frame(
  FPR = 1 - roc_awal$specificities,
  TPR = roc_awal$sensitivities,
  Model = "Model Awal"
)

data_roc_pruned <- data.frame(
  FPR = 1 - roc_pruned$specificities,
  TPR = roc_pruned$sensitivities,
  Model = "Model Pruning"
)

data_roc <- rbind(data_roc_awal, data_roc_pruned)

# Visualisasi perbandingan kurva ROC
grafik_roc <- ggplot(
  data_roc,
  aes(x = FPR, y = TPR, color = Model)
) +
  geom_line(linewidth = 1.2) +
  geom_abline(
    intercept = 0,
    slope = 1,
    linetype = "dashed",
    color = "gray"
  ) +
  coord_equal() +
  labs(
    title = "Perbandingan Kurva ROC",
    x = "False Positive Rate (1 - Specificity)",
    y = "True Positive Rate (Sensitivity)",
    color = "Model"
  ) +
  theme_minimal()

print(grafik_roc)

Kurva ROC menunjukkan bahwa model awal dan model pruning memiliki kemampuan klasifikasi yang sangat baik karena kurva mendekati sudut kiri atas. Model awal memiliki nilai AUC sebesar 0,9765, sedikit lebih tinggi dibandingkan model pruning sebesar 0,9662. Hal ini menunjukkan bahwa model awal memiliki kemampuan membedakan kelas benign dan malignant yang sedikit lebih baik secara keseluruhan. Namun, model pruning memiliki sensitivitas sebesar 100%, sehingga seluruh kasus malignant pada data pengujian berhasil diklasifikasikan dengan benar.

4.13 Perbandingan Kinerja Model

# Mengambil metrik evaluasi model awal
metrik_awal <- cm_awal$byClass
akurasi_awal <- unname(cm_awal$overall["Accuracy"])
sensitivitas_awal <- unname(metrik_awal["Sensitivity"])
spesifisitas_awal <- unname(metrik_awal["Specificity"])
presisi_awal <- unname(metrik_awal["Pos Pred Value"])

# Mengambil metrik evaluasi model pruning
metrik_pruned <- cm_pruned$byClass
akurasi_pruned <- unname(cm_pruned$overall["Accuracy"])
sensitivitas_pruned <- unname(metrik_pruned["Sensitivity"])
spesifisitas_pruned <- unname(metrik_pruned["Specificity"])
presisi_pruned <- unname(metrik_pruned["Pos Pred Value"])

# Menyusun tabel perbandingan
perbandingan <- data.frame(
  Metrik = c(
    "Accuracy",
    "Sensitivity",
    "Specificity",
    "Precision",
    "AUC"
  ),
  Model_Awal = c(
    akurasi_awal,
    sensitivitas_awal,
    spesifisitas_awal,
    presisi_awal,
    as.numeric(auc(roc_awal))
  ),
  Model_Pruning = c(
    akurasi_pruned,
    sensitivitas_pruned,
    spesifisitas_pruned,
    presisi_pruned,
    as.numeric(auc(roc_pruned))
  )
)

# Menampilkan tabel perbandingan
knitr::kable(
  perbandingan,
  digits = 4,
  caption = "Perbandingan Kinerja Model Classification Tree"
)
Perbandingan Kinerja Model Classification Tree
Metrik Model_Awal Model_Pruning
Accuracy 0.9568 0.9496
Sensitivity 0.9792 1.0000
Specificity 0.9451 0.9231
Precision 0.9038 0.8727
AUC 0.9765 0.9662

Berdasarkan perbandingan kinerja model Classification Tree, model awal memperoleh nilai accuracy sebesar 95,68%, sensitivity 97,92%, specificity 94,51%, precision 90,38% dan AUC 97,65%. Sementara itu, model setelah pruning memperoleh accuracy sebesar 94,96%, sensitivity 100%, specificity 92,31%, precision 87,27% dan AUC 96,62%. Hasil tersebut menunjukkan bahwa model awal memiliki nilai accuracy, specificity, precision dan AUC yang lebih tinggi. Sebaliknya, model setelah pruning memiliki sensitivity yang lebih tinggi, yaitu 100%, sehingga mampu mengenali seluruh data kelas malignant pada data testing. Dengan demikian, model awal lebih unggul dari segi kinerja klasifikasi secara keseluruhan, sedangkan model setelah pruning lebih baik dalam mendeteksi kelas malignant.

BAB V KESIMPULAN

5.1 Kesimpulan

Decision Tree merupakan metode klasifikasi yang menyajikan proses pengambilan keputusan dalam bentuk struktur pohon. Metode CART (Classification and Regression Tree) membentuk pohon keputusan melalui pemisahan data secara bertahap berdasarkan atribut prediktor, dengan menggunakan indeks Gini untuk menentukan pemisahan terbaik pada klasifikasi. Hasilnya berupa aturan keputusan yang dapat digunakan untuk mengklasifikasikan data ke dalam kelas tertentu.

Pembangunan model Classification Tree menggunakan algoritma CART dilakukan melalui tahapan persiapan data, pembentukan pohon keputusan, penentuan atribut pemisah, visualisasi pohon, serta evaluasi kinerja model. Model yang terbentuk dapat disederhanakan melalui proses pruning untuk mengurangi kompleksitas pohon dan mengatasi overfitting. Dengan demikian, model CART dapat digunakan untuk melakukan klasifikasi berdasarkan pola yang terdapat dalam data.

Model Decision Tree berhasil mengklasifikasikan data ke dalam kelas benign dan malignant. Sebelum pemodelan, dilakukan penanganan nilai hilang menggunakan metode MICE dengan Predictive Mean Matching (PMM), kemudian data dibagi menjadi 560 data training dan 139 data testing. Hasil pembentukan pohon klasifikasi menunjukkan bahwa Cell.size merupakan variabel yang paling berpengaruh, diikuti oleh Cell.shape dan Bare.nuclei. Model awal memperoleh akurasi sebesar 95,68% dan AUC sebesar 0,9765, yang menunjukkan kemampuan klasifikasi sangat baik. Setelah dilakukan pruning menggunakan nilai CP terbaik sebesar 0,006476684, jumlah pemisahan pohon berkurang dari 7 menjadi 3. Model hasil pruning memperoleh akurasi sebesar 94,96% dan AUC sebesar 0,9662, dengan nilai sensitivity sebesar 100%. Dengan demikian, model awal memiliki kinerja klasifikasi secara keseluruhan yang sedikit lebih baik, ditinjau dari nilai akurasi, specificity, precision dan AUC. Namun, model setelah pruning lebih sederhana dan mampu mengenali seluruh data kelas malignant pada data testing.

DAFTAR PUSTAKA

Chair, M., Nasution, Y. N., dan Rizki, N. A. (2017). Aplikasi klasifikasi algoritma C4.5 (Studi kasus masa studi mahasiswa Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Mulawarman angkatan 2008). Jurnal Ilmiah Ilmu Komputer.

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

Hasanah, M. A., Soim, S., dan 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.

Setio, P. B. N., Saputro, D. R. S., dan Winarno, B. (2020). Klasifikasi dengan pohon keputusan berbasis algoritme C4.5. PRISMA. Prosiding Seminar Nasional Matematika.