Perkembangan teknologi informasi menyebabkan jumlah data semakin meningkat, sehingga diperlukan metode analisis yang mampu mengolah data menjadi informasi yang bermanfaat. Salah satu metode yang dapat digunakan adalah machine learning, khususnya klasifikasi, yang bertujuan mengelompokkan objek ke dalam kelas tertentu berdasarkan karakteristik variabel prediktor. Salah satu metode klasifikasi yang dapat digunakan adalah Decision Tree atau pohon keputusan. Decision Tree merupakan salah satu algoritma pada pengolahan data metode klasifikasi. Algoritma machine learning yang satu ini mempresentasikan strukturnya seperti struktur pohon untuk menemukan hasil keputusan (Biyantoro dan Prasetiyo, 2024).
Pohon keputusan sendiri memiliki beberapa metode dimana metode yang popular salah satunya adalah metode CART. Classification and Regression Tress (CART) adalah suatu metode algoritma dari salah satu teknik eksplorasi data yaitu teknik pohon keputusan yang dikembangkan untuk melakukan analisis klasifikasi pada variabel respon baik yang nominal, ordinal maupun kontinu. (Dj dan Achmad, 2020). Selain itu, pembentukan pohon perlu memperhatikan kompleksitas model agar tidak terjadi overfitting, yaitu kondisi ketika model terlalu menyesuaikan diri dengan data latih.
Pembangunan model Classification Tree menggunakan CART mencakup beberapa tahapan, yaitu persiapan data, pembagian data latih dan data uji, penentuan pemisahan terbaik, pembentukan pohon secara rekursif, pemangkasan pohon, serta evaluasi kinerja model. Setiap tahapan memiliki peran penting dalam menghasilkan model klasifikasi yang mampu mengidentifikasi pola data dan mengklasifikasikan pengamatan baru.
Berdasarkan latar belakang di atas, adapun rumusan masalah yang dapat disimpulkan sebagai berikut:
Adapun tujuan penelitian ini yaitu:
Decision Tree merupakan salah satu algoritma pada pengolahan data metode klasifikasi. Algoritma machine learning yang satu ini mempresentasikan strukturnya seperti struktur pohon untuk menemukan hasil keputusan. Konsep dari Decision Tree ini adalah dengan menyajikan pernyataan-pernyataan bersyarat pada setiap langkah yang bercabang untuk pengambilan keputusan berdasarkan perhitungan dari data set itu sendiri. Dalam metode Klasifikasi, algoritma Decision Tree merupakan yang paling banyak digunakan (Biyantoro dan Prasetiyo, 2024).
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).
CART merupakan metode klasifikasi menggunkan logika biner berdasarkan logika pohon keputusan (decision tree), hasil klasifikasi didasarkan pada kinerja statistik regresi. Cara kerja algoritma CART adalah memisahkan data melalui simpul-simpul hingga mencapai simpul akhir dengan membentuk hierarki pohon keputusan (Farikhi dan Pramono, 2023).
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 Evaluasi Model Klasifikasi
Tahap evaluasi bertujuan untuk mengukur kinerja model klasifikasi yang telah dibangun melalui analisis confusion matrix. Agar evaluasi kinerja model dilakukan secara lebih komprehensif maka menerapkan beberapa metrik evaluasi yaitu accuracy, precision, recall, dan F1-score yang masing-masing memberikan informasi mengenai tingkat ketepatan klasifikasi, presisi prediksi, sensitivitas model, serta keseimbangan antara precision dan recall (Saputra et al., 2026).
Dan dari nilai-nilai ini, rasio accuracy, precision, recall dan f1-score dapat dihitung sebagai berikut (Saputra et al., 2026):
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)
Dalam proses pembentukan model Classification Tree
menggunakan algoritma CART, diperlukan beberapa package pendukung untuk
menunjang analisis. Package rpart digunakan untuk
membangun pohon keputusan, sementara rpart.plot berfungsi
menampilkan visualisasi struktur pohon yang dihasilkan. Selanjutnya,
caret dimanfaatkan untuk membantu pembagian data serta evaluasi
klasifikasi melalui confusion matrix.
Adapun package mlbench menyediakan dataset
BreastCancer yang digunakan dalam analisis, sedangkan
mice berperan dalam menangani data yang hilang (missing
values). Untuk mendukung pengolahan dan manipulasi data, digunakan
dplyr dan tidyverse, sementara
ROCR dimanfaatkan untuk mengevaluasi kinerja model melalui
kurva ROC. Seluruh package berhasil dimuat tanpa
mengalami kesalahan, sehingga analisis dapat dilanjutkan ke tahap
berikutnya.
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
Sesuai dengan batasan masalah, analisis menggunakan dataset
BreastCancer yang tersedia dalam package
mlbench untuk melakukan klasifikasi kondisi kanker
payudara. Dataset tersebut mencakup 699 observasi dan 11
variabel, yang terdiri atas satu variabel identitas, sembilan variabel
prediktor, dan satu variabel respons. Variabel Id tidak disertakan dalam
pemodelan karena hanya berfungsi sebagai penanda identitas pasien dan
tidak memberikan informasi yang relevan untuk menentukan kelas.
Setelah variabel Id dihilangkan, dataset yang digunakan
terdiri atas sembilan variabel prediktor dan satu variabel respons,
yaitu Class. Variabel Class bertipe
factor dengan dua kategori, yakni benign yang
menunjukkan kondisi jinak dan malignant yang menunjukkan
kondisi ganas. Adapun uraian mengenai setiap variabel yang digunakan
dalam analisis 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) |
Berdasarkan distribusi variabel respons, sebanyak 458 observasi (65,52%) termasuk dalam kategori benign (jinak), sedangkan 241 observasi (34,48%) tergolong kategori malignant (ganas). Hal ini menunjukkan bahwa kategori benign memiliki proporsi yang lebih besar dibandingkan kategori malignant. Meskipun terdapat perbedaan jumlah observasi antarkelas, distribusi tersebut belum menunjukkan ketimpangan yang ekstrem, sehingga pemodelan dapat dilakukan tanpa penyeimbangan kelas tambahan. Namun, kinerja model pada kedua kelas tetap perlu diperhatikan melalui evaluasi klasifikasi.
# 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 ...
Pemeriksaan missing value dilakukan menggunakan package
mice. Berdasarkan hasil pemeriksaan, ditemukan sebanyak 16
nilai hilang yang seluruhnya terdapat pada variabel
Bare.nuclei. Jumlah tersebut mencakup 2,29% dari total 699
observasi, sementara variabel lainnya tidak memiliki nilai hilang.
Berdasarkan pola data hilang yang ditampilkan melalui fungsi
md.pattern, sebanyak 683 observasi memiliki data lengkap,
sedangkan 16 observasi lainnya mengalami kehilangan nilai hanya pada
variabel Bare.nuclei. Dengan demikian, data hilang tidak
ditemukan pada variabel lain. Untuk mempertahankan seluruh observasi
dalam proses pemodelan, penanganan dilakukan melalui imputasi daripada
menghapus observasi yang memiliki nilai hilang.
Proses imputasi dilakukan menggunakan fungsi mice dengan
lima imputasi (m = 5), lima iterasi
(maxit = 5), dan seed sebesar 46 agar proses dapat
direproduksi. Metode imputasi yang digunakan untuk variabel
Bare.nuclei adalah polytomous regression
(polyreg), sesuai dengan karakteristik variabel tersebut
yang bertipe faktor tidak berurutan dengan lebih dari dua kategori.
Selanjutnya, kumpulan data hasil imputasi pertama digunakan untuk
analisis. Pemeriksaan ulang menunjukkan bahwa seluruh variabel telah
bebas dari missing value, sehingga data dapat dilanjutkan ke
tahap pembentukan model Classification Tree.
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
Pembagian data dilakukan untuk memisahkan data training dan
data testing sebelum model Classification Tree
dibangun. Proses ini menggunakan fungsi createDataPartition
dengan proporsi 70% untuk data training dan 30% untuk data
testing. Hasil pembagian menghasilkan 490 observasi pada data
training dan 209 observasi pada data testing.
Fungsi createDataPartition menerapkan pengambilan sampel
berstrata berdasarkan variabel Class, sehingga distribusi
kelas pada kedua kelompok data tetap mendekati distribusi data awal.
Pada data training, terdapat 321 observasi benign (65,51%) dan
169 observasi malignant (34,49%). Sementara itu, data
testing terdiri atas 137 observasi benign (65,55%) dan
72 observasi malignant (34,45%).
Proporsi kelas yang relatif serupa menunjukkan bahwa pembagian data mempertahankan distribusi kategori benign dan malignant. Data training selanjutnya digunakan untuk membangun model CART, sedangkan data testing digunakan untuk mengevaluasi kemampuan klasifikasi pada observasi yang tidak dilibatkan dalam proses pelatihan. Dengan demikian, evaluasi model dapat memberikan gambaran yang lebih objektif mengenai kemampuannya dalam mengklasifikasikan data baru.
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
Pembentukan model Classification Tree dilakukan menggunakan
fungsi rpart dengan metode klasifikasi
(method = "class") dan parameter kompleksitas
(cp) sebesar 0,008. Variabel Class ditetapkan
sebagai variabel respons, sedangkan variabel lainnya digunakan
sebagai prediktor. Berdasarkan hasil pemodelan, terbentuk pohon
keputusan dengan tiga simpul terminal dan dua tahap pemisahan.
Pada simpul akar, terdapat 490 observasi dengan 169 observasi
berkelas malignant, sehingga kelas mayoritas yang diprediksi adalah
benign. Pemisahan pertama dilakukan berdasarkan variabel
Cell.size. Observasi dengan kategori 1, 2, dan 3 diarahkan
ke cabang kiri, sedangkan kategori 4 hingga 10 masuk ke cabang kanan.
Cabang kanan terdiri atas 153 observasi, dengan 94,12% di antaranya
termasuk kelas malignant, sehingga simpul tersebut
diklasifikasikan sebagai malignant.
Selanjutnya, cabang kiri yang terdiri atas 337 observasi kembali
dipisahkan menggunakan variabel Bare.nuclei. Observasi
dengan kategori 1, 2, dan 3 berjumlah 309 dan diklasifikasikan sebagai
benign, dengan proporsi kelas sebesar 98,38%. Sementara itu, 28
observasi pada kategori lainnya diklasifikasikan sebagai
malignant, dengan proporsi sebesar 71,43%.
Variabel Cell.size dan Bare.nuclei
merupakan dua prediktor yang digunakan dalam struktur pohon akhir. Kedua
variabel tersebut menjadi dasar pembentukan aturan klasifikasi pada
model yang diperoleh. Pada data training, terdapat 22 observasi
yang salah diklasifikasikan dari total 490 observasi, sehingga tingkat
kesalahan klasifikasi (misclassification rate) sebesar 4,49%.
Hasil ini menggambarkan kinerja model pada data pelatihan, sedangkan
kemampuan klasifikasi pada data baru perlu dinilai menggunakan data
testing.
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
Analisis variable importance dilakukan untuk
mengidentifikasi variabel prediktor yang memiliki tingkat kepentingan
relatif dalam proses klasifikasi. Berdasarkan hasil pemodelan, variabel
Cell.size memperoleh nilai kepentingan tertinggi sebesar
158,19, diikuti Bare.nuclei sebesar 132,55 dan
Cell.shape sebesar 127,51. Tingginya nilai kepentingan
Cell.size sejalan dengan struktur pohon keputusan karena
variabel tersebut digunakan sebagai pemisah pertama pada simpul
akar.
Variabel Cell.shape, Bl.cromatin,
Normal.nucleoli, dan Epith.c.size juga
memiliki nilai kepentingan yang relatif tinggi meskipun tidak digunakan
secara langsung dalam struktur pohon akhir. Hal ini disebabkan
perhitungan variable importance pada rpart dapat
memperhitungkan kontribusi variabel melalui pemisah pesaing
(competing splits) dan pemisah pengganti (surrogate
splits). Dengan demikian, variabel yang tidak muncul dalam struktur
pohon tetap dapat memiliki nilai kepentingan apabila memberikan
informasi yang relevan terhadap proses pemisahan kelas.
Sebaliknya, variabel Cl.thickness dan
Marg.adhesion memiliki nilai kepentingan yang relatif
rendah, masing-masing sebesar 4,47 dan 3,57. Sementara itu, variabel
Mitoses tidak tercantum dalam hasil variable importance
karena tidak memberikan kontribusi yang tercatat dalam perhitungan
model. Secara keseluruhan, hasil ini menunjukkan bahwa tingkat
kepentingan variabel prediktor berbeda-beda dalam model CART yang
dibentuk. Namun, nilai variable importance menunjukkan
kepentingan relatif dalam model, bukan secara langsung membuktikan
hubungan sebab-akibat atau signifikansi statistik.
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
##
Evaluasi model dilakukan menggunakan confusion matrix terhadap 209 observasi pada data testing. Berdasarkan hasil klasifikasi, sebanyak 125 observasi kelas benign dan 69 observasi kelas malignant berhasil diprediksi dengan benar. Sementara itu, terdapat 15 observasi yang mengalami kesalahan klasifikasi, sehingga model mampu mengklasifikasikan 194 observasi secara tepat.
Model memperoleh akurasi sebesar 92,82%, dengan selang kepercayaan 95% antara 88,44% hingga 95,93%. Nilai tersebut lebih tinggi dibandingkan No Information Rate sebesar 65,55%, dengan p-value kurang dari 2 × 10⁻¹⁶. Selain itu, nilai Kappa sebesar 0,8457 menunjukkan tingkat kesesuaian yang tinggi antara hasil prediksi dan kelas aktual setelah memperhitungkan kesepakatan yang mungkin terjadi secara kebetulan.
Dengan menetapkan kelas malignant sebagai kelas positif, model menghasilkan sensitivitas sebesar 95,83% dan spesifisitas sebesar 91,24%. Artinya, model berhasil mengidentifikasi 69 dari 72 observasi malignant dan mengenali 125 dari 137 observasi benign dengan benar. Kesalahan klasifikasi terdiri atas 12 observasi benign yang diprediksi sebagai malignant (false positive) dan 3 observasi malignant yang diprediksi sebagai benign (false negative).
Apabila kelas benign ditetapkan sebagai kelas positif, nilai sensitivitas menjadi 91,24% dan spesifisitas sebesar 95,83%. Sementara itu, akurasi, Kappa, dan balanced accuracy sebesar 93,54% tetap sama karena tidak bergantung pada pemilihan kelas positif. Dalam konteks klasifikasi kanker payudara, penetapan kelas malignant sebagai kelas positif lebih relevan untuk menilai kemampuan model dalam mendeteksi kasus ganas, terutama untuk memperhatikan risiko kasus ganas yang salah diklasifikasikan sebagai jinak.
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
Penentuan nilai complexity parameter (CP) terbaik dilakukan
berdasarkan nilai cross-validation error (xerror)
terkecil pada tabel CP. Parameter ini digunakan untuk mengendalikan
kompleksitas pohon keputusan dan menjadi dasar dalam menentukan struktur
pohon yang sesuai.
Berdasarkan hasil, nilai xerror mengalami penurunan dari
1,00000 pada pohon tanpa pemisahan menjadi 0,30178 pada pohon dengan
satu pemisahan, kemudian turun menjadi 0,16568 pada pohon dengan dua
pemisahan. Nilai xerror terkecil diperoleh pada CP sebesar
0,008 dengan nilai xstd sebesar 0,030403. Oleh karena itu,
berdasarkan kriteria minimum xerror, nilai CP terbaik yang
dipilih adalah 0,008.
Nilai CP tersebut sama dengan parameter yang digunakan dalam pembentukan model awal. Hal ini menunjukkan bahwa struktur pohon dengan dua pemisahan memiliki nilai galat validasi silang terendah di antara struktur yang tercantum dalam tabel CP. Dengan demikian, nilai CP sebesar 0,008 dipilih sebagai dasar untuk tahap pemangkasan (pruning) dan penentuan struktur akhir pohon keputusan.
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
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
Pemangkasan pohon (pruning) dilakukan menggunakan fungsi
prune dengan nilai CP sebesar 0,008, yang sebelumnya
terpilih berdasarkan nilai cross-validation error
(xerror) minimum. Setelah proses pemangkasan,
struktur pohon tetap terdiri atas tiga simpul terminal dan dua
pemisahan.
Hasil perbandingan menunjukkan bahwa struktur pohon, jumlah observasi pada setiap simpul, dan probabilitas kelas tidak mengalami perubahan setelah pruning. Nilai variable importance juga tetap sama seperti model awal. Hal ini menunjukkan bahwa penerapan nilai CP sebesar 0,008 tidak menghilangkan cabang pada pohon yang telah terbentuk, sehingga struktur model tetap dipertahankan.
Tidak berubahnya struktur pohon setelah pemangkasan menunjukkan bahwa
berdasarkan nilai CP yang dipilih, tidak terdapat cabang yang perlu
dihilangkan. Model akhir tetap memiliki struktur yang sederhana dengan
dua variabel prediktor, yaitu Cell.size dan
Bare.nuclei, serta tiga simpul terminal. Struktur tersebut
memudahkan interpretasi aturan klasifikasi. Namun, tidak berubahnya
pohon setelah pruning tidak secara langsung membuktikan bahwa
model bebas dari overfitting, hal tersebut tetap perlu dinilai
berdasarkan kinerja model pada data testing.
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
##
Evaluasi ulang model setelah proses pruning dilakukan menggunakan confusion matrix pada 209 observasi data testing. Hasil klasifikasi menunjukkan bahwa 125 observasi benign dan 69 observasi malignant berhasil diprediksi dengan benar. Sementara itu, terdapat 12 observasi benign yang diprediksi sebagai malignant dan 3 observasi malignant yang diprediksi sebagai benign.
Berdasarkan hasil evaluasi, seluruh ukuran kinerja model setelah pruning tetap sama dengan model sebelum pruning. Akurasi sebesar 92,82%, Kappa sebesar 0,8457, sensitivitas sebesar 95,83%, spesifisitas sebesar 91,24%, dan balanced accuracy sebesar 93,54%. Jumlah simpul terminal juga tetap sebanyak tiga. Kesamaan tersebut terjadi karena proses pruning tidak mengubah struktur pohon maupun hasil klasifikasinya.
Secara keseluruhan, model akhir mampu mengklasifikasikan 92,82% observasi pada data testing dengan benar. Sensitivitas sebesar 95,83% menunjukkan bahwa model berhasil mengidentifikasi sebagian besar observasi yang termasuk kelas malignant. Namun, masih terdapat kesalahan klasifikasi berupa false positive dan false negative. Oleh karena itu, meskipun model memiliki kinerja klasifikasi yang baik berdasarkan ukuran evaluasi tersebut, penggunaannya untuk mendukung penilaian medis tetap memerlukan validasi lebih lanjut dan tidak dapat menggantikan pemeriksaan oleh tenaga kesehatan.
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)
Evaluasi model dilakukan menggunakan confusion matrix, kurva Receiver Operating Characteristic (ROC), dan nilai Area Under the Curve (AUC). Kurva ROC dibentuk berdasarkan probabilitas prediksi kelas benign pada data testing, sehingga kelas benign ditetapkan sebagai kelas positif. Kurva ini menggambarkan hubungan antara sensitivitas (true positive rate) dan tingkat positif palsu (false positive rate) pada berbagai nilai ambang probabilitas.
Hasil evaluasi menunjukkan bahwa nilai AUC yang diperoleh sebesar 0,9544. Nilai tersebut mendekati 1, yang menunjukkan bahwa model memiliki kemampuan diskriminasi yang sangat baik dalam membedakan kelas benign dan malignant. Dengan kata lain, terdapat peluang sekitar 95,44% bahwa model memberikan skor probabilitas benign yang lebih tinggi kepada satu observasi benign dibandingkan satu observasi malignant yang dipilih secara acak.
Kurva ROC yang terbentuk memiliki pola bersudut dengan jumlah titik yang relatif sedikit. Hal ini berkaitan dengan struktur pohon keputusan yang hanya memiliki tiga simpul terminal, sehingga menghasilkan tiga nilai probabilitas prediksi yang berbeda, yaitu 0,9838, 0,2857, dan 0,0588. Observasi yang berada pada simpul terminal yang sama memperoleh nilai probabilitas prediksi yang identik, sehingga jumlah titik pada kurva ROC menjadi terbatas.
Secara keseluruhan, hasil confusion matrix dengan akurasi
sebesar 92,82% dan nilai AUC sebesar 0,9544 menunjukkan bahwa model
Classification Tree menggunakan algoritma CART memiliki kinerja
klasifikasi yang baik pada dataset BreastCancer. Variabel
Cell.size dan Bare.nuclei menjadi prediktor
yang digunakan dalam struktur pohon akhir. Namun, hasil tersebut perlu
diinterpretasikan berdasarkan pembagian data dengan seed 46 dan tidak
secara langsung menjamin kinerja yang sama pada data lain. Selain itu,
model ini merupakan model klasifikasi untuk keperluan analisis data,
bukan pengganti diagnosis medis.
Decision Tree merupakan metode klasifikasi yang menyajikan proses pengambilan keputusan dalam bentuk struktur pohon sehingga mudah dipahami dan diinterpretasikan. Algoritma CART (Classification and Regression Trees) membentuk pohon keputusan melalui pemisahan data secara biner berdasarkan variabel yang paling optimal. Dalam klasifikasi, CART dapat digunakan untuk mengelompokkan data ke dalam kelas tertentu dengan mempertimbangkan karakteristik variabel prediktor.
Pembangunan Classification Tree dengan algoritma CART dilakukan melalui beberapa tahapan, mulai dari persiapan dan pembersihan data, pembentukan pohon, penentuan pemisahan terbaik, hingga evaluasi dan pemangkasan pohon (pruning). Pemisahan dapat ditentukan menggunakan indeks Gini untuk memperoleh kelompok yang lebih homogen. Evaluasi model dapat dilakukan menggunakan confusion matrix, kurva ROC, dan nilai AUC untuk mengetahui kemampuan klasifikasi. Dengan tahapan tersebut, CART dapat menghasilkan model klasifikasi yang sistematis, mudah diinterpretasikan, dan sesuai dengan karakteristik data.
Berdasarkan hasil analisis, metode Decision Tree menggunakan
algoritma CART berhasil membentuk model klasifikasi kondisi kanker
payudara pada dataset BreastCancer yang terdiri atas 699
amatan. Penanganan missing value dilakukan menggunakan metode
imputasi mice, kemudian data dibagi menjadi 490 amatan data
training dan 209 amatan data testing. Model yang
terbentuk menggunakan dua variabel prediktor utama, yaitu
Cell.size dan Bare.nuclei, dengan tiga simpul
terminal dan dua pemisahan. Berdasarkan analisis variable
importance, Cell.size memiliki nilai kepentingan
tertinggi sebesar 158,19. Penentuan CP terbaik menghasilkan nilai 0,008,
dan proses pruning tidak mengubah struktur maupun kinerja
model. Evaluasi pada data testing menunjukkan akurasi sebesar
92,82%, nilai Kappa 0,8457, sensitivitas kelas malignant
95,83%, spesifisitas 91,24%, balanced accuracy 93,54%, dan AUC
sebesar 0,9544. Hasil tersebut menunjukkan bahwa model CART memiliki
kemampuan klasifikasi dan diskriminasi yang sangat baik pada data yang
dianalisis serta menghasilkan aturan keputusan yang relatif sederhana
dan mudah diinterpretasikan.
Laporan praktikum ini menggunakan pemrograman R dalam proses analisis klasifikasi menggunakan metode Decision Tree dengan algoritma CART. Oleh karena itu, diperlukan pemahaman terhadap sintaks yang digunakan agar program dapat dijalankan dengan baik dan meminimalkan terjadinya error. Selain itu, penting untuk memahami konsep dasar metode CART, tahapan pembentukan pohon keputusan, serta metode evaluasi yang digunakan untuk mengetahui tingkat ketepatan dan kinerja model klasifikasi.
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.
Biyantoro, A. S., & Prasetiyo, B. (2024). Penerapan Decision Tree untuk Klasifikasi Status Kesehatan dengan perbandingan KNN dan Naive Bayes. 4(1), 47–55.
Dj, S. P., & Achmad, A. I. (2020). Metode Classification And Regression Trees untuk Pengklasifikasian Faktor-Faktor yang Mempengaruhi Pengangguran Terbuka di Provinsi Jawa Barat Tahun 2020. 35–43.
Farikhi, F. Al, & Pramono, R. W. D. (2023). Perbandingan Algoritma Classification and Regression Tree ( CART ) dan Random Forest ( RF ) untuk Klasifikasi Penggunaan Lahan pada Google Earth Engine.
Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Bengkulu: Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.
Saputra, S. N., Christanto, F. W., Firdaus, E. A., & Ama, A. U. T. (2026). Model Klasifikasi Tweet Bencana Alam Gunung Meletus Menggunakan Algoritma Long Short-Term Memory. 5(2), 250–263.