Machine learning merupakan salah satu komponen penting dalam pengembangan kecerdasan buatan yang memungkinkan sistem komputer mempelajari pola dari data untuk menghasilkan prediksi dan mendukung proses pengambilan keputusan. Kemampuan tersebut memungkinkan sistem mengolah data dalam jumlah besar, mengenali pola, serta meningkatkan ketepatan prediksi berdasarkan proses pembelajaran yang dilakukan. Penerapan machine learning telah berkembang dalam berbagai bidang, seperti pengenalan suara, visi komputer, dan pengambilan keputusan otomatis. Selain itu, machine learning dapat digunakan untuk mengoptimalkan proses kerja dan meningkatkan efisiensi melalui algoritma yang mampu menyesuaikan diri terhadap perubahan data dan kondisi. Oleh karena itu, machine learning memiliki peran penting dalam mendukung inovasi dan perkembangan teknologi modern (Saputri, Firmansyah, & Purnomo, 2025).
Salah satu metode klasifikasi dalam machine learning adalah Decision Tree atau pohon keputusan. Metode ini merepresentasikan proses pengambilan keputusan dalam bentuk struktur pohon yang terdiri atas simpul (node), cabang (branch), dan daun (leaf). Setiap simpul merepresentasikan atribut yang digunakan dalam proses pemisahan data, cabang menunjukkan nilai atau hasil pemisahan berdasarkan atribut tersebut, sedangkan simpul daun menunjukkan kelas atau hasil prediksi. Simpul paling atas pada struktur pohon disebut akar (root). Konsep dasar Decision Tree adalah mengubah data menjadi struktur pohon dan aturan-aturan keputusan yang dapat digunakan untuk menentukan hasil klasifikasi. Metode ini banyak digunakan karena proses pembentukan model relatif cepat dan hasilnya mudah dipahami serta diinterpretasikan. Selain itu, Decision Tree dapat menyederhanakan proses pengambilan keputusan yang kompleks menjadi serangkaian aturan yang lebih sistematis sehingga memudahkan pemahaman terhadap hasil analisis (Tahyudin dkk., 2020).
Dalam praktikum ini, metode Decision Tree diimplementasikan menggunakan bahasa pemrograman R melalui perangkat lunak RStudio. Proses pemodelan dilakukan dengan menerapkan kriteria Entropy dan Information Gain untuk menentukan atribut terbaik dalam pemisahan data. Melalui praktikum ini, mahasiswa diharapkan mampu memahami proses pembentukan pohon keputusan serta menginterpretasikan hasil klasifikasi yang diperoleh.
Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah:
Adapun tujuan penelitian ini yaitu:
Decision Tree atau pohon keputusan merupakan salah satu metode klasifikasi yang populer karena memiliki struktur yang mudah dipahami dan diinterpretasikan. Metode ini menggunakan struktur pohon atau hierarki untuk merepresentasikan proses pengambilan keputusan. Konsep dasarnya adalah mengubah data menjadi pohon keputusan yang terdiri atas serangkaian aturan untuk menentukan hasil klasifikasi (Jollyta dkk., 2023).
Decision Tree memiliki beberapa karakteristik yang menjadikannya banyak digunakan dalam analisis data, yaitu (Jollyta dkk., 2023):
Struktur Decision Tree terdiri atas tiga komponen utama, yaitu (Jollyta dkk., 2023):
| Komponen | Penjelasan |
|---|---|
| Simpul akar (Root Node) | Simpul paling atas yang merepresentasikan atribut pertama yang digunakan untuk memisahkan data. |
| Simpul internal (Internal Node) | Simpul yang merepresentasikan pengujian terhadap suatu atribut. Cabang yang terbentuk menunjukkan hasil dari pengujian tersebut. |
| Simpul daun (Leaf Node) | Simpul akhir yang menunjukkan kelas atau hasil prediksi dari proses klasifikasi. |
Proses pembentukan pohon dimulai dari simpul akar, kemudian dilanjutkan dengan pemisahan data melalui simpul internal hingga mencapai simpul daun. Setiap jalur dari akar menuju daun merepresentasikan aturan keputusan yang dapat digunakan untuk menentukan hasil klasifikasi.
Beberapa kelebihan metode Decision Tree adalah sebagai berikut (Jollyta dkk., 2023):
Hasil pemodelan dapat disajikan dalam bentuk struktur pohon yang menunjukkan tahapan pengambilan keputusan. Bentuk hierarki ini membantu pengguna memahami hubungan antara atribut dan hasil klasifikasi serta mengidentifikasi atribut yang digunakan dalam proses pemisahan data.
Decision Tree dapat digunakan untuk menangani atribut kategoris maupun numerik. Atribut numerik dapat dipisahkan berdasarkan nilai ambang tertentu, sedangkan beberapa algoritma juga menyediakan mekanisme untuk menangani nilai yang hilang. Oleh karena itu, persiapan data yang diperlukan relatif sederhana, bergantung pada algoritma yang digunakan.
Metode Decision Tree dapat diterapkan pada permasalahan klasifikasi maupun regresi. Dalam klasifikasi, model digunakan untuk memprediksi kelas suatu objek, sedangkan dalam regresi, model digunakan untuk memperkirakan nilai numerik berdasarkan atribut yang tersedia.
Selain memiliki kelebihan, Decision Tree juga mempunyai beberapa keterbatasan.
Pohon yang terlalu kompleks dapat menyesuaikan diri secara berlebihan terhadap data pelatihan sehingga menghasilkan prediksi yang kurang baik pada data baru. Permasalahan ini dapat dikurangi melalui pre-pruning, yaitu membatasi pertumbuhan pohon sejak proses pembentukan, atau post-pruning, yaitu menyederhanakan pohon setelah terbentuk.
Perubahan kecil pada data pelatihan dapat menghasilkan struktur pohon yang berbeda. Kondisi ini dapat memengaruhi kestabilan model dan hasil prediksi. Salah satu pendekatan untuk mengurangi varians adalah bagging, yaitu menggabungkan prediksi dari beberapa model yang dibangun menggunakan sampel data yang berbeda.
Pada data berukuran besar atau dengan banyak atribut, proses pencarian pemisahan terbaik dapat memerlukan waktu dan sumber daya komputasi yang lebih besar. Besarnya biaya komputasi bergantung pada ukuran data, kompleksitas pohon, dan algoritma yang digunakan.
Classification Tree adalah Decision Tree yang digunakan untuk memecahkan masalah klasifikasi. Dalam Classification Tree, variabel target atau dependen merupakan variabel kategorikal. Setiap cabang pada pohon Decision Tree merepresentasikan suatu keputusan yang dapat menghasilkan prediksi kelas atau label pada data yang diberikan (Junaidi dkk., 2024).
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 (Fransiska, 2026).
Entropy digunakan untuk mengukur tingkat ketidakpastian atau ketidakmurnian kelas dalam suatu simpul. Semakin kecil nilai Entropy, semakin homogen simpul tersebut. Entropy dirumuskan sebagai (Fransiska, 2026):
\[ \mathit{Entropy}(t) = -\sum_{k=1}^{K} p_k \log_2(p_k) \]
dengan \(t\) adalah node, \(k\) adalah indeks kelas ke-\(k\), \(k = 1,2,3,\ldots,K\) dan \(p_k\) merupakan proporsi observasi dari kelas ke-\(k\) dalam node. Andaikan memiliki sebuah dataset \(D\) yang terdiri dari dua kelas (Ya atau Tidak) dengan persentase Ya adalah \(p_1\) dan persentase Tidak adalah \(p_2\) maka
\[ p_1 + p_2 = 1 \]
\[ E(D) = -p_1 \log_2 p_1 - p_2 \log_2 p_2 \]
Semakin kecil nilai Entropy, semakin homogen data dalam suatu simpul. Sebaliknya, nilai Entropy semakin besar apabila proporsi kelas dalam simpul semakin seimbang. Jika seluruh amatan dalam suatu simpul berasal dari satu kelas yang sama, maka nilai Entropy sama dengan 0.
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:
\[ IG = E(D) - \sum_{j=1}^{J} \frac{|D_j|}{|D|} E(D_j) \]
Jika data hanya dibagi menjadi dua bagian, yaitu \(D_1\) dan \(D_2\) maka rumusnya dapat ditulis sebagai:
\[ IG = E(D) - \left[ \frac{|D_1|}{|D|} E(D_1) + \frac{|D_2|}{|D|} E(D_2) \right] \]
dengan:
| Notasi | Keterangan |
|---|---|
| \(E(D)\) | Entropy data sebelum pemisahan (split) |
| \(E(D_j)\) | Entropy data hasil pemisahan (split) ke-\(j\) |
| \(\lvert D_j \rvert\) | banyaknya amatan pada bagian ke-\(j\) |
| \(\lvert D \rvert\) | banyaknya seluruh amatan |
Gini Index 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:
\[ \mathit{Gini}(t) = 1 - \sum_{k=1}^{K} p_k^2 \]
Jika dataset \(D\) dipartisi menjadi dua bagian \(D_1\) dan \(D_2\), maka nilai Gini setelah pemisahan dihitung menggunakan rata-rata terboboti:
\[ \mathit{Gini}_{split} = \frac{|D_1|}{|D|} \mathit{Gini}(D_1) + \frac{|D_2|}{|D|} \mathit{Gini}(D_2) \]
Regression Tree adalah Decision Tree yang digunakan untuk memecahkan masalah regresi. Dalam Regression Tree, variabel target atau dependen merupakan variabel kontinu. Setiap cabang pada pohon Decision Tree merepresentasikan suatu keputusan yang dapat menghasilkan prediksi nilai kontinu pada data yang diberikan (Junaidi dkk., 2024).
Mean Square Error (MSE) merupakan salah satu ukuran yang digunakan untuk menilai hasil pemisahan pada Decision Tree regresi. MSE mengukur rata-rata kuadrat selisih antara nilai respons aktual dan rata-rata nilai respons dalam suatu simpul. Semakin kecil nilai MSE, semakin kecil variasi nilai respons di dalam simpul tersebut.
Secara matematis, MSE dirumuskan sebagai berikut (Fransiska, 2026):
\[ MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i-\bar{y})^2 \]
Keterangan:
Pemisahan data dipilih apabila menghasilkan simpul-simpul dengan nilai MSE yang lebih kecil. Dengan demikian, amatan yang berada dalam satu simpul memiliki nilai respons yang semakin mirip sehingga simpul tersebut menjadi lebih homogen.
Jenis data yang digunakan dalam praktikum ini terdiri atas data kategorik dan numerik. Data kategorik merupakan data yang menunjukkan kelompok atau kategori tertentu untuk membedakan karakteristik suatu objek, sedangkan data numerik merupakan data yang dinyatakan dalam bentuk angka dan dapat digunakan dalam perhitungan matematis. Sumber data yang digunakan dalam praktikum ini adalah data sekunder, yaitu data yang telah tersedia sebelumnya dan dimanfaatkan untuk memenuhi kebutuhan analisis. Data sekunder yang digunakan berupa dataset BreastCancer yang tersedia dalam pemrograman R dan terdiri atas 699 observasi serta 11 variabel
Variabel penelitian merupakan karakteristik atau atribut yang menjadi
objek pengamatan dalam suatu penelitian. Pada praktikum ini, dataset
BreastCancer terdiri atas 11 variabel, yaitu satu variabel
identitas, sembilan variabel prediktor, dan satu variabel target.
Variabel Class berperan sebagai variabel target bertipe
kategorik yang terdiri atas dua kelas, yaitu benign (jinak) dan
malignant (ganas). Sembilan variabel prediktor meliputi
Cl.thickness, Cell.size,
Cell.shape, Marg.adhesion,
Epith.c.size, Bare.nuclei,
Bl.cromatin, Normal.nucleoli, dan
Mitoses. Variabel Cl.thickness,
Cell.size, Cell.shape,
Marg.adhesion, dan Epith.c.size bertipe
kategorik ordinal (ordered factor), sedangkan
Bare.nuclei, Bl.cromatin,
Normal.nucleoli, dan Mitoses bertipe kategorik
(factor). Sementara itu, variabel Id bertipe
karakter dan berfungsi sebagai identitas setiap pengamatan sehingga
tidak digunakan sebagai prediktor dalam pemodelan.
# Library
library(dplyr)
library(tidyverse)
library(rpart)
library(caret)
library(rpart.plot)
library(ROCR)
library(ISLR)
library(mlbench)
library(mice)
library(yardstick)
library(Metrics)
#Data
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 ...
Pada tahap awal analisis, dilakukan pemanggilan beberapa
library yang diperlukan untuk proses pengolahan data,
pembentukan model, visualisasi, dan evaluasi klasifikasi.
Package dplyr dan tidyverse digunakan
untuk manipulasi data, sedangkan rpart berfungsi membentuk
model klasifikasi Decision Tree. Selanjutnya,
caret mendukung proses pemodelan dan evaluasi, sementara
rpart.plot digunakan untuk memvisualisasikan pohon
klasifikasi. Package ROCR digunakan untuk mengevaluasi
kinerja model melalui kurva ROC dan nilai AUC. Selain itu,
mlbench menyediakan dataset BreastCancer,
mice mendukung penanganan missing value,
yardstick membantu menghitung metrik evaluasi klasifikasi,
Metrics menyediakan fungsi perhitungan metrik kesalahan,
dan ISLR menyediakan dataset serta fungsi
pendukung analisis statistik dan pembelajaran mesin.
Selanjutnya, dataset BreastCancer dipanggil menggunakan
fungsi data(). Berdasarkan hasil, dataset tersebut
terdiri atas 699 pengamatan dan 11 variabel, yaitu Id,
Cl.thickness, Cell.size,
Cell.shape, Marg.adhesion,
Epith.c.size, Bare.nuclei,
Bl.cromatin, Normal.nucleoli,
Mitoses, dan Class. Variabel
Class menjadi target klasifikasi dengan dua kategori, yaitu
benign dan malignant. Sementara itu, Id merupakan identitas
pengamatan yang dalam kasus ini tidak akan digunakan, sedangkan sembilan
variabel lainnya berperan sebagai prediktor.
#Menghapus variabel ID
BreastCancer = BreastCancer[,-1]
#Pemeriksaan 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
#Penanganan Missing Value menggunakan mice
data_mice <- mice(BreastCancer, m = 1, method = "pmm",
seed = 234)##
## iter imp variable
## 1 1 Bare.nuclei
## 2 1 Bare.nuclei
## 3 1 Bare.nuclei
## 4 1 Bare.nuclei
## 5 1 Bare.nuclei
BreastCancer <- complete(data_mice)
#Mengubah variabel respons menjadi faktor
BreastCancer$Class = as.factor(BreastCancer$Class)Pada tahap awal, variabel Id dihapus karena hanya berfungsi sebagai
identitas setiap pengamatan dan tidak digunakan dalam pemodelan.
Selanjutnya, dilakukan pemeriksaan missing value menggunakan
fungsi colSums(is.na()). Hasil pemeriksaan menunjukkan
bahwa terdapat 16 nilai hilang pada variabel Bare.nuclei,
sedangkan delapan variabel lainnya tidak memiliki nilai hilang.
Penanganan missing value dilakukan menggunakan metode
Predictive Mean Matching (PMM) melalui package
mice dengan satu proses imputasi (\(m=1\)) dan seed sebesar 234. Metode ini
digunakan untuk mengisi nilai yang hilang berdasarkan nilai prediksi
yang sesuai dari data yang tersedia. Kemudian selanjutnya dilakukan
pengubahan variabel respons Class menjadi tipe factor
agar dapat digunakan dalam pemodelan klasifikasi Decision
Tree.
#Data Training dan Testing
set.seed(234)
train <- createDataPartition(
BreastCancer$Class,
p = 0.7,
list = FALSE)
BreastCancer.train = BreastCancer[train,]
BreastCancer.test = BreastCancer[-train,]
Class.test = BreastCancer$Class[-train]
# Menampilkan ukuran data
dim(BreastCancer.train)## [1] 490 10
## [1] 209 10
## [1] 490
## [1] 209
##
## benign malignant
## 321 169
##
## benign malignant
## 137 72
Pembagian data dilakukan menggunakan fungsi
createDataPartition() dengan proporsi 70% untuk data latih
(training data) dan 30% untuk data uji (testing data).
Hasil pembagian menunjukkan bahwa data latih terdiri atas 490 pengamatan
dan 10 variabel, sedangkan data uji terdiri atas 209 pengamatan dan 10
variabel. Pada data latih, terdapat 321 kelas benign dan 169 kelas
malignant. Sementara itu, data uji terdiri atas 137 kelas benign dan 72
kelas malignant
#Classification Tree
fit.tree = rpart(
Class ~ .,
data = BreastCancer.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 309 11 benign (0.96440129 0.03559871)
## 4) Bare.nuclei=1,2,3,5 300 4 benign (0.98666667 0.01333333) *
## 5) Bare.nuclei=4,6,7,8,10 9 2 malignant (0.22222222 0.77777778) *
## 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) *
Tahap selanjutnya, dibentuk model Decision Tree menggunakan fungsi
rpart() dengan metode klasifikasi dan nilai Complexity
Parameter (CP) sebesar 0,008. Berdasarkan hasil pemodelan, variabel
Cell.size menjadi pemisah pada akar pohon (root
node), kemudian variabel Bare.nuclei digunakan pada
percabangan berikutnya. Model tersebut menghasilkan empat simpul akhir
(terminal node) yang digunakan untuk menentukan kelas prediksi,
yaitu benign atau malignant.
## Cell.size Cell.shape Bare.nuclei Bl.cromatin Epith.c.size
## 167.034783 134.398275 133.737946 122.207637 117.003541
## Normal.nucleoli Marg.adhesion Cl.thickness
## 114.153425 5.585455 3.404128
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 Classification Tree")
Hasil analisis variable importance menunjukkan bahwa
Cell.size memiliki nilai kepentingan tertinggi sebesar
167,03, diikuti oleh Cell.shape sebesar 134,40 dan
Bare.nuclei sebesar 133,74. Hal ini menunjukkan bahwa
ketiga variabel tersebut memberikan kontribusi relatif besar dalam
proses klasifikasi kanker payudara. Sementara itu,
Marg.adhesion dan Cl.thickness memiliki nilai
kepentingan terendah, masing-masing sebesar 5,59 dan 3,40, sehingga
kontribusinya relatif lebih kecil dibandingkan variabel lainnya. Oleh
karena itu, Cell.size menjadi variabel yang paling
berpengaruh dalam proses prediksi berdasarkan model Decision
Tree yang terbentuk.
#Prediksi
pred.tree = predict(
fit.tree,
BreastCancer.test,
type = "class"
)
table(
pred.tree,
Class.test)## Class.test
## pred.tree benign malignant
## benign 122 0
## malignant 15 72
#Confusion Matrix
matriks_kesalahan <- confusionMatrix(
pred.tree,
BreastCancer.test$Class)
matriks_kesalahan## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 122 0
## malignant 15 72
##
## Accuracy : 0.9282
## 95% CI : (0.8844, 0.9593)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8486
##
## Mcnemar's Test P-Value : 0.0003006
##
## Sensitivity : 0.8905
## Specificity : 1.0000
## Pos Pred Value : 1.0000
## Neg Pred Value : 0.8276
## Prevalence : 0.6555
## Detection Rate : 0.5837
## Detection Prevalence : 0.5837
## Balanced Accuracy : 0.9453
##
## 'Positive' Class : benign
##
matriks_kesalahan <- confusionMatrix(
pred.tree,
BreastCancer.test$Class,
positive = "malignant")
matriks_kesalahan## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 122 0
## malignant 15 72
##
## Accuracy : 0.9282
## 95% CI : (0.8844, 0.9593)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8486
##
## Mcnemar's Test P-Value : 0.0003006
##
## Sensitivity : 1.0000
## Specificity : 0.8905
## Pos Pred Value : 0.8276
## Neg Pred Value : 1.0000
## Prevalence : 0.3445
## Detection Rate : 0.3445
## Detection Prevalence : 0.4163
## Balanced Accuracy : 0.9453
##
## 'Positive' Class : malignant
##
Hasil prediksi pada data uji menunjukkan bahwa model Decision Tree berhasil mengklasifikasikan 194 dari 209 pengamatan dengan benar. Berdasarkan confusion matrix, sebanyak 122 pengamatan kelas benign dan 72 pengamatan kelas malignant diklasifikasikan secara tepat, sedangkan 15 pengamatan kelas benign salah diklasifikasikan sebagai malignant. Model tidak melakukan kesalahan dalam mengklasifikasikan pengamatan malignant sebagai benign.
Berdasarkan hasil evaluasi dengan menetapkan kelas malignant sebagai kelas positif, diperoleh nilai accuracy sebesar 92,82%, sensitivity sebesar 100%, dan specificity sebesar 89,05%. Nilai accuracy menunjukkan bahwa model mampu mengklasifikasikan sebagian besar pengamatan dengan benar. Nilai sensitivity sebesar 100% menunjukkan bahwa seluruh pengamatan malignant pada data uji berhasil dikenali, sedangkan specificity sebesar 89,05% menunjukkan kemampuan model dalam mengidentifikasi kelas benign. Oleh karena itu, model awal memiliki kinerja klasifikasi yang baik, meskipun masih terdapat 15 pengamatan benign yang diprediksi sebagai malignant.
##
## Classification tree:
## rpart(formula = Class ~ ., data = BreastCancer.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.035503 1 0.20118 0.27811 0.038571
## 3 0.029586 3 0.13018 0.18343 0.031886
## 4 0.008000 4 0.10059 0.17160 0.030908
## [1] 0.008
## [1] 0.008
Langkah selanjutnya, penentuan nilai CP terbaik dilakukan berdasarkan
nilai kesalahan validasi silang terkecil pada tabel CP. Hasil
menunjukkan bahwa nilai terkecil sebesar 0,17160 diperoleh pada CP
sebesar 0,008 dengan empat percabangan. Oleh karena itu, nilai CP
terbaik yang diperoleh adalah 0,008 dan selanjutnya digunakan dalam
proses pemangkasan pohon (pruning).
#Pruning
pruned.tree <- prune(fit.tree, cp = bestcp)
#Visualisasi Tree setelah Pruning
rpart.plot(pruned.tree)
Pemangkasan pohon (pruning) dilakukan dengan menggunakan nilai
CP terbaik sebesar 0,008. Hasilnya menunjukkan bahwa struktur pohon
klasifikasi tetap sama seperti model awal karena nilai CP terbaik yang
diperoleh sama dengan nilai CP saat pembentukan model. Oleh karena itu,
proses pruning tidak mengubah struktur maupun menyederhanakan
pohon klasifikasi.
#Prediksi setelah Pruning
pred.prune = predict(
pruned.tree,
BreastCancer.test,
type = "class")
table(pred.prune, Class.test)## Class.test
## pred.prune benign malignant
## benign 122 0
## malignant 15 72
#Confusion Matrix setelah Pruning
matriks_kesalahan <- confusionMatrix(
pred.prune,
BreastCancer.test$Class)
matriks_kesalahan## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 122 0
## malignant 15 72
##
## Accuracy : 0.9282
## 95% CI : (0.8844, 0.9593)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8486
##
## Mcnemar's Test P-Value : 0.0003006
##
## Sensitivity : 0.8905
## Specificity : 1.0000
## Pos Pred Value : 1.0000
## Neg Pred Value : 0.8276
## Prevalence : 0.6555
## Detection Rate : 0.5837
## Detection Prevalence : 0.5837
## Balanced Accuracy : 0.9453
##
## 'Positive' Class : benign
##
matriks_kesalahan <- confusionMatrix(
pred.prune,
BreastCancer.test$Class,
positive = "malignant")
matriks_kesalahan## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 122 0
## malignant 15 72
##
## Accuracy : 0.9282
## 95% CI : (0.8844, 0.9593)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8486
##
## Mcnemar's Test P-Value : 0.0003006
##
## Sensitivity : 1.0000
## Specificity : 0.8905
## Pos Pred Value : 0.8276
## Neg Pred Value : 1.0000
## Prevalence : 0.3445
## Detection Rate : 0.3445
## Detection Prevalence : 0.4163
## Balanced Accuracy : 0.9453
##
## 'Positive' Class : malignant
##
Hasil prediksi dan evaluasi model setelah pruning menunjukkan bahwa model berhasil mengklasifikasikan 194 dari 209 pengamatan dengan benar. Berdasarkan confusion matrix, sebanyak 122 pengamatan kelas benign dan 72 pengamatan kelas malignant diklasifikasikan secara tepat, sedangkan 15 pengamatan benign diprediksi sebagai malignant. Tidak terdapat pengamatan malignant yang salah diklasifikasikan sebagai benign.
Berdasarkan evaluasi dengan kelas malignant sebagai kelas positif, diperoleh nilai accuracy sebesar 92,82%, sensitivity sebesar 100%, dan specificity sebesar 89,05%. Hasil ini menunjukkan bahwa model mampu mengenali seluruh pengamatan malignant pada data uji, meskipun masih terdapat beberapa pengamatan benign yang salah diklasifikasikan. Nilai evaluasi setelah pruning juga sama dengan model awal karena proses pemangkasan tidak mengubah struktur pohon klasifikasi.
#Probabilitas Prediksi
breastcancer_preds_cart <- bind_cols(
predict(
pruned.tree,
newdata = BreastCancer.test,
type = "prob"),
predicted = predict(
pruned.tree,
newdata = BreastCancer.test,
type = "class"),
actual = BreastCancer.test$Class)
breastcancer_preds_cart## # A tibble: 209 × 4
## benign malignant predicted actual
## <dbl> <dbl> <fct> <fct>
## 1 0.987 0.0133 benign benign
## 2 0.222 0.778 malignant benign
## 3 0.987 0.0133 benign benign
## 4 0.987 0.0133 benign benign
## 5 0.0566 0.943 malignant malignant
## 6 0.987 0.0133 benign benign
## 7 0.987 0.0133 benign benign
## 8 0.987 0.0133 benign benign
## 9 0.0566 0.943 malignant malignant
## 10 0.2 0.8 malignant malignant
## # ℹ 199 more rows
#Confusion Matrix
breastcancer_cm_cart <- confusionMatrix(
breastcancer_preds_cart$predicted,
reference = breastcancer_preds_cart$actual,
positive = "malignant")
breastcancer_cm_cart## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 122 0
## malignant 15 72
##
## Accuracy : 0.9282
## 95% CI : (0.8844, 0.9593)
## No Information Rate : 0.6555
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.8486
##
## Mcnemar's Test P-Value : 0.0003006
##
## Sensitivity : 1.0000
## Specificity : 0.8905
## Pos Pred Value : 0.8276
## Neg Pred Value : 1.0000
## Prevalence : 0.3445
## Detection Rate : 0.3445
## Detection Prevalence : 0.4163
## Balanced Accuracy : 0.9453
##
## 'Positive' Class : malignant
##
#AUC
mdl_auc <- Metrics::auc(
actual =
breastcancer_preds_cart$actual == "malignant",
predicted =
breastcancer_preds_cart$malignant)
mdl_auc## [1] 0.9629461
#ROC Curve
yardstick::roc_curve(
breastcancer_preds_cart,
actual,
malignant
) %>%
autoplot() +
labs(
title = "ROC Curve",
subtitle =
paste0(
"AUC = ",
round(mdl_auc, 4)))
Hasil evaluasi akhir model Decision Tree setelah
pruning menunjukkan nilai accuracy sebesar 92,82%,
sensitivity sebesar 100%, dan specificity sebesar
89,05%. Selain itu, diperoleh nilai AUC sebesar 0,9629, yang menunjukkan
bahwa model memiliki kemampuan sangat baik dalam membedakan kelas benign
dan malignant berdasarkan probabilitas prediksi. Nilai
sensitivity sebesar 100% menunjukkan bahwa seluruh pengamatan
malignant pada data uji berhasil dikenali, sedangkan nilai
specificity sebesar 89,05% menunjukkan bahwa sebagian besar
pengamatan benign dapat diidentifikasi dengan benar.
Berdasarkan hasil kurva ROC dan nilai AUC tersebut, model memiliki kemampuan diskriminasi yang sangat baik. Namun, masih terdapat 15 pengamatan benign yang salah diklasifikasikan sebagai malignant. Secara keseluruhan, model menghasilkan kinerja klasifikasi yang baik. Hasil evaluasi ini juga sama dengan model awal karena proses pruning tidak mengubah struktur pohon klasifikasi.
Decision Tree merupakan metode klasifikasi yang membentuk struktur pohon berdasarkan pemisahan data secara bertahap. Pada metode CART (Classification and Regression Tree), pemisahan dilakukan untuk memperoleh kelompok data yang semakin homogen berdasarkan kelas target. Struktur pohon terdiri atas root node, internal node, dan terminal node yang menghasilkan prediksi kelas berdasarkan aturan pemisahan tertentu.
Model Classification Tree dibangun menggunakan algoritma CART dengan menentukan variabel target dan variabel prediktor yang digunakan dalam klasifikasi. Proses pembentukan model dilakukan melalui pemisahan data secara bertahap berdasarkan kriteria tertentu hingga menghasilkan simpul akhir (terminal node) yang digunakan untuk menentukan kelas prediksi. Selanjutnya, model dapat dievaluasi menggunakan data uji untuk mengetahui kinerja klasifikasinya. Apabila diperlukan, pemangkasan pohon (pruning) dapat dilakukan untuk menyederhanakan struktur pohon dan mengurangi risiko overfitting.
Berdasarkan hasil batasan masalah, model Decision Tree setelah pruning menghasilkan nilai accuracy sebesar 92,82%, sensitivity sebesar 100%, specificity sebesar 89,05%, dan AUC sebesar 0,9629. Hasil tersebut menunjukkan bahwa model memiliki kemampuan klasifikasi yang sangat baik dalam membedakan kelas benign dan malignant. Meskipun demikian, masih terdapat 15 pengamatan benign yang salah diklasifikasikan sebagai malignant. Hasil evaluasi setelah pruning tetap sama dengan model awal karena proses pemangkasan tidak mengubah struktur pohon klasifikasi.
Dalam melakukan pengolahan data menggunakan RStudio, diperlukan ketelitian dalam menuliskan sintaks dan menjalankan program agar dapat meminimalkan kesalahan serta menghasilkan output yang sesuai. Selain itu, diperlukan pemahaman terhadap konsep dan tahapan analisis agar setiap proses yang dilakukan dapat diinterpretasikan dengan tepat. Penulisan laporan juga perlu memperhatikan kaidah KBBI, penggunaan huruf tebal, dan format penulisan yang konsisten agar laporan tersusun dengan baik dan mudah dipahami.
Fransiska, H. (2026). Modul Machine Learning and Modern Prediction. Bengkulu: Universitas Bengkulu.
Jollyta, D., Prihandoko, Hajjah, A., Haerani, E., & Siddik, M. (2023). Algoritma Klasifikasi untuk Pemula Solusi Python dan RapidMiner. Sleman: Penerbit Deepbulish Digital.
Junaidi, S., Beno, I. S., Farkhan, M., Supartha, I. K., Pasaribu, A. A., Kmurawak, R. M., . . . Rizal, A. A. (2024). Buku Ajar Machine Learning. Jambi: PT. Sonpedia Publishing Indonesia.
Saputri, T. A., Firmansyah, A. U., & Purnomo, H. (2025). Menguasai Teknik Dasar Machine Learning. Banyumas: Wawasan Ilmu.
Tahyudin, I., Jaya, F. I., Susli, A., Syafi’ah, N., Alfathani, A. M., & Purwati, M. (2020). Pengenalan Machine Learning menggunakan Jupyter Notebook. Banyumas: Zahira Media Publisher.