BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Analisis data merupakan proses pengolahan informasi untuk mengenali pola, memahami hubungan antarvariabel, dan mendukung pengambilan keputusan. Salah satu tujuan analisis data adalah membangun model prediksi berdasarkan sejumlah variabel prediktor. Berdasarkan jenis variabel responsnya, pemodelan prediksi dapat dibedakan menjadi klasifikasi dan regresi. Klasifikasi digunakan untuk memprediksi respons berupa kategori, sedangkan regresi digunakan untuk memprediksi respons berupa nilai numerik.

Decision Tree merupakan model prediksi yang bersifat supervised, model ini membentuk struktur pohon yang terdiri dari node-node yang merepresentasikan keputusan dan cabang-cabang yang merepresentasikan konsekuensi dari sebuah keputusan (Ramadhon, Ogi, dan Agung, 2024). Salah satu algoritma untuk membangun Decision Tree adalah CART (Classification and Regression Trees). Pada permasalahan klasifikasi, CART menghasilkan Classification Tree dengan memilih pemisahan yang mengurangi ketidakmurnian kelas, misalnya berdasarkan indeks Gini. Sementara itu, pada permasalahan regresi, CART menghasilkan Regression Tree dengan memilih pemisahan yang mengurangi jumlah kuadrat galat (Nasrullah, 2021).

Berdasarkan uraian tersebut, pembahasan mengenai Decision Tree menggunakan algoritma CART diperlukan untuk memahami pemodelan klasifikasi dan regresi secara menyeluruh. Laporan ini akan membahas konsep dasar, perbedaan kriteria pemisahan, serta tahapan pembangunan model Classification Tree dan Regression Tree menggunakan program R. Melalui pembahasan ini, diharapkan proses pembentukan pohon, interpretasi hasil, dan evaluasi kemampuan prediksi dapat dipahami secara sistematis sesuai dengan jenis variabel respons yang digunakan.

1.2 Rumusan Masalah

  1. Bagaimana konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).

  2. Bagaimana membangun model Classification Tree menggunakan algoritma CART?

1.3 Tujuan

  1. Menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).

  2. Membangun model Classification Tree menggunakan algoritma CART?

BAB II TINJAUAN PUSTAKA

2.1 Machine learning

Machine learning merupakan salah satu cabang kecerdasan buatan (artificial intelligence/AI) yang mempelajari pengembangan algoritma agar komputer dapat belajar dari data, lalu menghasilkan prediksi atau keputusan tanpa perlu diprogram secara eksplisit. Tujuan utamanya adalah membangun sistem yang kinerjanya terus membaik seiring bertambahnya pengalaman, yang dalam hal ini berupa data (Hartono 2021). Secara umum, machine learning dipahami sebagai bidang studi yang membekali sistem komputer dengan kemampuan untuk belajar dan memperbaiki kinerjanya dari pengalaman, tanpa harus diprogram secara khusus untuk setiap tugas. Inti dari machine learning terletak pada kemampuan adaptif sistem untuk meningkatkan performanya seiring data yang terus berkembang. Machine learning (ML) mencakup bidang yang luas dengan beragam pendekatan untuk menyelesaikan berbagai jenis permasalahan. Berdasarkan cara data digunakan dan cara model belajar, ML dapat dikelompokkan menjadi empat kategori utama, yaitu supervised learning, unsupervised learning, semi-supervised learning, dan reinforcement learning. Setiap kategori memiliki karakteristik, metode, dan penerapan yang berbeda (Bintoro et al. 2024).

2.2 Decision Tree

Decision Tree merupakan struktur pohon yang terdiri dari node-node yang merepresentasikan keputusan dan cabang-cabang yang merepresentasikan konsekuensi dari sebuah keputusan. Decision Tree merupakan model prediksi yang bersifat supervised yang berarti memerlukan training dataset yang perannya menggantikan pengalaman manusia di masa lalu dalam membuat keputusan (Ramadhon, Ogi, dan Agung, 2024). Pada metode ini, data dibagi secara bertahap melalui proses splitting berdasarkan variabel prediktor sehingga terbentuk kelompok-kelompok data yang semakin homogen. setiap percabangan pada pohon menunjukkan aturan pemisahan sedangkan simpul akhir (leaf node) menunjukkan hasil prediksi. Salah satu metode dalam Decision Tree adalah classification and regression tree (cart). cart dapat digunakan untuk dua jenis pemodelan, yaitu klasifikasi untuk memprediksi kategori atau kelas regresi untuk memprediksi nilai numerik. jika variabel respon berupa kategori, pohon yang terbentuk disebut pohon klasifikasi (classification tree), jika variabel respon berupa numerik kontinu disebut pohon regresi (regression tree) (Fransiska, 2026). Decision Tree memiliki beberapa karakteristik, yaitu (Fransiska, 2026):

  1. Mudah dipahami dan diinterpretasikan karena model dapat divisualisasikaan dalam bentuk pohon.

  2. Dapat menggunakan variabel prediktor numerik maupun kategorik.

  3. Membagi data secara bertahap melalui proses splitting sehingga kelompok yang tebentuk semakin homogen.

  4. Dapat digunakan untuk memprediksi kelas pada kasus klasifikasi maupun nilai numerik pada kasus regresi.

  5. Dapat disederhanakan melalui pruning untuk mengurangi kompleksitas pohon dan risiko overvitting.

Algoritma C4.5 yaitu sebuah algoritma yang digunakan untuk membentuk Decision Tree (pohon keputusan). Pohon keputusan merupakan metode klasifikasi dan prediksi yang sangat kuat dan terkenal. Algoritma C4.5 mengkonstruksi pohon keputusan dari data pelatihan, yang berupa kasus-kasus atau record-record (tupel) dalam basis data. Setiap kasus berisikan nilai dari atribut-atribut untuk sebuah kelas. Setiap atribut dapat berisi data diskret atau kontinu (numerik). Algoritma C4.5 juga menangani kasus yang tidak memiliki nilai untuk sebuah atau lebih atribut. Akan tetapi, atribut kelas hanya bertipe diskret dan tidak boleh kosong. Secara umum algoritma C4.5 untuk membangun pohon keputusan adalah sebagai berikut (Nasrullah, 2021):

  1. Pilih atribut sebagai akar

  2. Buat cabang untuk masing-masing nilai

  3. Bagi kasus dalam cabang

  4. Ulangi proses untuk masing-masing cabang sampai semua kasus pada cabang memiliki kelas yang sama.

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data yang digunakan dalam penelitian ini berupa data kuantitatif dan data kualitatif. Data kuantitatif adalah jenis data yang dapat diukur (measurable) atau dihitung secara langsung sebagai variabel angka. Data kualitatif merupakan data yang tidak dapat diukur atau dihitung dengan angka yang bertujuan untuk menjabarkan data analisis secara naratif. Sumber data yang digunakan dalam penelitian ini yaitu data sekunder. Data sekunder adalah data yang diperoleh secara tidak langsung oleh peneliti melainkan melalui prantara. Data sekunder dalam penelitian ini diperoleh dari dari dataset Hitters pada package ISLR Program R.

3.2 Variabel Penelitian

Variabel adalah objek penelitian atau apa yang menjadi titik perhatian. Dalam penelitian ini terdapat beberapa variabel. Variabel penelitian terdiri atas variabel respons dan variabel prediktor. Variabel respons yang digunakan untuk regresi adalah Salary, sedangkan seluruh variabel lainnya digunakan sebagai prediktor. Variabel prediktor tersebut mencakup karakteristik performa pemain, pengalaman bermain, serta kategori liga dan divisi.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan adalah:

  1. Memuat package yang diperlukan serta dataset Hitters ke RStudio.

  2. Memeriksa struktur data dan keberadaan nilai hilang, kemudian menangani nilai hilang menggunakan na.omit().

  3. Membagi setiap dataset menjadi data latih dan data uji secara acak.

  4. Membangun model Regression Tree untuk memprediksi Salary menggunakan algoritma CART.

  5. Memvisualisasikan struktur pohon dan menganalisis variable importance

  6. Melakukan prediksi pada data uji dan mengevaluasi model.

  7. Menentukan nilai complexity parameter (CP) terbaik berdasarkan galat cross-validation terkecil pada data latih.

  8. Melakukan pruning menggunakan CP terbaik dan memvisualisasikan pohon hasil pemangkasan.

  9. Melakukan prediksi dan evaluasi kembali, kemudian membandingkan kinerja model sebelum dan setelah pruning.

  10. Menginterpretasikan hasil analisis dan menarik kesimpulan.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Dataset

#Library
library(dplyr)
## 
## 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
library(tidyverse)
## ── 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
library(rpart)
library(caret)
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(rpart.plot)
library(ROCR)
library(ISLR)
#Data
data("Hitters", package = "ISLR")
data <- Hitters
str(Hitters)
## 'data.frame':    322 obs. of  20 variables:
##  $ AtBat    : int  293 315 479 496 321 594 185 298 323 401 ...
##  $ Hits     : int  66 81 130 141 87 169 37 73 81 92 ...
##  $ HmRun    : int  1 7 18 20 10 4 1 0 6 17 ...
##  $ Runs     : int  30 24 66 65 39 74 23 24 26 49 ...
##  $ RBI      : int  29 38 72 78 42 51 8 24 32 66 ...
##  $ Walks    : int  14 39 76 37 30 35 21 7 8 65 ...
##  $ Years    : int  1 14 3 11 2 11 2 3 2 13 ...
##  $ CAtBat   : int  293 3449 1624 5628 396 4408 214 509 341 5206 ...
##  $ CHits    : int  66 835 457 1575 101 1133 42 108 86 1332 ...
##  $ CHmRun   : int  1 69 63 225 12 19 1 0 6 253 ...
##  $ CRuns    : int  30 321 224 828 48 501 30 41 32 784 ...
##  $ CRBI     : int  29 414 266 838 46 336 9 37 34 890 ...
##  $ CWalks   : int  14 375 263 354 33 194 24 12 8 866 ...
##  $ League   : Factor w/ 2 levels "A","N": 1 2 1 2 2 1 2 1 2 1 ...
##  $ Division : Factor w/ 2 levels "E","W": 1 2 2 1 1 2 1 2 2 1 ...
##  $ PutOuts  : int  446 632 880 200 805 282 76 121 143 0 ...
##  $ Assists  : int  33 43 82 11 40 421 127 283 290 0 ...
##  $ Errors   : int  20 10 14 3 4 25 7 9 19 0 ...
##  $ Salary   : num  NA 475 480 500 91.5 750 70 100 75 1100 ...
##  $ NewLeague: Factor w/ 2 levels "A","N": 1 2 1 2 2 1 1 1 2 1 ...

Dataset Hitters terdiri atas 322 observasi dan 20 variabel, dengan Salary sebagai variabel respons dan 19 variabel lainnya sebagai prediktor.

4.2 Pengecekan dan Penanganan Missing Value

#Mengecek missing value
colSums(is.na(Hitters))   
##     AtBat      Hits     HmRun      Runs       RBI     Walks     Years    CAtBat 
##         0         0         0         0         0         0         0         0 
##     CHits    CHmRun     CRuns      CRBI    CWalks    League  Division   PutOuts 
##         0         0         0         0         0         0         0         0 
##   Assists    Errors    Salary NewLeague 
##         0         0        59         0
sum(is.na(Hitters))
## [1] 59
#Menangani missing value
Hitters.bersih <- na.omit(Hitters)
sum(is.na(Hitters.bersih))
## [1] 0
dim(Hitters.bersih)
## [1] 263  20

Terdapat 59 missing value pada variabel Salary, sedangkan variabel lainnya tidak memiliki missing value. Setelah dilakukan penghapusan menggunakan na.omit(), diperoleh 263 observasi lengkap untuk dianalisis.

4.3 Pembagian Data Training dan Testing

# Split data
set.seed(123)
train <- sample(1:nrow(Hitters.bersih), 200)
Hitters.train <- Hitters.bersih[train, ]
Hitters.test  <- Hitters.bersih[-train, ]

Data dibagi secara acak menjadi 200 observasi training untuk membentuk model dan 63 observasi testing untuk mengevaluasi kemampuan prediksi model. Penggunaan set.seed(123) membuat hasil pembagian data dapat direproduksi.

4.4 Pembentukan dan Visualisasi Model Regression Tree

#Regression Tree
fit.tree = rpart(Salary ~ ., data = Hitters.train, 
                 method="anova", 
                 control = rpart.control(cp = 0, xval = 10))
fit.tree
## n= 200 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##  1) root 200 45421420.000  540.95170  
##    2) CRBI< 310 117  8035020.000  295.80060  
##      4) CAtBat< 1407.5 79  4424320.000  200.57590  
##        8) Walks>=11.5 71   628643.400  177.82630  
##         16) CRuns< 98.5 38    49333.090  113.43420  
##           32) CRuns< 64 21     4985.238   89.80952  
##             64) RBI< 29.5 11     1013.045   78.36364 *
##             65) RBI>=29.5 10      945.900  102.40000 *
##           33) CRuns>=64 17    18148.760  142.61760 *
##         17) CRuns>=98.5 33   240315.500  251.97480  
##           34) Hits>=116.5 12    11780.730  178.54170 *
##           35) Hits< 116.5 21   126849.200  293.93650  
##             70) CRBI< 113.5 7    13337.570  221.80960 *
##             71) CRBI>=113.5 14    58887.500  330.00000 *
##        9) Walks< 11.5 8  3432811.000  402.47910 *
##      5) CAtBat>=1407.5 38  1405095.000  493.76760  
##       10) CHits< 447.5 13   259886.700  391.65380 *
##       11) CHits>=447.5 25   939166.700  546.86670  
##         22) Hits< 106.5 11   317955.900  452.42430 *
##         23) Hits>=106.5 14   446008.900  621.07140 *
##    3) CRBI>=310 83 20442810.000  886.52620  
##      6) Walks< 61 54  4851807.000  664.51500  
##       12) AtBat< 362 23  1613980.000  473.87680  
##         24) Walks< 40.5 16   398677.700  396.19790 *
##         25) Walks>=40.5 7   898085.700  651.42860 *
##       13) AtBat>=362 31  1781766.000  805.95620  
##         26) Errors>=15.5 9   323304.200  645.79370 *
##         27) Errors< 15.5 22  1133147.000  871.47720  
##           54) HmRun< 18.5 14   445588.200  789.70240 *
##           55) HmRun>=18.5 8   430104.400 1014.58300 *
##      7) Walks>=61 29  7973306.000 1299.92600  
##       14) CHmRun< 259.5 22  3221074.000 1166.06100  
##         28) Walks< 68.5 8   689908.700  883.22910 *
##         29) Walks>=68.5 14  1525531.000 1327.67900 *
##       15) CHmRun>=259.5 7  3118949.000 1720.64700 *
rpart.plot(fit.tree)

Model awal menghasilkan 17 percabangan atau split dan 18 simpul terminal. Pemisahan pertama menggunakan variabel CRBI pada nilai 310, yang menunjukkan bahwa variabel tersebut memberikan penurunan jumlah kuadrat galat terbesar pada pemisahan awal. Kelompok pemain dengan CRBI < 310 memiliki rata-rata Salary sebesar 295,80, sedangkan kelompok dengan CRBI ≥ 310 memiliki rata-rata sebesar 886,53, dalam satuan ribuan dolar. Kedua kelompok tersebut selanjutnya dibagi lagi berdasarkan variabel lain untuk menghasilkan prediksi yang lebih spesifik.

4.5 Analisis Variable Importance

#Prediksi dan Variable Importance
fit.tree$variable.importance
##       CRBI     CAtBat      CHits      CRuns     CWalks     CHmRun      Walks 
## 19841598.8 18306485.7 18071122.1 17538343.0 17195148.8 14991839.6 10000594.0 
##       Runs        RBI      HmRun      AtBat       Hits    PutOuts      Years 
##  5540822.4  3643211.7  3389938.7  2357502.3  2138981.9  1696527.4  1026396.6 
##     Errors    Assists 
##   885911.8   521697.1
pred.tree = predict(fit.tree, Hitters.test)

Variabel dengan nilai kepentingan tertinggi adalah CRBI, diikuti oleh CAtBat, CHits, CRuns, dan CWalks. Hal ini menunjukkan bahwa statistik performa kumulatif selama karier memiliki kontribusi besar dalam pembentukan model prediksi Salary.

4.6 Prediksi dan Evaluasi Model Sebelum Pruning

mse.awal <- mean((Hitters.test$Salary - pred.tree)^2)
mse.awal
## [1] 97334.52

Model sebelum pruning menghasilkan MSE testing sebesar 97.334,52. Nilai ini merupakan rata-rata kuadrat selisih antara Salary aktual dan hasil prediksi pada 63 observasi testing. Semakin kecil MSE, semakin baik kemampuan prediksi model pada data yang dievaluasi.

4.7 Penentuan CP Terbaik dan Pruning

#CP terbaik
printcp(fit.tree)
## 
## Regression tree:
## rpart(formula = Salary ~ ., data = Hitters.train, method = "anova", 
##     control = rpart.control(cp = 0, xval = 10))
## 
## Variables actually used in tree construction:
##  [1] AtBat  CAtBat CHits  CHmRun CRBI   CRuns  Errors Hits   HmRun  RBI   
## [11] Walks 
## 
## Root node error: 45421424/200 = 227107
## 
## n= 200 
## 
##            CP nsplit rel error  xerror    xstd
## 1  3.7303e-01      0   1.00000 1.01340 0.15454
## 2  1.6771e-01      1   0.62697 0.74711 0.13668
## 3  4.8559e-02      2   0.45926 0.56835 0.12206
## 4  3.5958e-02      3   0.41070 0.59080 0.12111
## 5  3.2057e-02      4   0.37474 0.58347 0.12174
## 6  2.2140e-02      5   0.34268 0.54860 0.12130
## 7  7.9889e-03      6   0.32054 0.50623 0.10817
## 8  7.4633e-03      7   0.31255 0.53541 0.11203
## 9  7.1621e-03      8   0.30509 0.53914 0.11214
## 10 6.9839e-03      9   0.29793 0.54478 0.11222
## 11 5.6681e-03     10   0.29095 0.54450 0.11206
## 12 4.5362e-03     11   0.28528 0.54052 0.11212
## 13 3.8573e-03     12   0.28074 0.54098 0.11219
## 14 2.2387e-03     13   0.27688 0.54826 0.11252
## 15 1.2026e-03     14   0.27465 0.54879 0.11363
## 16 5.7680e-04     15   0.27344 0.54745 0.11365
## 17 6.6627e-05     16   0.27287 0.54860 0.11530
## 18 0.0000e+00     17   0.27280 0.54985 0.11628
bestcp <- fit.tree$cptable[which.min(fit.tree$cptable[,"xerror"]),"CP"]
bestcp
## [1] 0.00798885

Berdasarkan hasil 10-fold cross-validation pada data training, nilai xerror terkecil adalah 0,50623, dengan CP sebesar 0,00798885. Nilai CP tersebut dipilih untuk melakukan pruning. Berdasarkan tabel CP, model terpilih memiliki 6 split dan 7 simpul terminal, sehingga lebih sederhana dibandingkan model awal.

4.8 Visualisasi dan Evaluasi Model Setelah Pruning

#Pruning
pruned.tree <- prune(fit.tree, cp = bestcp)
rpart.plot(pruned.tree)

pruned.tree$variable.importance
##       CRBI     CAtBat      CHits      CRuns     CWalks     CHmRun      Walks 
## 19445197.8 17836968.7 17545600.2 16846283.2 16762036.0 14698224.1  9193093.0 
##       Runs        RBI      HmRun      AtBat       Hits    PutOuts      Years 
##  5004226.1  3381625.6  2861117.3  1833173.8  1768957.1  1313395.8   928676.1 
##     Errors    Assists 
##   502817.2   377112.9
pred.prune = predict(pruned.tree, Hitters.test)
mse_prune <- mean((pred.prune - Hitters.test$Salary)^2)
mse_prune
## [1] 103168.1

4.9 Perbandingan MSE Sebelum dan Setelah Pruning

#Perbandingan
data.frame(
  Model = c("Sebelum pruning", "Setelah pruning"),
  MSE = c(mse.awal, mse_prune)
)
##             Model       MSE
## 1 Sebelum pruning  97334.52
## 2 Setelah pruning 103168.12

Setelah pruning, MSE testing meningkat sekitar 5,99%. Dengan demikian, model sebelum pruning memberikan prediksi lebih baik pada data testing yang digunakan, sedangkan model setelah pruning memiliki struktur yang lebih sederhana. Meskipun CP terpilih memberikan galat cross-validation terkecil pada data training, hasil tersebut tidak menjamin MSE paling kecil pada data testing.

BAB V KESIMPULAN

5.1 Kesimpulan

Decision Tree untuk klasifikasi merupakan metode yang memprediksi kategori suatu pengamatan melalui aturan keputusan berbentuk pohon. Algoritma CART (Classification and Regression Trees) membentuk pohon dengan membagi data secara rekursif menjadi dua kelompok pada setiap pemisahan. Pemisahan dipilih untuk mengurangi ketidakmurnian kelas, sehingga diperoleh simpul terminal yang digunakan untuk menentukan prediksi kelas.

Pembangunan model Classification Tree menggunakan CART diawali dengan pemeriksaan dan penyiapan data, penentuan variabel respons kategorik, serta pembagian data menjadi data latih dan data uji. Selanjutnya, model dibentuk menggunakan data latih, divisualisasikan, dan dievaluasi melalui prediksi pada data uji menggunakan confusion matrix dan akurasi. Pemilihan CP berdasarkan cross-validation dan proses pruning dilakukan untuk memperoleh pohon yang sesuai, kemudian kinerjanya dibandingkan dengan model sebelum pemangkasan.

Analisis menggunakan algoritma CART dilakukan dengan memuat dan memeriksa data, menangani nilai hilang, serta membagi data menjadi data latih dan data uji. Model Regression Tree digunakan untuk memprediksi Salary pada dataset Hitters. Selanjutnya, struktur pohon divisualisasikan dan variable importance dianalisis untuk mengetahui kontribusi prediktor. Kinerja model dievaluasi menggunakan confusion matrix dan akurasi untuk klasifikasi serta MSE untuk regresi, kemudian dibandingkan kembali setelah dilakukan pruning berdasarkan CP terbaik dari cross-validation.

DAFTAR PUSTAKA

Bintoro, P., Ratnasari, Wihardjo, E., Putri, I.P. and Asari, A. (2024). Pengantar Machine Learning. Solok: PT Mafy Media Literasi Indonesia.

Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Statistika, Universitas Bengkulu.

Hartono. (2021). Modul Digital Machine Learning. MS-SPADA Kementerian Pendidikan, Kebudayaan, Riset, dan Teknologi.

Nasrullah, A. H. (2021). Implementasi Algoritma Decision Tree untuk Klasifikasi Produk Laris. Jurnal Ilmiah Ilmu Komputer Fakultas Ilmu Komputer Universitas AL Asyariah Mandar, 7(2), 45-51.

Ramadhon, R. N., dkk. (2024). Implementasi Algoritma Decision Tree untuk Klasifikasi Pelanggan Aktif atau Tidak Aktif pada Data Bank. Karimah Tauhid, 3(2), 1860-1874.