BAB I PENDAHULUAN

1.1 Latar Belakang

Klasifikasi merupakan salah satu teknik utama dalam analisis data yang bertujuan mengelompokkan objek ke dalam kelas tertentu berdasarkan karakteristik yang dimilikinya. Teknik ini berperan penting dalam berbagai bidang, seperti kesehatan, ekonomi, dan sosial, karena memungkinkan data yang beragam dikelompokkan secara terstruktur (Gorunescu, 2011 dalam Nursyahfitri dkk., 2021). Metode klasifikasi bekerja dengan mempelajari pola dari data yang kelasnya telah diketahui untuk membentuk sebuah model. Model tersebut kemudian digunakan untuk memprediksi kelas dari objek baru yang belum diketahui kelasnya.

Decision Tree atau pohon keputusan merupakan salah satu metode klasifikasi yang merepresentasikan proses pengambilan keputusan dalam bentuk struktur menyerupai pohon. Struktur tersebut terdiri atas simpul akar, simpul internal, cabang, dan simpul daun yang masing-masing memiliki peran dalam proses penentuan kelas. Pohon keputusan dibentuk dengan memisahkan data secara bertahap berdasarkan atribut atau variabel prediktor hingga diperoleh kelompok data yang relatif homogen. Karakteristiknya yang mudah diinterpretasi menjadikan Decision Tree banyak digunakan untuk menyelesaikan permasalahan klasifikasi (Nursyahfitri dkk., 2021).

Classification and Regression Tree (CART) merupakan salah satu metode pembentukan pohon keputusan yang dapat diterapkan pada data dengan variabel respons kategorik maupun numerik. Metode ini membentuk pohon melalui pemisahan data secara biner, sehingga setiap simpul induk selalu menghasilkan dua simpul anak. Apabila variabel respons bersifat kategorik, CART menghasilkan model Classification Tree yang digunakan untuk mengklasifikasikan objek ke dalam kelas tertentu (Agwil dkk., 2022). Pemahaman terhadap konsep dasar CART serta proses pembentukan model klasifikasinya menjadi penting agar pohon keputusan yang dihasilkan dapat dibangun dan diinterpretasikan dengan tepat.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, adapun rumusan masalah yang dapat disimpulkan sebagai berikut:

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

1.3 Tujuan

Adapun tujuan penelitian ini yaitu:

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

BAB II TINJAUAN PUSTAKA

2.1 Klasifikasi

Klasifikasi merupakan salah satu teknik dalam data mining dan machine learning yang digunakan untuk memprediksi nilai label atau variabel target. Menurut Supriyanti dkk. (2016) dalam Nursyahfitri dkk. (2021), klasifikasi adalah suatu teknik untuk menemukan kumpulan pola atau fungsi yang mendeskripsikan serta memisahkan kelas data yang satu dengan yang lainnya. Tujuan utamanya adalah untuk menyatakan objek tersebut masuk pada kategori tertentu dengan melihat pada kelakuan dan atribut dari kelompok yang telah didefinisikan. Proses klasifikasi didasarkan pada empat komponen utama, yaitu class, predictor, training dataset, dan testing dataset (Gorunescu, 2011 dalam Nursyahfitri dkk., 2021).

Class merupakan variabel tidak bebas yang berupa kategorial dan mempresentasikan label yang terdapat pada objek. Predictor merupakan variabel bebas suatu model berdasarkan karakteristik atribut data kategorial. Training dataset atau data latih merupakan dataset yang berisi nilai dari class dan predictor untuk dilatih agar model dapat dikelompokkan ke kelas yang benar. Testing dataset atau data uji merupakan data baru yang digunakan untuk mengklasifikasikan model yang dibuat dan mengevaluasi akurasi klasifikasi (Gorunescu, 2011 dalam Nursyahfitri dkk., 2021).

2.2 Decision Tree

Decision tree merupakan algoritma supervised machine learning yang digunakan untuk memecahkan masalah klasifikasi. Tujuan utama dari algoritma decision tree adalah karena kemampuannya menghasilkan model prediksi secara spesifik dalam bentuk aturan yang mudah untuk diimplementasikan (Noviandi, 2018 dalam Nursyahfitri dkk., 2021). Decision tree menggunakan representasi struktur pohon, di mana setiap node merepresentasikan atribut, cabang merepresentasikan nilai atribut, dan node merepresentasikan kelas. Node di bagian atas decision tree disebut root (Kusrini & Luthfi, 2009 dalam Nursyahfitri dkk., 2021).

Berdasarkan struktur flowchart yang menyerupai pohon, setiap simpul internal menandakan suatu pengujian pada atribut, setiap cabang merepresentasikan output dan simpul daun merepresentasikan kelas atau distribusi kelas. Simpul yang paling atas disebut sebagai root node yang memiliki beberapa output tetapi tidak memiliki input. Internal node memiliki satu input dan beberapa output, sedangkan leaf node hanya memiliki satu input tanpa memiliki output. Leaf node merupakan hasil akhir yang mewakili label kelas dari kombinasi atribut yang terbentuk menjadi rule (Kasih, 2019 dalam Nursyahfitri dkk., 2021).

Decision Tree memiliki beberapa karakteristik utama yang membuatnya banyak digunakan. Karakteristik tersebut meliputi kemudahan untuk dipahami dan diinterpretasikan karena model dapat divisualisasikan dalam bentuk pohon, kemampuan menggunakan variabel prediktor numerik maupun kategorik, serta pembagian data secara bertahap melalui proses splitting sehingga kelompok yang terbentuk semakin homogen. Pohon keputusan juga dapat digunakan untuk memprediksi kelas pada kasus klasifikasi maupun nilai numerik pada kasus regresi. Selain itu, pohon dapat disederhanakan melalui pruning untuk mengurangi kompleksitas pohon dan risiko overfitting (Fransiska, 2026).

Kelebihan decision tree terletak pada kemampuannya menghasilkan prediksi yang sangat kuat dan mudah dipahami. Akan tetapi, decision tree juga memiliki kekurangan, terutama terkait dengan kecenderungan overfitting ketika pohon tumbuh tanpa batas. Overfitting terjadi ketika model belajar terlalu baik pada data training dan menjadi terlalu spesifik terhadap data tersebut, sehingga menyebabkan generalisasi yang buruk pada data baru. Pohon keputusan juga dapat menjadi sangat kompleks ketika berhadapan dengan data yang memiliki banyak fitur atau noise (Halabaku & Bytyçi, 2024).

2.3 Classification and Regression Tree (CART)

Classification and Regression Tree (CART) merupakan salah satu metode pohon keputusan populer yang dapat digunakan pada variabel respon numerik maupun kategorik. Jika variabel respon berupa data kategorik, maka pohon yang terbentuk dinamakan pohon klasifikasi (classification tree). Sebaliknya, jika variabel respon berupa data numerik, maka pohon yang terbentuk dinamakan pohon regresi (regression tree). Pembentukan pohon klasifikasi maupun pohon regresi dilakukan dengan proses rekursif biner pada gugus data sehingga pada pemilahan terakhir diperoleh nilai variabel respon pada setiap simpul yang terbentuk lebih homogen (Breiman dkk., 1984 dalam Agwil dkk., 2022).

Metode CART dikenal sebagai klasifikasi binary recursive partitioning karena setiap simpul yang dihasilkan disekat atau dipisahkan menjadi dua simpul anak (Lewis, 2000 dalam Agwil dkk., 2022). Tahapan penyekatan tersebut dilakukan sampai terpenuhi kriteria pemberhentian yang ditetapkan. Algoritma CART secara umum dimulai dengan menemukan pemisah terbaik pada setiap variabel prediktor yang digunakan dalam model. Setiap variabel dengan nilai \(K\) yang berbeda memiliki \(k - 1\) kemungkinan pemisah, dan pemisah terbaik dipilih berdasarkan kriteria splitting yaitu Gini impurity (Breiman dkk., 1984 dalam Agwil dkk., 2022).

Indeks Gini 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 berikut (Fransiska, 2026):

\[ Gini(t) = 1 - \sum_{k=1}^{K} p_k^2 \]

dengan \(t\) adalah node, \(k\) adalah indeks kelas ke-\(k\), \(K\) adalah jumlah kelas, dan \(p_k\) merupakan proporsi observasi dari kelas ke-\(k\) dalam node. Jika dataset \(D\) dipartisi menjadi dua bagian \(D_1\) dan \(D_2\), maka nilai Gini setelah pemisahan dihitung menggunakan rata-rata terbobot:

\[ Gini_{split} = \frac{|D_1|}{|D|} Gini(D_1) + \frac{|D_2|}{|D|} Gini(D_2) \]

Evaluasi pemisah \(s\) pada simpul \(t\) dapat dilakukan dengan melihat nilai Goodness of split. Penurunan tingkat impurity yang diperoleh terhadap atribut \(A\) dapat dihitung dengan \(\Delta Gini(A) = Gini(D) - Gini_A(D)\). Proses pemilihan variabel prediktor terbaik juga dilakukan dengan menggunakan indeks Gini dan penyekatan dilakukan hingga memenuhi kriteria pemberhentian (Agwil dkk., 2022).

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

\[ Entropy(t) = -\sum_{k=1}^{K} p_k \log_2(p_k) \]

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 \(D\) dipartisi menjadi beberapa bagian \(D_1, D_2, \ldots, D_j\), maka Information Gain dirumuskan sebagai berikut (Fransiska, 2026):

\[ IG = E(D) - \sum_{j=1}^{J} \frac{|D_j|}{|D|} E(D_j) \]

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 respons dengan rata-rata respons dalam suatu simpul. Pemisahan dipilih apabila mampu menghasilkan simpul-simpul dengan nilai MSE yang lebih kecil. MSE dirumuskan sebagai berikut (Fransiska, 2026):

\[ MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y})^2 \]

2.4 Pemangkasan Pohon (Pruning)

Pemangkasan pohon atau pruning merupakan proses pemangkasan cabang yang kurang penting untuk menyederhanakan pohon dan mengurangi risiko overfitting. Pohon keputusan yang tumbuh tanpa batas cenderung mengalami overfitting, di mana model belajar terlalu baik pada data training dan menjadi terlalu spesifik terhadap data tersebut. Overfitting menyebabkan generalisasi yang buruk pada data baru, sehingga model kehilangan kemampuan prediktifnya pada data yang belum pernah dilihat (Halabaku & Bytyçi, 2024).

Salah satu teknik pruning yang umum digunakan adalah cost-complexity pruning. Metode ini bertujuan untuk menemukan subtree dari pohon \(T\) dengan error approximation terkecil, yaitu error pada data training ditambah \(\alpha\) kali jumlah leaf node. Parameter \(\alpha\) mengontrol trade-off antara kompleksitas pohon dan akurasi pada data training (Breiman dkk., 1984 dalam Halabaku & Bytyçi, 2024). Pemilihan pohon optimal dilakukan melalui validasi silang (cross-validation) dengan memilih nilai \(\alpha\) yang menghasilkan performa terbaik pada data validasi (Halabaku & Bytyçi, 2024).

Cost-complexity pruning dimulai dengan pohon penuh dan \(\alpha = 0\), kemudian secara bertahap meningkatkan nilai \(\alpha\) untuk menghasilkan urutan subtree yang semakin sederhana. Pohon yang dipilih sebagai pohon yang dipangkas adalah pohon dengan error approximation terkecil pada set validasi terpisah (Breiman dkk., 1984 dalam Halabaku & Bytyçi, 2024). Proses ini memungkinkan penyeimbangan antara kompleksitas model dan kemampuan generalisasi, sehingga pohon yang dihasilkan lebih robust terhadap data baru (Halabaku & Bytyçi, 2024).

2.5 Evaluasi Model Klasifikasi

Evaluasi model klasifikasi merupakan tahapan penting untuk mengukur seberapa baik model yang dibangun dapat memprediksi kelas dengan benar. Confusion matrix merupakan salah satu alat ukur pada pembelajaran supervised learning berbentuk matriks yang digunakan untuk mendapatkan jumlah ketepatan klasifikasi dataset terhadap kelas tepat dan tidak tepat pada algoritma yang digunakan (Santosa dkk., 2018 dalam Nursyahfitri dkk., 2021). Confusion matrix terdiri dari dua jenis, yaitu confusion matrix binary untuk klasifikasi dengan dua output, dan confusion matrix multiclass untuk klasifikasi dengan lebih dari dua kelas (Nursyahfitri dkk., 2021).

Confusion matrix merepresentasikan absolute truths sebagai baris dan predicted classifications sebagai kolom, yang delineasi jumlah true positives, false positives (type-I error), true negatives, dan false negatives (type-II error). Nilai-nilai tersebut kemudian digunakan untuk menurunkan sensitivity (recall), specificity, positive predictive value (precision), negative predictive value, dan accuracy. Accuracy dapat menjadi metrik yang menyesatkan untuk dataset yang tidak seimbang, karena model yang selalu memprediksi kelas negatif pada dataset dengan hanya 1% kasus positif akan memiliki akurasi 99% (Cabot & Ross, 2023).

Akurasi merupakan proporsi kasus yang diidentifikasi benar terhadap jumlah semua kasus. Rumus akurasi adalah sebagai berikut (Han, Kamber, & Pei, 2012 dalam Agwil dkk., 2022):

\[ Accuracy = \frac{TP + TN}{TP + TN + FP + FN} \]

Sensitivity atau recall merupakan proporsi kasus positif yang diidentifikasi dengan benar. Rumus sensitivity adalah sebagai berikut:

\[ Sensitivity = \frac{TP}{TP + FN} \]

Specificity merupakan proporsi kasus negatif yang diidentifikasi dengan benar. Rumus specificity adalah sebagai berikut:

\[ Specificity = \frac{TN}{TN + FP} \]

Precision merupakan proporsi kasus dengan hasil positif yang benar. Rumus precision adalah sebagai berikut:

\[ Precision = \frac{TP}{TP + FP} \]

F1-Score merupakan harmonic mean dari precision dan recall yang mencerminkan tidak hanya kuantitas error yang dibuat model, tetapi juga tipe error tersebut (Cabot & Ross, 2023). F1-Score menjadi metrik yang robust terhadap ketidakseimbangan kelas. Rumus F1-Score adalah sebagai berikut:

\[ F1\text{-}Score = \frac{2 \times (Precision \times Recall)}{Precision + Recall} \]

Evaluasi kebaikan model klasifikasi juga dapat dilihat dari nilai AUC (Area Under Curve), yaitu nilai yang menggambarkan luas area di bawah kurva ROC (Receiver Operating Characteristic) dengan nilai antara 0 hingga 1. Kurva ROC adalah kurva yang menggambarkan kebaikan model klasifikasi yang disajikan dalam dua dimensi, memuat nilai persentase False Positive dengan persentase True Positive (Fawcett, 2006 dalam Agwil dkk., 2022). AUC memberikan ukuran diskriminasi model secara keseluruhan, di mana nilai 0,5 menunjukkan model yang tidak lebih baik dari tebakan acak, sedangkan nilai 1 menunjukkan diskriminasi sempurna (Cabot & Ross, 2023).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

Jenis data yang digunakan dalam penelitian ini adalah data kategorik, yaitu data yang menunjukkan pengelompokan objek berdasarkan kategori tertentu. Data yang digunakan berasal dari hasil pemeriksaan klinis sel kanker payudara yang disajikan dalam bentuk kategori.

Sumber data yang digunakan dalam penelitian ini adalah data sekunder. Data sekunder merupakan data yang telah dikumpulkan oleh pihak lain dan dapat dimanfaatkan kembali untuk keperluan penelitian. Dataset BreastCancer diperoleh dari package mlbench pada perangkat lunak R. Dataset tersebut terdiri atas 699 observasi.

3.2 Variabel Penelitian

Variabel merupakan karakteristik atau atribut yang dapat diukur maupun diamati dalam suatu penelitian. Penelitian ini menggunakan sepuluh variabel, yaitu Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, Mitoses, dan Class. Variabel Class berperan sebagai variabel respons yang bertipe kategorik dengan dua kelas, yaitu benign (jinak) dan malignant (ganas). Sembilan variabel lainnya berperan sebagai variabel prediktor yang bertipe kategorik dengan skala 1 sampai 10.

3.3 Analisis Data

Berikut merupakan algoritma penelitian pada batasan masalah:

  1. Input data
  2. Pemeriksaan dan penanganan missing value
  3. Pembagian data training dan testing
  4. Visualisasi CART
  5. Analisis variable importance
  6. Prediksi dan evaluasi model awal
  7. Penentuan CP terbaik
  8. Pruning pohon dengan CP terbaik
  9. Evaluasi model setelah pruning
  10. Output
  11. Interpretasi

BAB IV HASIL DAN PEMBAHASAN

4.1 Library

library(dplyr)
library(tidyverse)
library(rpart)
library(caret)
library(rpart.plot)
library(ROCR)
library(mlbench)
library(mice)

Pada batasan masalah diminta pembentukan model Classification Tree menggunakan Decision Tree, sehingga diperlukan sejumlah package pendukung. Package rpart digunakan untuk membangun pohon keputusan dengan algoritma CART, sedangkan rpart.plot digunakan untuk memvisualisasikan pohon yang terbentuk. Package caret berfungsi untuk membagi data dan menghitung confusion matrix.

Package mlbench menyediakan dataset BreastCancer, sedangkan mice digunakan untuk menangani data yang hilang. Package dplyr dan tidyverse mendukung manipulasi data serta visualisasi, dan ROCR digunakan dalam evaluasi kurva ROC. Pemuatan seluruh package tersebut berjalan tanpa galat sehingga proses analisis dapat dilanjutkan.

4.2 Data

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

Pada batasan masalah diminta penggunaan dataset BreastCancer dari package mlbench untuk mengklasifikasikan kondisi kanker payudara. Dataset ini terdiri atas 699 amatan dan 11 variabel yang memuat satu variabel pengenal, sembilan variabel prediktor, dan satu variabel respons. Variabel Id dihapus karena hanya berfungsi sebagai identitas pasien dan tidak memiliki informasi untuk proses klasifikasi.

Setelah variabel Id dihapus, tersisa sembilan variabel prediktor dan satu variabel respons bernama Class. Variabel respons tersebut bertipe factor dengan dua kategori, yaitu benign (jinak) dan malignant (ganas). Deskripsi seluruh variabel yang digunakan disajikan pada Tabel 4.1.

Tabel 4.1 Deskripsi variabel pada dataset BreastCancer

No Variabel Tipe Keterangan
1 Cl.thickness Ordered factor (10 level) Ketebalan gumpalan sel
2 Cell.size Ordered factor (10 level) Keseragaman ukuran sel
3 Cell.shape Ordered factor (10 level) Keseragaman bentuk sel
4 Marg.adhesion Ordered factor (10 level) Perlekatan marginal
5 Epith.c.size Ordered factor (10 level) Ukuran sel epitel tunggal
6 Bare.nuclei Factor (10 level) Inti sel telanjang
7 Bl.cromatin Factor (10 level) Kromatin halus
8 Normal.nucleoli Factor (10 level) Nukleolus normal
9 Mitoses Factor (9 level) Mitosis
10 Class Factor (2 level) Variabel respons (benign/malignant)

Distribusi variabel respons menunjukkan bahwa terdapat 458 amatan (65,52 persen) berkelas benign dan 241 amatan (34,48 persen) berkelas malignant. Proporsi tersebut memperlihatkan bahwa kelas benign lebih dominan, tetapi ketidakseimbangannya masih tergolong wajar. Kondisi ini masih memungkinkan model dibangun tanpa penyeimbangan data tambahan.

4.3 Pengecekan dan Penanganan Missing Value

# Pengecekan Missing Value
colSums(is.na(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
sum(is.na(BC))
## [1] 16
md.pattern(BC)

##     Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size Bl.cromatin
## 683            1         1          1             1            1           1
## 16             1         1          1             1            1           1
##                0         0          0             0            0           0
##     Normal.nucleoli Mitoses Class Bare.nuclei   
## 683               1       1     1           1  0
## 16                1       1     1           0  1
##                   0       0     0          16 16
# Penanganan Missing Value dengan mice
set.seed(46)

imp <- mice(
  BC,
  m = 5,
  maxit = 5,
  seed = 46,
  printFlag = FALSE
)

summary(imp)
## Class: mids
## Number of multiple imputations:  5 
## Imputation methods:
##    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion    Epith.c.size 
##              ""              ""              ""              ""              "" 
##     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses           Class 
##       "polyreg"              ""              ""              ""              "" 
## PredictorMatrix:
##               Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## Cl.thickness             0         1          1             1            1
## Cell.size                1         0          1             1            1
## Cell.shape               1         1          0             1            1
## Marg.adhesion            1         1          1             0            1
## Epith.c.size             1         1          1             1            0
## Bare.nuclei              1         1          1             1            1
##               Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## Cl.thickness            1           1               1       1     1
## Cell.size               1           1               1       1     1
## Cell.shape              1           1               1       1     1
## Marg.adhesion           1           1               1       1     1
## Epith.c.size            1           1               1       1     1
## Bare.nuclei             0           1               1       1     1
BC.complete <- complete(imp, 1)

# Pengecekan ulang setelah imputasi
colSums(is.na(BC.complete))
##    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
sum(is.na(BC.complete))
## [1] 0
str(BC.complete)
## 'data.frame':    699 obs. of  10 variables:
##  $ 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 ...

Tabel 4.2 Jumlah missing value pada variabel BreastCancer

Variabel Jumlah missing value Persentase
Bare.nuclei 16 2,29%
Variabel lainnya (8 variabel) 0 0,00%
Total 16 2,29%

Pada batasan masalah diminta pengecekan dan penanganan missing value menggunakan mice. Hasil pengecekan menunjukkan bahwa terdapat 16 nilai hilang yang seluruhnya berada pada variabel Bare.nuclei. Jumlah tersebut setara dengan 2,29 persen dari total 699 amatan, sedangkan variabel lainnya tidak memiliki data hilang (Tabel 4.2).

Pola data hilang pada fungsi md.pattern memperlihatkan bahwa terdapat 683 amatan yang lengkap dan 16 amatan yang hanya kehilangan nilai pada Bare.nuclei. Kondisi ini menunjukkan bahwa tidak ada kombinasi variabel lain yang mengalami kehilangan data secara bersamaan. Penghapusan amatan sebenarnya masih dimungkinkan, tetapi imputasi dipilih agar seluruh amatan tetap dapat digunakan dalam pembentukan model.

Imputasi dilakukan dengan mice sebanyak lima kali imputasi (m = 5) dan lima iterasi (maxit = 5) menggunakan benih 46. Metode yang diterapkan secara otomatis pada Bare.nuclei adalah polytomous regression (polyreg) karena variabel tersebut bertipe faktor tidak terurut dengan lebih dari dua kategori. Hasil imputasi pertama digunakan sebagai data lengkap, dan pengecekan ulang menunjukkan bahwa tidak ada lagi nilai hilang pada seluruh variabel.

4.4 Pembagian Data Training dan Testing

set.seed(46)

train <- createDataPartition(
  BC.complete$Class,
  p = 0.7,
  list = FALSE
)

BC.train = BC.complete[train, ]
BC.test = BC.complete[-train, ]
Class.test = BC.complete$Class[-train]

dim(BC.train)
## [1] 490  10
dim(BC.test)
## [1] 209  10
prop.table(table(BC.train$Class))
## 
##    benign malignant 
##  0.655102  0.344898
prop.table(table(BC.test$Class))
## 
##    benign malignant 
## 0.6555024 0.3444976

Pada batasan masalah diminta pembagian data menjadi data training dan data testing. Pembagian dilakukan dengan fungsi createDataPartition menggunakan proporsi 70 persen untuk data training dan 30 persen untuk data testing. Hasilnya diperoleh 490 amatan pada data training dan 209 amatan pada data testing.

Fungsi tersebut melakukan pengambilan sampel secara berstrata berdasarkan variabel Class. Proporsi kelas benign dan malignant pada data training dan testing nyaris sama dengan proporsi pada data asli. Rincian pembagian data disajikan pada Tabel 4.3.

Tabel 4.3 Distribusi kelas pada data training dan testing

Data Jumlah amatan Benign Malignant Proporsi benign Proporsi malignant
Training 490 321 169 65,51% 34,49%
Testing 209 137 72 65,55% 34,45%

Kesamaan proporsi antarkelas menunjukkan bahwa data testing mewakili kondisi data training dengan baik. Hal ini penting agar evaluasi model tidak bias terhadap salah satu kelas. Pembagian ini juga memastikan bahwa kinerja model diuji pada data yang tidak digunakan saat pembentukan pohon.

4.5 Pembentukan Classification Tree

fit.tree = rpart(
  Class ~ .,
  data = BC.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,3 337  25 benign (0.92581602 0.07418398)  
##     4) Bare.nuclei=1,2,3 309   5 benign (0.98381877 0.01618123) *
##     5) Bare.nuclei=4,5,7,8,9,10 28   8 malignant (0.28571429 0.71428571) *
##   3) Cell.size=4,5,6,7,8,9,10 153   9 malignant (0.05882353 0.94117647) *
rpart.plot(fit.tree)
Gambar 4.1 Struktur Classification Tree sebelum pruning

Gambar 4.1 Struktur Classification Tree sebelum pruning

Pada batasan masalah diminta pembangunan dan visualisasi tree menggunakan Decision Tree (Classification Tree). Model dibangun dengan fungsi rpart menggunakan method = "class" dan parameter kompleksitas cp = 0.008, dengan Class sebagai variabel respons dan seluruh variabel lain sebagai prediktor. Pohon yang terbentuk memiliki tiga simpul terminal dan dua kali pemisahan.

Simpul akar berisi 490 amatan dengan 169 amatan berkelas malignant, sehingga kelas prediksi pada simpul akar adalah benign. Pemisahan pertama dilakukan pada variabel Cell.size, yaitu amatan dengan kategori 1, 2, dan 3 ke cabang kiri serta kategori 4 sampai 10 ke cabang kanan. Cabang kanan berisi 153 amatan dengan 94,12 persen berkelas malignant, sehingga langsung menjadi simpul terminal berkelas malignant.

Cabang kiri berisi 337 amatan dan dipisahkan kembali menggunakan variabel Bare.nuclei. Amatan dengan kategori 1, 2, dan 3 berjumlah 309 dan diklasifikasikan sebagai benign dengan peluang 98,38 persen. Amatan dengan kategori lainnya berjumlah 28 dan diklasifikasikan sebagai malignant dengan peluang 71,43 persen.

Hanya dua variabel yang digunakan dalam pembentukan pohon, yaitu Cell.size dan Bare.nuclei. Hal ini menunjukkan bahwa kedua variabel tersebut sudah cukup untuk memisahkan kelas secara efektif pada data training. Kesalahan klasifikasi pada data training berjumlah 22 amatan dari 490 amatan atau sekitar 4,49 persen.

4.6 Variable Importance

fit.tree$variable.importance
##       Cell.size     Bare.nuclei      Cell.shape     Bl.cromatin Normal.nucleoli 
##      158.192512      132.553593      127.507199      107.862378      104.339897 
##    Epith.c.size    Cl.thickness   Marg.adhesion 
##      103.393799        4.468579        3.574863
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 Simple Classification"
  )
Gambar 4.2 Variable importance pada model awal

Gambar 4.2 Variable importance pada model awal

Pada batasan masalah diminta analisis variable importance untuk mengetahui variabel yang paling berpengaruh dalam klasifikasi. Hasilnya menunjukkan bahwa Cell.size memiliki nilai kepentingan tertinggi sebesar 158,19, diikuti Bare.nuclei sebesar 132,55 dan Cell.shape sebesar 127,51. Urutan ini sejalan dengan struktur pohon karena Cell.size menjadi pemisah pertama pada simpul akar. Nilai kepentingan seluruh variabel disajikan pada Tabel 4.4.

Tabel 4.4 Nilai variable importance pada model awal

Peringkat Variabel Nilai importance
1 Cell.size 158,19
2 Bare.nuclei 132,55
3 Cell.shape 127,51
4 Bl.cromatin 107,86
5 Normal.nucleoli 104,34
6 Epith.c.size 103,39
7 Cl.thickness 4,47
8 Marg.adhesion 3,57

Variabel Cell.shape, Bl.cromatin, Normal.nucleoli, dan Epith.c.size memiliki nilai kepentingan yang cukup besar meskipun tidak muncul pada struktur pohon. Hal ini terjadi karena perhitungan variable importance pada rpart juga memasukkan kontribusi pemisah pengganti (surrogate split) dan pemisah pesaing (competing split). Variabel tersebut berperan sebagai alternatif yang memisahkan data hampir sama baiknya dengan variabel utama.

Variabel Cl.thickness dan Marg.adhesion memiliki nilai kepentingan yang sangat kecil, yaitu 4,47 dan 3,57. Kedua variabel ini memberikan kontribusi yang relatif rendah dalam memisahkan kelas benign dan malignant. Variabel Mitoses tidak muncul pada hasil karena tidak berkontribusi pada pemisahan manapun.

4.7 Prediksi dan Evaluasi Model Awal

pred.tree = predict(
  fit.tree,
  BC.test,
  type = "class"
)

table(
  pred.tree,
  Class.test
)
##            Class.test
## pred.tree   benign malignant
##   benign       125         3
##   malignant     12        69
matriks_kesalahan <- confusionMatrix(
  pred.tree,
  BC.test$Class
)
matriks_kesalahan
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       125         3
##   malignant     12        69
##                                           
##                Accuracy : 0.9282          
##                  95% CI : (0.8844, 0.9593)
##     No Information Rate : 0.6555          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.8457          
##                                           
##  Mcnemar's Test P-Value : 0.03887         
##                                           
##             Sensitivity : 0.9124          
##             Specificity : 0.9583          
##          Pos Pred Value : 0.9766          
##          Neg Pred Value : 0.8519          
##              Prevalence : 0.6555          
##          Detection Rate : 0.5981          
##    Detection Prevalence : 0.6124          
##       Balanced Accuracy : 0.9354          
##                                           
##        'Positive' Class : benign          
## 
matriks_kesalahan <- confusionMatrix(
  pred.tree,
  BC.test$Class,
  positive = "malignant"
)
matriks_kesalahan
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       125         3
##   malignant     12        69
##                                           
##                Accuracy : 0.9282          
##                  95% CI : (0.8844, 0.9593)
##     No Information Rate : 0.6555          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.8457          
##                                           
##  Mcnemar's Test P-Value : 0.03887         
##                                           
##             Sensitivity : 0.9583          
##             Specificity : 0.9124          
##          Pos Pred Value : 0.8519          
##          Neg Pred Value : 0.9766          
##              Prevalence : 0.3445          
##          Detection Rate : 0.3301          
##    Detection Prevalence : 0.3876          
##       Balanced Accuracy : 0.9354          
##                                           
##        'Positive' Class : malignant       
## 

Pada batasan masalah diminta prediksi dan evaluasi model menggunakan confusion matrix. Prediksi dilakukan pada 209 amatan data testing, dan hasilnya disajikan pada Tabel 4.5. Sebanyak 125 amatan benign dan 69 amatan malignant berhasil diklasifikasikan dengan benar, sedangkan 15 amatan salah diklasifikasikan.

Tabel 4.5 Confusion matrix model awal pada data testing

Prediksi  Aktual Benign Malignant Total
Benign 125 3 128
Malignant 12 69 81
Total 137 72 209

Model menghasilkan akurasi sebesar 92,82 persen dengan selang kepercayaan 95 persen antara 88,44 dan 95,93 persen. Nilai tersebut jauh di atas No Information Rate sebesar 65,55 persen dengan p-value kurang dari 2e-16. Nilai Kappa sebesar 0,8457 menunjukkan tingkat kesepakatan yang sangat baik antara prediksi dan kelas aktual.

Jika kelas malignant ditetapkan sebagai kelas positif, sensitivitas model sebesar 95,83 persen dan spesifisitas sebesar 91,24 persen. Hal ini berarti 69 dari 72 pasien berkelas ganas berhasil dideteksi, dan 125 dari 137 pasien berkelas jinak teridentifikasi dengan benar. Kesalahan yang paling banyak terjadi adalah 12 pasien jinak yang diprediksi ganas (false positive), sedangkan hanya 3 pasien ganas yang diprediksi jinak (false negative).

Jika kelas benign digunakan sebagai kelas positif, nilai sensitivitas dan spesifisitas saling bertukar menjadi 91,24 dan 95,83 persen. Akurasi, Kappa, dan balanced accuracy sebesar 93,54 persen tidak berubah karena tabel klasifikasinya sama. Pemilihan kelas positif hanya memengaruhi interpretasi, dan pada kasus ini kelas malignant lebih relevan karena kesalahan prediksi pada kelas tersebut berdampak lebih serius.

4.8 Penentuan CP Terbaik

printcp(fit.tree)
## 
## Classification tree:
## rpart(formula = Class ~ ., data = BC.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.071006      1   0.20118 0.30178 0.039997
## 3 0.008000      2   0.13018 0.16568 0.030403
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
plotcp(fit.tree, upper = "splits")
Gambar 4.3 Plot Complexity Parameter (CP) terhadap cross-validation error

Gambar 4.3 Plot Complexity Parameter (CP) terhadap cross-validation error

Pada batasan masalah diminta penentuan nilai CP terbaik sebelum dilakukan pruning. Nilai CP terbaik dipilih berdasarkan nilai cross-validation error (xerror) yang paling kecil pada tabel CP. Rincian tabel CP disajikan pada Tabel 4.6.

Tabel 4.6 Tabel complexity parameter (CP)

CP nsplit rel error xerror xstd
0,798817 0 1,00000 1,00000 0,062260
0,071006 1 0,20118 0,30178 0,039997
0,008000 2 0,13018 0,16568 0,030403

Nilai xerror menurun dari 1,00000 pada pohon tanpa pemisahan menjadi 0,16568 pada pohon dengan dua pemisahan. Nilai xerror terkecil berada pada CP sebesar 0,008 dengan standar deviasi 0,030403. Dengan demikian, nilai CP terbaik yang diperoleh adalah 0,008.

Nilai CP terbaik tersebut sama dengan nilai CP yang digunakan saat membangun pohon awal. Kondisi ini terjadi karena xerror masih terus menurun hingga baris terakhir tabel, sehingga tidak ada pemisahan yang menyebabkan kenaikan galat validasi silang. Pohon awal dengan cp = 0.008 sudah berada pada kompleksitas yang optimal menurut kriteria xerror minimum.

4.9 Pruning

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

pruned.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,3 337  25 benign (0.92581602 0.07418398)  
##     4) Bare.nuclei=1,2,3 309   5 benign (0.98381877 0.01618123) *
##     5) Bare.nuclei=4,5,7,8,9,10 28   8 malignant (0.28571429 0.71428571) *
##   3) Cell.size=4,5,6,7,8,9,10 153   9 malignant (0.05882353 0.94117647) *
rpart.plot(pruned.tree)
Gambar 4.4 Struktur Classification Tree setelah pruning

Gambar 4.4 Struktur Classification Tree setelah pruning

pruned.tree$variable.importance
##       Cell.size     Bare.nuclei      Cell.shape     Bl.cromatin Normal.nucleoli 
##      158.192512      132.553593      127.507199      107.862378      104.339897 
##    Epith.c.size    Cl.thickness   Marg.adhesion 
##      103.393799        4.468579        3.574863

Pada batasan masalah diminta pelaksanaan pruning menggunakan nilai CP terbaik. Pemangkasan dilakukan dengan fungsi prune pada cp = 0.008, yaitu nilai CP yang menghasilkan xerror minimum. Struktur pohon hasil pemangkasan tetap memiliki tiga simpul terminal dan dua kali pemisahan.

Struktur pohon, jumlah amatan pada setiap simpul, serta peluang kelas pada pohon setelah pruning identik dengan pohon sebelum pruning. Nilai variable importance juga tidak mengalami perubahan. Hal ini sejalan dengan hasil pada subbab sebelumnya bahwa tidak ada cabang yang perlu dipangkas karena nilai CP terbaik sama dengan nilai CP awal.

Pohon yang tidak berubah menunjukkan bahwa model awal belum mengalami overfitting yang berarti. Kompleksitas pohon yang kecil dengan hanya dua variabel penyusun sudah cukup untuk menghasilkan kesalahan validasi silang yang rendah. Pohon ini juga relatif mudah diinterpretasikan karena aturan klasifikasinya hanya terdiri atas tiga simpul terminal.

4.10 Prediksi dan Evaluasi Model Setelah Pruning

pred.prune = predict(
  pruned.tree,
  BC.test,
  type = "class"
)

table(
  pred.prune,
  Class.test
)
##            Class.test
## pred.prune  benign malignant
##   benign       125         3
##   malignant     12        69
matriks_kesalahan <- confusionMatrix(
  pred.prune,
  BC.test$Class
)
matriks_kesalahan
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       125         3
##   malignant     12        69
##                                           
##                Accuracy : 0.9282          
##                  95% CI : (0.8844, 0.9593)
##     No Information Rate : 0.6555          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.8457          
##                                           
##  Mcnemar's Test P-Value : 0.03887         
##                                           
##             Sensitivity : 0.9124          
##             Specificity : 0.9583          
##          Pos Pred Value : 0.9766          
##          Neg Pred Value : 0.8519          
##              Prevalence : 0.6555          
##          Detection Rate : 0.5981          
##    Detection Prevalence : 0.6124          
##       Balanced Accuracy : 0.9354          
##                                           
##        'Positive' Class : benign          
## 
matriks_kesalahan <- confusionMatrix(
  pred.prune,
  BC.test$Class,
  positive = "malignant"
)
matriks_kesalahan
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       125         3
##   malignant     12        69
##                                           
##                Accuracy : 0.9282          
##                  95% CI : (0.8844, 0.9593)
##     No Information Rate : 0.6555          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.8457          
##                                           
##  Mcnemar's Test P-Value : 0.03887         
##                                           
##             Sensitivity : 0.9583          
##             Specificity : 0.9124          
##          Pos Pred Value : 0.8519          
##          Neg Pred Value : 0.9766          
##              Prevalence : 0.3445          
##          Detection Rate : 0.3301          
##    Detection Prevalence : 0.3876          
##       Balanced Accuracy : 0.9354          
##                                           
##        'Positive' Class : malignant       
## 

Pada batasan masalah diminta evaluasi kembali model setelah pruning menggunakan confusion matrix. Hasil prediksi pada data testing menunjukkan 125 amatan benign dan 69 amatan malignant terklasifikasi dengan benar. Sebanyak 12 amatan benign diprediksi malignant dan 3 amatan malignant diprediksi benign, sebagaimana disajikan pada Tabel 4.7.

Tabel 4.7 Perbandingan kinerja model sebelum dan sesudah pruning

Ukuran evaluasi Sebelum pruning Setelah pruning
Akurasi 0,9282 0,9282
Kappa 0,8457 0,8457
Sensitivitas (malignant) 0,9583 0,9583
Spesifisitas (malignant) 0,9124 0,9124
Balanced accuracy 0,9354 0,9354
Jumlah simpul terminal 3 3

Seluruh ukuran evaluasi pada model setelah pruning bernilai sama dengan model sebelum pruning. Kesamaan ini merupakan konsekuensi dari struktur pohon yang tidak berubah akibat nilai CP terbaik yang sama dengan nilai CP awal. Dengan demikian, proses pruning pada penelitian ini tidak menghasilkan perbaikan maupun penurunan kinerja model.

Model akhir mampu mengklasifikasikan 92,82 persen amatan data testing dengan benar. Sensitivitas sebesar 95,83 persen menunjukkan bahwa model cukup andal dalam mendeteksi kasus kanker ganas. Nilai prediksi positif sebesar 85,19 persen menunjukkan bahwa sebagian prediksi ganas masih berupa kasus jinak, sehingga ruang perbaikan masih ada pada pengurangan false positive.

4.11 Evaluasi dengan ROC dan AUC

bc_preds_cart <- bind_cols(
  as.data.frame(
    predict(
      pruned.tree,
      newdata = BC.test,
      type = "prob"
    )
  ),
  predicted = predict(
    pruned.tree,
    newdata = BC.test,
    type = "class"
  ),
  actual = BC.test$Class
)

bc_preds_cart
##         benign  malignant predicted    actual
## 5   0.98381877 0.01618123    benign    benign
## 7   0.28571429 0.71428571 malignant    benign
## 8   0.98381877 0.01618123    benign    benign
## 9   0.98381877 0.01618123    benign    benign
## 12  0.98381877 0.01618123    benign    benign
## 13  0.98381877 0.01618123    benign malignant
## 18  0.98381877 0.01618123    benign    benign
## 23  0.98381877 0.01618123    benign    benign
## 24  0.05882353 0.94117647 malignant malignant
## 25  0.98381877 0.01618123    benign    benign
## 28  0.98381877 0.01618123    benign    benign
## 41  0.05882353 0.94117647 malignant    benign
## 45  0.05882353 0.94117647 malignant malignant
## 47  0.05882353 0.94117647 malignant malignant
## 51  0.05882353 0.94117647 malignant malignant
## 55  0.05882353 0.94117647 malignant malignant
## 59  0.28571429 0.71428571 malignant malignant
## 61  0.98381877 0.01618123    benign malignant
## 65  0.98381877 0.01618123    benign    benign
## 66  0.05882353 0.94117647 malignant malignant
## 68  0.28571429 0.71428571 malignant malignant
## 71  0.98381877 0.01618123    benign    benign
## 74  0.05882353 0.94117647 malignant malignant
## 78  0.98381877 0.01618123    benign    benign
## 79  0.98381877 0.01618123    benign    benign
## 82  0.98381877 0.01618123    benign    benign
## 83  0.98381877 0.01618123    benign    benign
## 85  0.05882353 0.94117647 malignant malignant
## 86  0.05882353 0.94117647 malignant malignant
## 87  0.28571429 0.71428571 malignant malignant
## 90  0.98381877 0.01618123    benign    benign
## 91  0.98381877 0.01618123    benign    benign
## 92  0.98381877 0.01618123    benign    benign
## 96  0.98381877 0.01618123    benign    benign
## 100 0.05882353 0.94117647 malignant malignant
## 109 0.98381877 0.01618123    benign    benign
## 111 0.98381877 0.01618123    benign    benign
## 113 0.28571429 0.71428571 malignant malignant
## 115 0.98381877 0.01618123    benign    benign
## 117 0.98381877 0.01618123    benign    benign
## 119 0.98381877 0.01618123    benign    benign
## 121 0.98381877 0.01618123    benign    benign
## 130 0.98381877 0.01618123    benign    benign
## 135 0.98381877 0.01618123    benign    benign
## 141 0.98381877 0.01618123    benign    benign
## 143 0.05882353 0.94117647 malignant malignant
## 144 0.28571429 0.71428571 malignant    benign
## 145 0.98381877 0.01618123    benign    benign
## 146 0.98381877 0.01618123    benign    benign
## 147 0.05882353 0.94117647 malignant malignant
## 148 0.98381877 0.01618123    benign    benign
## 152 0.28571429 0.71428571 malignant malignant
## 154 0.98381877 0.01618123    benign    benign
## 160 0.05882353 0.94117647 malignant malignant
## 168 0.05882353 0.94117647 malignant malignant
## 170 0.98381877 0.01618123    benign    benign
## 175 0.05882353 0.94117647 malignant malignant
## 176 0.05882353 0.94117647 malignant malignant
## 178 0.05882353 0.94117647 malignant malignant
## 194 0.98381877 0.01618123    benign    benign
## 201 0.05882353 0.94117647 malignant malignant
## 205 0.98381877 0.01618123    benign    benign
## 208 0.98381877 0.01618123    benign    benign
## 210 0.98381877 0.01618123    benign    benign
## 214 0.05882353 0.94117647 malignant malignant
## 216 0.05882353 0.94117647 malignant malignant
## 218 0.98381877 0.01618123    benign    benign
## 220 0.98381877 0.01618123    benign    benign
## 226 0.98381877 0.01618123    benign    benign
## 229 0.98381877 0.01618123    benign    benign
## 231 0.05882353 0.94117647 malignant malignant
## 234 0.05882353 0.94117647 malignant malignant
## 244 0.28571429 0.71428571 malignant    benign
## 245 0.98381877 0.01618123    benign    benign
## 250 0.98381877 0.01618123    benign    benign
## 252 0.05882353 0.94117647 malignant malignant
## 254 0.05882353 0.94117647 malignant malignant
## 255 0.05882353 0.94117647 malignant malignant
## 260 0.05882353 0.94117647 malignant    benign
## 265 0.05882353 0.94117647 malignant malignant
## 266 0.98381877 0.01618123    benign    benign
## 268 0.28571429 0.71428571 malignant malignant
## 276 0.98381877 0.01618123    benign    benign
## 279 0.98381877 0.01618123    benign    benign
## 288 0.98381877 0.01618123    benign    benign
## 295 0.98381877 0.01618123    benign    benign
## 299 0.98381877 0.01618123    benign    benign
## 300 0.28571429 0.71428571 malignant malignant
## 301 0.05882353 0.94117647 malignant malignant
## 302 0.98381877 0.01618123    benign    benign
## 310 0.28571429 0.71428571 malignant    benign
## 311 0.98381877 0.01618123    benign    benign
## 312 0.98381877 0.01618123    benign    benign
## 313 0.05882353 0.94117647 malignant malignant
## 314 0.98381877 0.01618123    benign    benign
## 316 0.05882353 0.94117647 malignant    benign
## 318 0.05882353 0.94117647 malignant malignant
## 320 0.05882353 0.94117647 malignant    benign
## 321 0.05882353 0.94117647 malignant malignant
## 325 0.98381877 0.01618123    benign    benign
## 328 0.98381877 0.01618123    benign    benign
## 335 0.05882353 0.94117647 malignant malignant
## 338 0.98381877 0.01618123    benign    benign
## 340 0.05882353 0.94117647 malignant malignant
## 341 0.28571429 0.71428571 malignant malignant
## 342 0.98381877 0.01618123    benign    benign
## 343 0.98381877 0.01618123    benign    benign
## 344 0.98381877 0.01618123    benign    benign
## 358 0.05882353 0.94117647 malignant malignant
## 360 0.28571429 0.71428571 malignant malignant
## 366 0.98381877 0.01618123    benign    benign
## 367 0.05882353 0.94117647 malignant malignant
## 369 0.98381877 0.01618123    benign    benign
## 376 0.98381877 0.01618123    benign    benign
## 378 0.98381877 0.01618123    benign    benign
## 381 0.98381877 0.01618123    benign    benign
## 384 0.98381877 0.01618123    benign    benign
## 386 0.98381877 0.01618123    benign    benign
## 388 0.98381877 0.01618123    benign    benign
## 389 0.98381877 0.01618123    benign    benign
## 391 0.98381877 0.01618123    benign    benign
## 396 0.98381877 0.01618123    benign    benign
## 399 0.98381877 0.01618123    benign    benign
## 402 0.98381877 0.01618123    benign    benign
## 405 0.98381877 0.01618123    benign    benign
## 412 0.98381877 0.01618123    benign    benign
## 413 0.05882353 0.94117647 malignant malignant
## 420 0.98381877 0.01618123    benign    benign
## 431 0.98381877 0.01618123    benign    benign
## 432 0.98381877 0.01618123    benign    benign
## 436 0.05882353 0.94117647 malignant malignant
## 442 0.28571429 0.71428571 malignant    benign
## 444 0.98381877 0.01618123    benign    benign
## 448 0.98381877 0.01618123    benign    benign
## 453 0.98381877 0.01618123    benign    benign
## 456 0.98381877 0.01618123    benign malignant
## 457 0.05882353 0.94117647 malignant malignant
## 459 0.98381877 0.01618123    benign    benign
## 461 0.98381877 0.01618123    benign    benign
## 464 0.98381877 0.01618123    benign    benign
## 465 0.98381877 0.01618123    benign    benign
## 470 0.98381877 0.01618123    benign    benign
## 474 0.98381877 0.01618123    benign    benign
## 479 0.98381877 0.01618123    benign    benign
## 483 0.05882353 0.94117647 malignant malignant
## 484 0.05882353 0.94117647 malignant malignant
## 485 0.98381877 0.01618123    benign    benign
## 489 0.05882353 0.94117647 malignant malignant
## 491 0.98381877 0.01618123    benign    benign
## 494 0.05882353 0.94117647 malignant malignant
## 498 0.98381877 0.01618123    benign    benign
## 507 0.05882353 0.94117647 malignant malignant
## 508 0.28571429 0.71428571 malignant    benign
## 510 0.98381877 0.01618123    benign    benign
## 511 0.98381877 0.01618123    benign    benign
## 512 0.98381877 0.01618123    benign    benign
## 515 0.05882353 0.94117647 malignant malignant
## 516 0.05882353 0.94117647 malignant malignant
## 519 0.98381877 0.01618123    benign    benign
## 525 0.98381877 0.01618123    benign    benign
## 526 0.98381877 0.01618123    benign    benign
## 530 0.98381877 0.01618123    benign    benign
## 531 0.05882353 0.94117647 malignant malignant
## 534 0.98381877 0.01618123    benign    benign
## 537 0.98381877 0.01618123    benign    benign
## 539 0.98381877 0.01618123    benign    benign
## 540 0.98381877 0.01618123    benign    benign
## 546 0.98381877 0.01618123    benign    benign
## 548 0.98381877 0.01618123    benign    benign
## 550 0.05882353 0.94117647 malignant malignant
## 554 0.05882353 0.94117647 malignant    benign
## 567 0.98381877 0.01618123    benign    benign
## 568 0.98381877 0.01618123    benign    benign
## 570 0.05882353 0.94117647 malignant malignant
## 571 0.05882353 0.94117647 malignant malignant
## 572 0.05882353 0.94117647 malignant malignant
## 574 0.98381877 0.01618123    benign    benign
## 576 0.98381877 0.01618123    benign    benign
## 577 0.98381877 0.01618123    benign    benign
## 578 0.98381877 0.01618123    benign    benign
## 580 0.98381877 0.01618123    benign    benign
## 588 0.98381877 0.01618123    benign    benign
## 591 0.05882353 0.94117647 malignant malignant
## 596 0.98381877 0.01618123    benign    benign
## 597 0.98381877 0.01618123    benign    benign
## 598 0.98381877 0.01618123    benign    benign
## 604 0.05882353 0.94117647 malignant malignant
## 609 0.05882353 0.94117647 malignant malignant
## 610 0.98381877 0.01618123    benign    benign
## 624 0.98381877 0.01618123    benign    benign
## 627 0.05882353 0.94117647 malignant malignant
## 628 0.28571429 0.71428571 malignant    benign
## 637 0.05882353 0.94117647 malignant malignant
## 639 0.98381877 0.01618123    benign    benign
## 646 0.98381877 0.01618123    benign    benign
## 648 0.98381877 0.01618123    benign    benign
## 649 0.05882353 0.94117647 malignant malignant
## 654 0.98381877 0.01618123    benign    benign
## 659 0.05882353 0.94117647 malignant malignant
## 662 0.98381877 0.01618123    benign    benign
## 664 0.98381877 0.01618123    benign    benign
## 669 0.05882353 0.94117647 malignant malignant
## 670 0.05882353 0.94117647 malignant malignant
## 672 0.98381877 0.01618123    benign    benign
## 678 0.98381877 0.01618123    benign    benign
## 687 0.98381877 0.01618123    benign    benign
## 692 0.05882353 0.94117647 malignant malignant
## 696 0.98381877 0.01618123    benign    benign
## 699 0.05882353 0.94117647 malignant malignant
bc_cm_cart <- confusionMatrix(
  bc_preds_cart$predicted,
  reference = bc_preds_cart$actual
)
bc_cm_cart
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       125         3
##   malignant     12        69
##                                           
##                Accuracy : 0.9282          
##                  95% CI : (0.8844, 0.9593)
##     No Information Rate : 0.6555          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.8457          
##                                           
##  Mcnemar's Test P-Value : 0.03887         
##                                           
##             Sensitivity : 0.9124          
##             Specificity : 0.9583          
##          Pos Pred Value : 0.9766          
##          Neg Pred Value : 0.8519          
##              Prevalence : 0.6555          
##          Detection Rate : 0.5981          
##    Detection Prevalence : 0.6124          
##       Balanced Accuracy : 0.9354          
##                                           
##        'Positive' Class : benign          
## 
library(yardstick)

mdl_auc <- Metrics::auc(
  actual =
    bc_preds_cart$actual == "benign",
  bc_preds_cart$benign
)
mdl_auc
## [1] 0.9543796
yardstick::roc_curve(
  bc_preds_cart,
  actual,
  benign
) %>%
  autoplot() +
  labs(
    title = "ROC Curve",
    subtitle =
      paste0(
        "AUC = ",
        round(mdl_auc, 4)
      )
  )
Gambar 4.5 Kurva ROC model Classification Tree setelah pruning (AUC = 0,9544)

Gambar 4.5 Kurva ROC model Classification Tree setelah pruning (AUC = 0,9544)

Pada batasan masalah diminta evaluasi model menggunakan confusion matrix, ROC, dan AUC. Kurva ROC dibentuk dari peluang prediksi kelas benign pada data testing, sehingga kelas benign diperlakukan sebagai kelas positif. Kurva ini menggambarkan hubungan antara sensitivitas dan 1 − spesifisitas pada berbagai nilai ambang peluang.

Nilai AUC yang diperoleh sebesar 0,9544. Nilai tersebut mendekati 1 sehingga model tergolong memiliki kemampuan diskriminasi yang sangat baik dalam membedakan kelas benign dan malignant. Artinya, apabila satu pasien jinak dan satu pasien ganas dipilih secara acak, peluang model memberikan skor lebih tinggi pada pasien jinak adalah sekitar 95,44 persen.

Kurva ROC tampak bersudut dan hanya memiliki sedikit titik potong karena pohon hanya menghasilkan tiga nilai peluang berbeda, yaitu 0,9838, 0,2857, dan 0,0588. Setiap simpul terminal menghasilkan satu nilai peluang yang sama untuk seluruh amatan di dalamnya. Karakteristik ini umum ditemukan pada pohon keputusan yang berukuran kecil.

Secara keseluruhan, confusion matrix dengan akurasi 92,82 persen dan AUC sebesar 0,9544 menunjukkan bahwa model Classification Tree dengan algoritma CART layak digunakan untuk mengklasifikasikan kondisi kanker payudara pada dataset BreastCancer. Variabel Cell.size dan Bare.nuclei menjadi penentu utama dalam aturan klasifikasi. Hasil ini bergantung pada satu kali pembagian data dengan benih 46, sehingga hasil dapat sedikit berbeda jika menggunakan pembagian data lain.

BAB V PENUTUP

5.1 Kesimpulan

Konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART berkaitan dengan pembentukan model berstruktur pohon yang terdiri atas simpul akar, simpul internal, cabang, dan simpul daun. Metode CART membentuk pohon melalui pemisahan data secara biner secara rekursif, sehingga setiap simpul menghasilkan dua simpul anak yang semakin homogen. Jika variabel respons bersifat kategorik, pohon yang terbentuk disebut Classification Tree. Pemilihan pemisah terbaik pada CART didasarkan pada indeks Gini, yaitu ukuran ketidakmurnian kelas dalam suatu simpul.

Pembangunan model Classification Tree menggunakan algoritma CART dilakukan melalui beberapa tahapan, yaitu penentuan pemisah terbaik berdasarkan penurunan impurity, pembentukan simpul hingga kriteria pemberhentian terpenuhi, dan pemberian label kelas pada setiap simpul terminal. Pohon yang terbentuk kemudian dapat disederhanakan melalui pruning untuk mengurangi kompleksitas dan risiko overfitting. Pemilihan pohon optimal dilakukan dengan cost-complexity pruning yang dipandu oleh validasi silang. Kinerja model selanjutnya dievaluasi menggunakan confusion matrix, ROC, dan AUC.

Pada batasan masalah diminta klasifikasi kondisi kanker payudara pada dataset BreastCancer menggunakan Classification Tree dan seluruh tahapan berhasil dilaksanakan mulai dari penanganan missing value dengan mice hingga evaluasi model. Model yang terbentuk hanya menggunakan variabel Cell.size dan Bare.nuclei dengan tiga simpul terminal, serta mencapai akurasi 92,82 persen dan AUC sebesar 0,9544 pada data testing. Proses pruning dengan CP terbaik sebesar 0,008 tidak mengubah struktur pohon sehingga kinerja model sebelum dan sesudah pemangkasan sama. Model ini tergolong baik dan mudah diinterpretasikan untuk membedakan kelas jinak dan ganas.

5.2 Saran

Penulis menyarankan agar penelitian selanjutnya membangun pohon awal dengan nilai CP yang lebih kecil sehingga proses pruning dapat dibandingkan pada pohon yang lebih besar. Evaluasi model juga sebaiknya dilakukan dengan validasi silang atau beberapa kali pembagian data agar hasil tidak bergantung pada satu pembagian saja. Perbandingan dengan metode lain, seperti random forest atau boosting, dapat dilakukan untuk menilai peningkatan kinerja klasifikasi. Penanganan false positive perlu mendapat perhatian lebih karena kesalahan tersebut masih menjadi kekeliruan terbanyak pada model.

DAFTAR PUSTAKA

Agwil, W., Agustina, D., Fransiska, H., & Hidayati, N. (2022). Klasifikasi Karakteristik Kemiskinan di Provinsi Bengkulu Tahun 2020 Menggunakan Metode Pohon Klasifikasi Gabungan. Jurnal Aplikasi Statistika & Komputasi Statistik, 14(2), 23–32.

Cabot, J. H., & Ross, E. G. (2023). Evaluating Prediction Model Performance. Surgery (United States), 174(3), 723–726. https://doi.org/10.1016/j.surg.2023.05.023

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

Halabaku, E., & Bytyçi, E. (2024). Overfitting in Machine Learning: A Comparative Analysis of Decision Trees and Random Forests. Intelligent Automation and Soft Computing, 39(6), 987–1006. https://doi.org/10.32604/iasc.2024.059429

Nursyahfitri, R., Maharadja, A. N., Farissa, R. A., & Umaidah, Y. (2021). Klasifikasi Penentuan Jenis Obat Menggunakan Algoritma Decision Tree. JIP (Jurnal Informatika Polinema), 7(3), 53–60.