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.
Bagaimana konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).
Bagaimana membangun model Classification Tree menggunakan algoritma CART?
Menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).
Membangun model Classification Tree menggunakan algoritma CART?
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).
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):
Mudah dipahami dan diinterpretasikan karena model dapat divisualisasikaan dalam bentuk pohon.
Dapat menggunakan variabel prediktor numerik maupun kategorik.
Membagi data secara bertahap melalui proses splitting sehingga kelompok yang tebentuk semakin homogen.
Dapat digunakan untuk memprediksi kelas pada kasus klasifikasi maupun nilai numerik pada kasus regresi.
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):
Pilih atribut sebagai akar
Buat cabang untuk masing-masing nilai
Bagi kasus dalam cabang
Ulangi proses untuk masing-masing cabang sampai semua kasus pada cabang memiliki kelas yang sama.
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.
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.
Langkah-langkah analisis yang dilakukan adalah:
Memuat package yang diperlukan serta dataset Hitters ke RStudio.
Memeriksa struktur data dan keberadaan nilai hilang, kemudian menangani nilai hilang menggunakan na.omit().
Membagi setiap dataset menjadi data latih dan data uji secara acak.
Membangun model Regression Tree untuk memprediksi Salary menggunakan algoritma CART.
Memvisualisasikan struktur pohon dan menganalisis variable importance
Melakukan prediksi pada data uji dan mengevaluasi model.
Menentukan nilai complexity parameter (CP) terbaik berdasarkan galat cross-validation terkecil pada data latih.
Melakukan pruning menggunakan CP terbaik dan memvisualisasikan pohon hasil pemangkasan.
Melakukan prediksi dan evaluasi kembali, kemudian membandingkan kinerja model sebelum dan setelah pruning.
Menginterpretasikan hasil analisis dan menarik kesimpulan.
##
## 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
## Loading required package: lattice
##
## Attaching package: 'caret'
##
## The following object is masked from 'package:purrr':
##
## lift
## '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.
## 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
## [1] 59
## [1] 0
## [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.
# 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.
#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 *
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.
## 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
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.
## [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.
##
## 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
## [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.
## 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
#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.
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.
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.