BAB I PENDAHULUAN

1.1 Latar Belakang

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.

1.2 Rumusan Masalah

Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah:

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

1.3 Tujuan

Adapun tujuan penelitian ini yaitu:

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

BAB II TINJAUAN PUSTAKA

2.1 Decision Tree

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).

1. Karakteristik Decision Tree

Decision Tree memiliki beberapa karakteristik yang menjadikannya banyak digunakan dalam analisis data, yaitu (Jollyta dkk., 2023):

  • Mudah diinterpretasikan. Struktur pohon merepresentasikan aturan keputusan secara visual sehingga hasil klasifikasi lebih mudah dipahami oleh pengguna.
  • Tidak memerlukan banyak pengaturan parameter. Pembentukan pohon dapat dilakukan tanpa pengaturan parameter yang kompleks, meskipun beberapa algoritma tetap menyediakan parameter untuk mengendalikan pertumbuhan pohon.
  • Mampu menangani data berdimensi tinggi. Metode ini dapat digunakan pada data yang memiliki banyak atribut atau variabel prediktor.
  • Representasi pengetahuan yang intuitif. Aturan keputusan disajikan dalam bentuk hierarki yang relatif mudah dipahami manusia.
  • Proses klasifikasi relatif cepat. Pembentukan model dan penerapan aturan klasifikasi dapat dilakukan secara efisien pada berbagai jenis data.
  • Memiliki kemampuan klasifikasi yang baik. Model dapat menghasilkan prediksi yang baik apabila struktur pohon sesuai dengan karakteristik data.

2. Struktur Decision Tree

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.

3. Kelebihan Decision Tree

Beberapa kelebihan metode Decision Tree adalah sebagai berikut (Jollyta dkk., 2023):

a. Mudah diinterpretasikan

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.

b. Persiapan data relatif mudah

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.

c. Fleksibel

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.

4. Kekurangan Decision Tree

Selain memiliki kelebihan, Decision Tree juga mempunyai beberapa keterbatasan.

a. Rentan terhadap overfitting

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.

b. Memiliki varians yang tinggi

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.

c. Biaya komputasi dapat meningkat

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.

2.2 Classification Tree

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).

a. Entropy

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.

b. Information Gain

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

c. Gini Index

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) \]

2.3 Regression Tree

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:

  • \(n\) : banyaknya amatan dalam suatu simpul.
  • \(y_i\) : nilai respons aktual pada amatan ke-\(i\).
  • \(\bar{y}\) : rata-rata nilai respons dalam simpul.

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.

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

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

3.2 Variabel Penelitian

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.

3.3 Analisis Data

  1. Memasukkan dataset.
  2. Memeriksa dan menangani missing value.
  3. Membagi data menjadi data latih dan data uji.
  4. Membentuk model klasifikasi Decision Tree.
  5. Memvisualisasikan pohon klasifikasi.
  6. Menganalisis variable importance.
  7. Melakukan prediksi dan evaluasi menggunakan confusion matrix.
  8. Menentukan nilai CP terbaik.
  9. Melakukan pemangkasan pohon (pruning).
  10. Mengevaluasi model setelah pruning menggunakan confusion matrix, kurva ROC, dan AUC.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Import Data

# 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.

4.2 Penanganan Missing Value

#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.

4.3 Splitting Data

#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
dim(BreastCancer.test)
## [1] 209  10
# Menampilkan jumlah data training dan testing
nrow(BreastCancer.train)
## [1] 490
nrow(BreastCancer.test)
## [1] 209
# Menampilkan distribusi kelas pada data training dan testing
table(BreastCancer.train$Class)
## 
##    benign malignant 
##       321       169
table(BreastCancer.test$Class)
## 
##    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

4.4 Pembentukan Model Classification Tree

#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) *
#Visualisasi Tree
rpart.plot(fit.tree)

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.

4.5 Analisis Variabel Importance

#Variable Importance
fit.tree$variable.importance
##       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.

4.6 Prediksi dan Evalusi Model Awal

#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.

4.7 Menetukan CP Terbaik

#Menampilkan Tabel CP
printcp(fit.tree)
## 
## 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
#Menentukan CP Terbaik
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
#Visualisasi CP
plotcp(fit.tree, upper = "splits")

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).

4.8 Melakukan Pruning dan Visualisasi

#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.

4.9 Prediksi dan Evaluasi Model setelah Pruning

#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.

4.10 Evaluasi Akhir

#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.

BAB V PENUTUP

5.1 Kesimpulan

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.

5.2 Saran

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.

DAFTAR PUSTAKA

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.