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.
Berdasarkan latar belakang di atas, adapun rumusan masalah yang dapat disimpulkan sebagai berikut:
Adapun tujuan penelitian ini yaitu:
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).
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).
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 \]
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).
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).
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.
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.
Berikut merupakan algoritma penelitian pada batasan masalah:
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.
## [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.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 ...
## '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 ...
## [1] "factor"
##
## 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.
## 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
## [1] 16
## 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
## 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
## [1] 0
## '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.
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
## [1] 209 10
##
## benign malignant
## 0.655102 0.344898
##
## 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.
## 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) *
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.
## 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
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.
## Class.test
## pred.tree benign malignant
## benign 125 3
## malignant 12 69
## 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.
##
## 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
## [1] 0.008
## [1] 0.008
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.
## 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) *
Gambar 4.4 Struktur Classification Tree setelah pruning
## 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.
## Class.test
## pred.prune benign malignant
## benign 125 3
## malignant 12 69
## 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.
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)
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.
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.
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.
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.