Perkembangan teknologi informasi menyebabkan jumlah data semakin meningkat sehingga diperlukan metode yang dapat mengolah data menjadi informasi yang bermanfaat. Salah satu teknik yang digunakan untuk menganalisis data adalah data mining, yaitu proses menemukan pola atau informasi dari sekumpulan data. Dalam data mining, klasifikasi merupakan salah satu teknik yang bertujuan mengelompokkan data ke dalam kelas tertentu berdasarkan karakteristik variabel prediktor. Salah satu metode klasifikasi yang dapat digunakan adalah Decision Tree atau pohon keputusan karena mampu menyajikan proses pengambilan keputusan dalam bentuk struktur pohon yang relatif mudah dipahami dan diinterpretasikan.
Salah satu algoritma yang digunakan untuk membangun Decision Tree adalah Classification and Regression Tree (CART). Algoritma ini membentuk pohon keputusan melalui proses pemisahan data secara bertahap menjadi dua kelompok berdasarkan variabel prediktor tertentu. Dalam proses klasifikasi, CART dapat menggunakan indeks Gini untuk menentukan pemisahan terbaik sehingga menghasilkan kelompok data yang lebih homogen. Penerapan metode CART telah digunakan dalam berbagai permasalahan klasifikasi, seperti prediksi curah hujan yang berpotensi menyebabkan banjir dan pengelompokan data berdasarkan karakteristik tertentu (Hasanah dkk, 2021).
Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah:
Apa yang dimaksud dengan metode Decision Tree menggunakan algoritma CART, dan bagaimana prinsip kerjanya dalam melakukan klasifikasi data?
Bagaimana cara membangun model Classification Tree menggunakan algoritma CART?
Berdasarkan rumusan masalah, tujuan yang dapat disimpulkan adalah:
Menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).
Membangun model Classification Tree menggunakan algoritma CART?.
Adapun manfaat pada penelitian ini, yaitu:
Adapun batasan masalah pada laporan praktikum pertemuan ini adalah Gunakan dataset BreastCancer dari package mlbench untuk mengklasifikasikan kondisi kanker payudara menggunakan Decision Tree (Classification Tree). Lakukan pengecekan dan penanganan missing value menggunakan mice, kemudian bagi data menjadi training dan testing. Selanjutnya, bangun dan visualisasikan tree, analisis variable importance, lakukan prediksi dan evaluasi menggunakan confusion matrix, tentukan CP terbaik, lakukan pruning, dan evaluasi kembali model menggunakan confusion matrix, ROC, dan AUC!
Adapun sistematika penulisan dari praktikum ini adalah:
BAB I PENDAHULUAN Bab I terdiri dari latar belakang, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, dan sistematika penulisan.
BAB II TINJAUAN PUSTAKA Bab tinjauan pustaka ini meliputi landasan teori yang berisi tentang pembahasan teori yang digunakan dalam penelitian.
BAB III METODE PENELITIAN Bab ini terdiri dari analisis jenis dan sumber data, variabel penelitian, algoritma penelitian, dan diagram alur.
BAB IV HASIL DAN PEMBAHASAN Bab ini merupakan tahapan pencapaian hasil yang diperoleh dari analisis data yang dilakukan serta penjelasan dari hasil tersebut di bagian pembahasan.
BAB V KESIMPULAN DAN SARAN Bab ini merupakan bagian penutup dalam laporan ini berupa penarikan kesimpulan mengenai hasil analisis dari penelitian serta penyampaian saran oleh penulis.
DAFTAR PUSTAKA
LAMPIRAN
Decision Tree merupakan salah satu metode supervised learning berbasis pohon yang dapat digunakan untuk membentuk aturan prediksi (Fransiska, 2026). Metode ini menyajikan proses pengambilan keputusan dalam bentuk struktur pohon sehingga aturan yang dihasilkan relatif mudah dipahami dan diinterpretasikan. Struktur pohon keputusan terdiri atas root node (simpul akar), internal node (simpul internal), branch (cabang), dan leaf node (simpul terminal). Simpul akar merupakan titik awal pembentukan pohon, simpul internal menunjukkan pengujian variabel, cabang menunjukkan hasil pemisahan, sedangkan simpul terminal memberikan hasil akhir prediksi (Hasanah dkk, 2021).
Berdasarkan jenis variabel responsnya, Decision Tree dibedakan menjadi Classification Tree dan Regression Tree. Classification Tree digunakan apabila variabel respons berbentuk kategorik, seperti klasifikasi status kemiskinan menjadi miskin dan tidak miskin. Sementara itu, Regression Tree digunakan apabila variabel respons berbentuk numerik, seperti prediksi jumlah penduduk miskin atau pendapatan. Perbedaan tersebut menjadi dasar dalam menentukan jenis pohon yang sesuai dengan tujuan analisis (Djuniar & Achmad, 2022).
Classification and Regression Tree (CART) merupakan algoritma pembentukan pohon keputusan yang digunakan untuk permasalahan klasifikasi dan regresi. CART memiliki karakteristik berupa pemisahan biner (binary splitting), yaitu setiap pemisahan simpul menghasilkan dua simpul anak. Proses pemisahan dilakukan secara berulang berdasarkan variabel prediktor yang menghasilkan pembagian data terbaik (Djuniar & Achmad, 2022; Sadat et al., 2023).
Pada Classification Tree, CART menggunakan indeks Gini untuk mengukur tingkat ketidakmurnian kelas pada suatu simpul. Indeks Gini yang lebih kecil menunjukkan bahwa anggota kelas dalam simpul tersebut semakin homogen.Pemisahan terbaik dipilih berdasarkan penurunan ketidakmurnian setelah data dibagi menjadi dua kelompok. Apabila seluruh pengamatan dalam suatu simpul berasal dari kelas yang sama, nilai Gini adalah nol, yang berarti simpul tersebut telah murni. Penggunaan indeks Gini dalam pembentukan pohon klasifikasi CART juga diterapkan dalam penelitian Djuniar dan Achmad (2022).
Sementara itu, pada Regression Tree, variabel respons berbentuk numerik sehingga pemisahan data dilakukan dengan mempertimbangkan besarnya variasi atau kesalahan prediksi dalam kelompok yang terbentuk. Salah satu kriteria yang dapat digunakan adalah jumlah kuadrat galat (Sum of Squared Errors atau SSE). Prediksi pada simpul terminal umumnya berupa rata-rata nilai respons dari pengamatan yang berada di dalam simpul tersebut. Dengan demikian, CART dapat digunakan untuk menghasilkan kelas pada permasalahan klasifikasi maupun nilai prediksi pada permasalahan regresi.
Jenis data yang digunakan di dalam penelitian ini berupa data kuantitatif. Data kuantitatif merupakan data atau informasi yang didapatkan dalam bentuk angka atau numerik. Data yang digunakan dalam penelitian ini merupakan data sekunder yang diperoleh dari dataset BreastCancer pada paket mlbench pada Program RStudio. Dataset ini terdiri atas 699 observasi yang digunakan untuk mengklasifikasikan kondisi tumor payudara ke dalam dua kategori, yaitu benign (jinak) dan malignant (ganas).
Variabel penelitian adalah karakter atau segala sesuatu yang menjadi perhatian dalam suatu penelitian. Pada penelitian ini terdapat 10 variabel prediktor dan 1 variabel respon. Variabel prediktor meliputi Cl.thickness (ketebalan gumpalan sel), Cell.size (keseragaman ukuran sel), Cell.shape (keseragaman bentuk sel), Marg.adhesion (adhesi marginal), Epith.c.size (ukuran sel epitel), Bare.nuclei (inti sel yang tidak tertutup), Bl.cromatin (kromatin lunak), Normal.nucleoli (nukleolus normal), dan Mitoses (aktivitas mitosis). Sementara itu, variabel respon yang digunakan adalah Class, yang menunjukkan kategori kondisi tumor payudara, yaitu benign (jinak) dan malignant (ganas).
Berikut adalah algoritma untuk menyelesaiankan batasan masalah:
1.Mulai.
2.Memuat dataset BreastCancer dan mengidentifikasi variabel serta nilai yang hilang.
3.Melakukan prapemrosesan data.
4.Membagi data menjadi data training dan data testing.
5.Membentuk model Classification Tree.
6.Mengidentifikasi variabel penting dan mengevaluasi model menggunakan confusion matrix, accuracy, sensitivity, dan specificity.
7.Menentukan nilai Complexity Parameter (CP) dan melakukan pruning pada pohon keputusan.
8.Mengevaluasi model setelah pruning serta menghitung nilai AUC berdasarkan kurva ROC.
9.Membandingkan hasil evaluasi model sebelum dan sesudah pruning, kemudian menarik kesimpulan.
10.Selesai.
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ readr 2.2.0
## ✔ ggplot2 4.0.3 ✔ stringr 1.6.0
## ✔ lubridate 1.9.5 ✔ tibble 3.3.1
## ✔ purrr 1.2.2 ✔ tidyr 1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
##
## Attaching package: 'mice'
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following objects are masked from 'package:base':
##
## cbind, rbind
## Loading required package: lattice
##
## Attaching package: 'caret'
##
## The following object is masked from 'package:purrr':
##
## lift
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
##
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
## '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 ...
## Id Cl.thickness Cell.size Cell.shape Marg.adhesion
## Length :699 1 :145 1 :384 1 :353 1 :407
## N.unique :645 5 :130 10 : 67 2 : 59 2 : 58
## N.blank : 0 3 :108 3 : 52 10 : 58 3 : 58
## Min.nchar: 5 4 : 80 2 : 45 3 : 56 10 : 55
## Max.nchar: 8 10 : 69 4 : 40 4 : 44 4 : 33
## 2 : 50 5 : 30 5 : 34 8 : 25
## (Other):117 (Other): 81 (Other): 95 (Other): 63
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses
## 2 :386 1 :402 2 :166 1 :443 1 :579
## 3 : 72 10 :132 3 :165 10 : 61 2 : 35
## 4 : 48 2 : 30 1 :152 3 : 44 3 : 33
## 1 : 47 5 : 30 7 : 73 2 : 36 10 : 14
## 6 : 41 3 : 28 4 : 40 8 : 24 4 : 12
## 5 : 39 (Other): 61 5 : 34 6 : 22 7 : 9
## (Other): 66 NAs : 16 (Other): 69 (Other): 69 (Other): 17
## Class
## benign :458
## malignant:241
##
##
##
##
##
Dataset BreastCancer terdiri atas 699 observasi. Variabel respons Class memiliki dua kategori, yaitu benign sebanyak 458 observasi (sekitar 65,52%) dan malignant sebanyak 241 observasi (sekitar 34,48%). Dengan demikian, kategori benign lebih banyak ditemukan dibandingkan kategori malignant. Data memiliki sembilan variabel prediktor, yaitu Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, dan Mitoses. Variabel-variabel tersebut sebagian besar berbentuk kategori berjenjang dengan nilai 1 sampai 10. Frekuensi kategori yang menonjol antara lain Cell.size kategori 1 sebanyak 384 observasi, Cell.shape kategori 1 sebanyak 353 observasi, dan Bare.nuclei kategori 1 sebanyak 402 observasi yang tercatat. Pada variabel Bare.nuclei juga ditemukan 16 nilai kosong, sedangkan variabel prediktor lainnya tidak memiliki missing value. Karena prediktor berupa kategori berjenjang, ringkasan frekuensi lebih sesuai untuk menjelaskan distribusi awal data dibandingkan rata-rata dan simpangan baku.
# Menghapus variabel ID
BreastCancer <- BreastCancer %>%
select(-Id)
# Variabel prediktor
prediktor <- setdiff(names(BreastCancer), "Class")
# Mengubah tanda ? menjadi NA dan mengatur tipe data
BreastCancer[prediktor] <- lapply(
BreastCancer[prediktor],
function(x) {
x <- as.character(x)
x[x == "?"] <- NA
ordered(x, levels = as.character(1:10))
}
)
BreastCancer$Class <- factor(
BreastCancer$Class,
levels = c("benign", "malignant")
)
# 3. Pengecekan Missing Value
colSums(is.na(BreastCancer))## Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 0 0 0 0 0
## Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## 16 0 0 0 0
## [1] 16
# 4. Imputasi Missing Value dengan MICE
set.seed(234)
metode <- mice::make.method(BreastCancer)
metode["Class"] <- ""
metode[prediktor] <- "polr"
imp <- mice(
BreastCancer,
m = 1,
maxit = 5,
method = metode,
seed = 234,
printFlag = FALSE
)## Warning: Number of logged events: 5
BreastCancer_imp <- complete(imp, 1)
# Memastikan tipe data setelah imputasi
BreastCancer_imp[prediktor] <- lapply(
BreastCancer_imp[prediktor],
function(x) ordered(
as.character(x),
levels = as.character(1:10)
)
)
BreastCancer_imp$Class <- factor(
BreastCancer_imp$Class,
levels = c("benign", "malignant")
)
# Mengecek missing value setelah imputasi
colSums(is.na(BreastCancer_imp))## 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
Variabel Id dihapus karena berfungsi sebagai identitas observasi dan tidak digunakan sebagai prediktor. Tanda ‘?’ pada variabel prediktor diubah menjadi NA, lalu prediktor diatur sebagai ordered factor dengan level 1–10, sedangkan Class diatur sebagai factor dengan kategori benign dan malignant. Pemeriksaan menggunakan colSums(is.na()) menunjukkan 16 missing value pada Bare.nuclei. Nilai kosong ditangani dengan metode MICE menggunakan polr, yaitu metode yang sesuai untuk variabel ordinal. Pengaturan m = 1 menghasilkan satu dataset imputasi dan maxit = 5 menetapkan lima iterasi. Setelah proses tersebut, pengecekan ulang menunjukkan bahwa tidak ada missing value yang tersisa.
# 5. Data Training dan Testing (70:30)
set.seed(234)
train_index <- createDataPartition(
BreastCancer_imp$Class,
p = 0.7,
list = FALSE
)
BreastCancer.train <- BreastCancer_imp[train_index, ]
BreastCancer.test <- BreastCancer_imp[-train_index, ]Data dibagi menggunakan createDataPartition() dengan p = 0,7, sehingga sekitar 70% data digunakan untuk training dan 30% untuk testing. Pembagian berdasarkan variabel Class membantu mempertahankan proporsi kelas pada kedua bagian. Hasilnya, data training terdiri atas 490 observasi, sedangkan data testing digunakan untuk mengevaluasi prediksi pada data yang tidak dipakai dalam pelatihan. Penggunaan set.seed(234) membantu membuat pembagian data dapat diulang.
# 6. Classification Tree
fit.tree <- rpart(
Class ~ .,
data = BreastCancer.train,
method = "class",
cp = 0.01
)
fit.tree## n= 490
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 490 169 benign (0.65510204 0.34489796)
## 2) Cell.size=1,2 309 11 benign (0.96440129 0.03559871)
## 4) Bare.nuclei=1,2,3,4,5 302 5 benign (0.98344371 0.01655629) *
## 5) Bare.nuclei=6,7,8,9,10 7 1 malignant (0.14285714 0.85714286) *
## 3) Cell.size=3,4,5,6,7,8,9,10 181 23 malignant (0.12707182 0.87292818)
## 6) Bare.nuclei=1 22 8 benign (0.63636364 0.36363636)
## 12) Cell.size=1,2,3 12 0 benign (1.00000000 0.00000000) *
## 13) Cell.size=4,5,6,7,8,9,10 10 2 malignant (0.20000000 0.80000000) *
## 7) Bare.nuclei=2,3,4,5,6,7,8,9,10 159 9 malignant (0.05660377 0.94339623) *
# Visualisasi pohon
rpart.plot(
fit.tree,
type = 2,
extra = 104,
fallen.leaves = TRUE,
main = "Classification Tree - BreastCancer"
)Berdasarkan plot, pemisahan pertama menggunakan Cell.size. Observasi dengan Cell.size kategori 1 dan 2 lebih banyak masuk ke cabang benign, sedangkan kategori lainnya lebih banyak mengarah ke malignant. Pemisahan berikutnya menggunakan Bare.nuclei, dan pada salah satu cabang Cell.size digunakan kembali. Setiap simpul menampilkan kelas prediksi, proporsi probabilitas kelas, dan persentase observasi dalam simpul.
## Cell.size Cell.shape Bare.nuclei Bl.cromatin Epith.c.size
## 167.034783 134.398275 130.540856 122.207637 117.003541
## Normal.nucleoli Marg.adhesion Cl.thickness
## 111.884006 5.585455 4.143474
if (!is.null(fit.tree$variable.importance)) {
fit.tree$variable.importance %>%
data.frame() %>%
rownames_to_column(var = "Variable") %>%
rename(Importance = ".") %>%
ggplot(aes(
x = forcats::fct_reorder(Variable, Importance),
y = Importance
)) +
geom_col(fill = "cadetblue") +
coord_flip() +
theme_minimal() +
labs(
title = "Variable Importance",
x = "Variabel",
y = "Importance"
)
}Plot variable importance memperlihatkan kontribusi relatif setiap prediktor dalam pembentukan pohon. Cell.size memiliki nilai tertinggi, sekitar 167,03, diikuti Cell.shape sekitar 134,40 dan Bare.nuclei sekitar 130,54. Bl.cromatin, Epith.c.size, dan Normal.nucleoli juga memiliki nilai yang cukup besar, sedangkan Marg.adhesion dan Cl.thickness memiliki nilai terendah. Hasil tersebut menunjukkan bahwa Cell.size menjadi variabel yang paling berkontribusi pada model yang terbentuk. Nilai importance merupakan ukuran kontribusi prediktif dalam model, bukan bukti bahwa suatu variabel menyebabkan kanker.
# 8. Prediksi dan Evaluasi Model Awal
pred.tree <- predict(
fit.tree,
newdata = BreastCancer.test,
type = "class"
)
confusion_awal <- confusionMatrix(
data = factor(
pred.tree,
levels = c("benign", "malignant")
),
reference = BreastCancer.test$Class,
positive = "malignant"
)
confusion_awal## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 125 0
## malignant 12 72
##
## Accuracy : 0.9426
## 95% CI : (0.9019, 0.97)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8777
##
## Mcnemar's Test P-Value : 0.001496
##
## Sensitivity : 1.0000
## Specificity : 0.9124
## Pos Pred Value : 0.8571
## Neg Pred Value : 1.0000
## Prevalence : 0.3445
## Detection Rate : 0.3445
## Detection Prevalence : 0.4019
## Balanced Accuracy : 0.9562
##
## 'Positive' Class : malignant
##
Model awal digunakan untuk memprediksi kelas pada data testing. Hasilnya dibandingkan dengan kelas aktual, dengan malignant sebagai kelas positif. Model memperoleh accuracy 94,26%, sensitivity 100%, specificity 91,24%, positive predictive value 85,71%, dan negative predictive value 100%. Confusion matrix menunjukkan 125 observasi benign dan 72 observasi malignant diklasifikasikan dengan benar. Sebanyak 12 observasi benign salah diprediksi sebagai malignant, sementara tidak ada observasi malignant yang diprediksi sebagai benign. Hasil ini menunjukkan performa klasifikasi yang tinggi pada data testing, tetapi tetap terbatas pada data yang dianalisis.
##
## Classification tree:
## rpart(formula = Class ~ ., data = BreastCancer.train, method = "class",
## cp = 0.01)
##
## Variables actually used in tree construction:
## [1] Bare.nuclei Cell.size
##
## Root node error: 169/490 = 0.3449
##
## n= 490
##
## CP nsplit rel error xerror xstd
## 1 0.798817 0 1.00000 1.00000 0.062260
## 2 0.035503 1 0.20118 0.26036 0.037446
## 3 0.029586 3 0.13018 0.19527 0.032827
## 4 0.010000 4 0.10059 0.18343 0.031886
## [1] 0.01
CP dipilih dengan mencari nilai xerror terkecil. Dari tabel, xerror terkecil adalah 0,18343 pada CP = 0,01. Plot memperlihatkan penurunan kesalahan relatif yang tajam setelah pemisahan pertama, lalu penurunan yang lebih kecil ketika jumlah pemisahan bertambah. Berdasarkan tabel dan plot, CP = 0,01 dipilih sebagai nilai terbaik di antara kandidat yang tersedia.
## n= 490
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 490 169 benign (0.65510204 0.34489796)
## 2) Cell.size=1,2 309 11 benign (0.96440129 0.03559871)
## 4) Bare.nuclei=1,2,3,4,5 302 5 benign (0.98344371 0.01655629) *
## 5) Bare.nuclei=6,7,8,9,10 7 1 malignant (0.14285714 0.85714286) *
## 3) Cell.size=3,4,5,6,7,8,9,10 181 23 malignant (0.12707182 0.87292818)
## 6) Bare.nuclei=1 22 8 benign (0.63636364 0.36363636)
## 12) Cell.size=1,2,3 12 0 benign (1.00000000 0.00000000) *
## 13) Cell.size=4,5,6,7,8,9,10 10 2 malignant (0.20000000 0.80000000) *
## 7) Bare.nuclei=2,3,4,5,6,7,8,9,10 159 9 malignant (0.05660377 0.94339623) *
# Visualisasi pohon setelah pruning
rpart.plot(
pruned.tree,
type = 2,
extra = 104,
fallen.leaves = TRUE,
main = "Pruned Classification Tree"
)Pruning dilakukan menggunakan prune() dengan CP terbaik sebesar 0,01. Tujuannya menyederhanakan pohon dengan mengurangi cabang yang tidak memberi perbaikan kesalahan yang memadai. Plot setelah pruning menunjukkan struktur yang sama dengan pohon awal karena CP yang dipilih sama dengan nilai CP saat model awal dibangun. Oleh sebab itu, aturan klasifikasi dan variabel pemisah utama tetap sama.
# 11. Prediksi dan Evaluasi Setelah Pruning
pred.prune <- predict(
pruned.tree,
newdata = BreastCancer.test,
type = "class"
)
confusion_pruning <- confusionMatrix(
data = factor(
pred.prune,
levels = c("benign", "malignant")
),
reference = BreastCancer.test$Class,
positive = "malignant"
)
confusion_pruning## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 125 0
## malignant 12 72
##
## Accuracy : 0.9426
## 95% CI : (0.9019, 0.97)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8777
##
## Mcnemar's Test P-Value : 0.001496
##
## Sensitivity : 1.0000
## Specificity : 0.9124
## Pos Pred Value : 0.8571
## Neg Pred Value : 1.0000
## Prevalence : 0.3445
## Detection Rate : 0.3445
## Detection Prevalence : 0.4019
## Balanced Accuracy : 0.9562
##
## 'Positive' Class : malignant
##
Model setelah pruning dievaluasi kembali pada data testing. Hasilnya sama dengan model awal, yaitu accuracy 94,26%, sensitivity 100%, dan specificity 91,24%. Kesamaan tersebut menunjukkan bahwa pruning dengan CP = 0,01 tidak mengubah struktur pohon maupun hasil prediksi pada data testing.
# 12. ROC dan AUC Setelah Pruning
prob.prune <- predict(
pruned.tree,
newdata = BreastCancer.test,
type = "prob"
)
roc_prune <- pROC::roc(
response = BreastCancer.test$Class,
predictor = prob.prune[, "malignant"],
levels = c("benign", "malignant"),
direction = "<",
quiet = TRUE
)
# Kurva ROC
plot(
roc_prune,
col = "blue",
lwd = 2,
main = "ROC Curve - Pruned Classification Tree"
)## Area under the curve: 0.9627
## [1] 0.9626926
Kurva ROC dibuat berdasarkan probabilitas prediksi kelas malignant. Kurva ini menggambarkan kemampuan model membedakan kelas pada berbagai ambang probabilitas. Kurva biru yang mendekati sudut kiri atas menunjukkan kemampuan diskriminasi yang baik, sedangkan garis diagonal menjadi acuan performa tebakan acak. Nilai AUC yang diperoleh adalah 0,9627. Nilai yang mendekati 1 menunjukkan kemampuan model yang sangat baik dalam membedakan kelas benign dan malignant pada data testing.
# 11. Prediksi dan Evaluasi Setelah Pruning
pred.prune <- predict(
pruned.tree,
newdata = BreastCancer.test,
type = "class"
)
confusion_pruning <- confusionMatrix(
data = factor(
pred.prune,
levels = c("benign", "malignant")
),
reference = BreastCancer.test$Class,
positive = "malignant"
)
confusion_pruning## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 125 0
## malignant 12 72
##
## Accuracy : 0.9426
## 95% CI : (0.9019, 0.97)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8777
##
## Mcnemar's Test P-Value : 0.001496
##
## Sensitivity : 1.0000
## Specificity : 0.9124
## Pos Pred Value : 0.8571
## Neg Pred Value : 1.0000
## Prevalence : 0.3445
## Detection Rate : 0.3445
## Detection Prevalence : 0.4019
## Balanced Accuracy : 0.9562
##
## 'Positive' Class : malignant
##
Model sebelum dan setelah pruning memiliki hasil yang identik: accuracy 94,26%, sensitivity 100%, specificity 91,24%, dan AUC 0,9627. Hal ini konsisten dengan struktur pohon yang tidak berubah setelah pruning. Secara keseluruhan, model menunjukkan performa klasifikasi yang tinggi pada dataset ini, dengan Cell.size dan Bare.nuclei sebagai variabel pemisah utama. Hasil ini hanya menggambarkan performa pada dataset dan pembagian training-testing yang digunakan, bukan sebagai pengganti diagnosis medis.
Berdasarkan hasil analisis Classification Tree pada dataset BreastCancer dapat disimpulkan bahwa model berhasil mengklasifikasikan data ke dalam kategori benign dan malignant dengan accuracy sebesar 94,26%. Variabel Cell.size menjadi variabel dengan tingkat kepentingan tertinggi, sedangkan Cell.size dan Bare.nuclei menjadi variabel utama dalam pembentukan aturan pemisahan pohon. Penentuan Complexity Parameter (CP) terbaik menghasilkan nilai 0,01, sehingga proses pruning dilakukan menggunakan nilai tersebut. Hasil evaluasi setelah pruning tidak mengalami perubahan, dengan accuracy 94,26%, sensitivity 100%, specificity 91,24%, dan AUC 0,9627. Dengan demikian, model Classification Tree menunjukkan kemampuan klasifikasi dan diskriminasi yang baik pada data yang digunakan, meskipun hasil tersebut terbatas pada dataset dan pembagian data training serta testing dalam analisis ini.
Djuniar, S. P., & Achmad, A. I. (2022). Metode Classification and Regression Trees untuk Pengklasifikasian Faktor-Faktor yang Mempengaruhi Pengangguran Terbuka di Provinsi Jawa Barat Tahun 2020. Bandung Conference Series: Statistics, 2(2).
Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.
Hasanah, M. A., Soim, S., & Handayani, A. S. (2021). Implementasi CRISP-DM Model Menggunakan Metode Decision Tree dengan Algoritma CART untuk Prediksi Curah Hujan Berpotensi Banjir. Journal of Applied Informatics and Computing, 5(2), 103–108.
Hermawan, A. F., Umbara, F. R., & Kasyidi, F. (2022). Prediksi Awal Penyakit Stroke Berdasarkan Rekam Medis menggunakan Metode Algoritma CART (Classification and Regression Tree). MIND (Multimedia Artificial Intelligent Networking Database) Journal, 7(2).
Sadat, M. A., Pujiono, P., Pambudi, A., & Ibad, S. (2023). Comparison of Algorithm Between Classification & Regression Trees and Support Vector Machine in Determining Student Acceptance in State Universities. Jurnal Teknik Informatika (JUTIF), 4(6).