BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan teknologi dan ketersediaan data yang semakin besar mendorong meningkatnya kebutuhan akan metode analisis yang mampu membentuk prediksi secara akurat sekaligus mudah dipahami. Machine learning menjadi salah satu pendekatan yang banyak digunakan untuk kebutuhan tersebut, khususnya supervised learning, yaitu metode yang mempelajari pola dari data berlabel untuk memprediksi kategori maupun nilai numerik. Di antara berbagai metode supervised learning, Decision Tree termasuk metode yang populer karena hasilnya dapat divisualisasikan dalam bentuk pohon keputusan dan diterjemahkan menjadi aturan prediksi yang mudah diinterpretasikan. Metode ini juga dapat menangani variabel prediktor numerik maupun kategorik.

Classification and Regression Tree (CART) merupakan salah satu algoritma Decision Tree yang termasuk metode nonparametrik berstruktur pohon, yaitu menggambarkan hubungan antara variabel respons dengan satu atau lebih variabel prediktor (Lisyhana, 2023). CART menghasilkan satu pohon keputusan tunggal dan dapat melibatkan data bertipe campuran (Widjanarko et al., 2022). Metode ini bekerja dengan membagi data secara bertahap melalui proses splitting sehingga terbentuk simpul-simpul yang semakin homogen. Apabila variabel respons berupa kategori, pohon yang terbentuk disebut pohon klasifikasi dengan kriteria seperti Gini Index atau Entropy, sedangkan apabila berupa numerik kontinu disebut pohon regresi dengan ukuran kesalahan seperti Mean Squared Error (MSE). Pohon yang dibiarkan tumbuh penuh cenderung kompleks dan rentan mengalami overfitting, sehingga diperlukan pruning untuk menyederhanakannya.

Berdasarkan hal tersebut, praktikum ini dilakukan untuk memahami konsep dasar Decision Tree dan menerapkan metode CART menggunakan perangkat lunak R, dengan paket rpart dan data Carseats dari paket ISLR. Pada kasus klasifikasi, penjualan kursi mobil anak dikelompokkan ke dalam kategori tinggi dan rendah, sedangkan pada kasus regresi, penjualan diprediksi sebagai nilai numerik. Kinerja model dievaluasi menggunakan confusion matrix, akurasi, precision, recall, dan AUC untuk pohon klasifikasi, serta MSE untuk pohon regresi, baik sebelum maupun sesudah dilakukan pruning.

1.2 Rumusan Masalah

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

1.3 Tujuan Praktikum

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

1.4 Batasan Masalah

Adapun batasan masalah pada penelitian ini yaitu Gunakan dataset Hitters dari package ISLR untuk memprediksi Salary menggunakan Decision Tree (Regression Tree). Lakukan pengecekan dan penanganan missing value menggunakan na.omit(), kemudian bagi data menjadi training dan testing. Selanjutnya, bangun dan visualisasikan tree, analisis variable importance, lakukan prediksi dan evaluasi menggunakan MSE, tentukan CP terbaik, lakukan pruning, dan evaluasi kembali model menggunakan MSE!

BAB II TINJAUAN PUSTAKA

2.1 Decision Tree

Decision Tree merupakan salah satu metode machine learning yang digunakan untuk menyelesaikan permasalahan klasifikasi maupun regresi. Metode ini membentuk struktur pohon yang terdiri atas node, cabang, dan leaf node untuk menggambarkan proses pengambilan keputusan berdasarkan karakteristik data. Decision Tree termasuk metode yang banyak digunakan dalam machine learning karena memiliki struktur yang relatif sederhana dan hasil prediksinya lebih mudah diinterpretasikan dibandingkan beberapa metode machine learning lainnya. Selain digunakan sebagai model prediksi, Decision Tree juga dapat menghasilkan aturan keputusan yang menggambarkan hubungan antara variabel prediktor dengan variabel respons (Blockeel et al., 2023).

Classification and Regression Tree (CART) merupakan salah satu metode dalam Decision Tree yang digunakan untuk membangun model prediksi melalui proses pemisahan data secara bertahap. CART dapat digunakan untuk dua jenis permasalahan, yaitu klasifikasi dan regresi. Pada klasifikasi, variabel respons berupa data kategorik sehingga hasil akhir model berupa kelas atau kategori. Sementara itu, pada regresi, variabel respons berupa data numerik kontinu sehingga model digunakan untuk memprediksi suatu nilai numerik (Chen et al., 2024). 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 homogan.
  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

Sebuah Decision Tree tersusun atas beberapa komponen utama seperti pada Tabel berikut (Fransiska, 2026):

Tabel 1. Komponen Utama Decision Tree

Komponen Keterangan
Root node Simpul awal atau simpul paling atas yang memuat seluruh data sebelum dilakukan pemisahan
Intermediate node Simpul di antara root node dan leaf node yang masih dapat mengalami pemisahan
Leaf node Simpul akhir yang menunjukkan hasil prediksi. Pada klasifikasi berupa kelas sedangkan pada regresi berupa nilai numerik
Branch Cabang yang menghubungkan satu simpul dengan simpul lainnya berdasarkan aturan tertentu
Attribute Variabel prediktor yang digunakan sebagai dasar untuk melakukan pemisahan data
Splitting criteria Kriteria yang digunakan untuk menentukan pemisahan terbaik. Pada klasifikasi dapat menggunakan Gini Index atau Entropy sedangkan pada regresi dapat menggunakan ukuran kesalahan seperti MSE
Decision rules Aturan keputusan yang terbentuk dari jalur percabangan dan digunakan untuk menghasilkan prediksi
Pruning Proses pemangkasan cabang yang kurang penting untuk menyederhanakan pohon dan mengurangi risiko overfitting

2.2 Classification Tree

Classification Tree atau pohon klasifikasi adalah pohon keputusan yang digunakan ketika variabel respons berupa kategori. Pendekatan ini termasuk metode klasifikasi nonparametrik yang struktur pohonnya mudah dipahami dan diinterpretasikan. Pohon terdiri dari sejumlah simpul (node) yang dihubungkan oleh cabang, mulai dari simpul akar (root node) ke bawah hingga mencapai simpul akhir (leaf node) yang menunjukkan kelas prediksi (Pangestuti et al., 2025). CART menghasilkan satu pohon keputusan tunggal dan dapat melibatkan data bertipe campuran, yaitu numerik maupun kategorik (Widjanarko et al., 2022).

Pembentukan pohon klasifikasi dilakukan melalui proses pemisahan (splitting) secara berulang. Pada setiap simpul dicari variabel prediktor dan titik pemisah yang menghasilkan simpul anak yang paling homogen. Ukuran yang digunakan antara lain Entropy, Information Gain, dan Gini Index. Entropy mengukur ketidakmurnian kelas dalam simpul:

\[ \text{Entropy}(t) = -\sum_{k=1}^{K} p_k \log_2(p_k) \]

Information Gain mengukur penurunan Entropy setelah pemisahan:

\[ \text{IG} = E(D) - \sum_{j=1}^{J} \frac{|D_j|}{|D|} E(D_j) \] Gini Index mengukur ketidakmurnian (Gini impurity) simpul:

\[ \text{Gini}(t) = 1 - \sum_{k=1}^{K} p_k^2 \] Pada pemisahan biner, nilai Gini setelah pemisahan dihitung sebagai rata-rata terbobot:

\[ \text{Gini}_{split} = \frac{|D_1|}{|D|} \text{Gini}(D_1) + \frac{|D_2|}{|D|} \text{Gini}(D_2) \] dengan \(p_k\) adalah proporsi amatan kelas ke-\(k\) dalam simpul. Semakin kecil nilai Entropy atau Gini, semakin homogen simpul tersebut, dan pemisahan terbaik adalah yang menghasilkan Information Gain terbesar atau Gini split terkecil. Indeks Gini banyak dipilih dalam CART karena perhitungannya lebih sederhana dan cepat (Pangestuti et al., 2025).

2.3 Evaluasi Model

Evaluasi model dilakukan untuk mengetahui seberapa baik pohon yang terbentuk memprediksi data testing. Pada Classification Tree, evaluasi dilakukan dengan membandingkan kelas aktual dan kelas prediksi dalam confusion matrix, kemudian dihitung akurasi, sensitivitas (recall), spesifisitas, dan presisi (Pangestuti et al., 2025). Selain itu, kinerja model juga dapat dilihat dari kurva Receiver Operating Characteristic (ROC) dan nilai Area Under the Curve (AUC). Nilai AUC berkisar antara 0 sampai 1, dan model semakin baik dalam membedakan kelas apabila nilainya mendekati 1. Pada Regression Tree, evaluasi dilakukan dengan membandingkan nilai aktual dan nilai prediksi menggunakan Mean Squared Error (MSE), Root Mean Squared Error (RMSE), dan koefisien determinasi (\(R^2\)). Model dengan nilai RMSE yang lebih rendah menunjukkan model yang lebih baik dan hasil yang lebih akurat (Qoiriah & Yamasari, 2021).

Tabel 2. Confusion Matrix

Prediksi Positif Prediksi Negatif
Aktual Positif True Positive (TP) False Negative (FN)
Aktual Negatif False Positive (FP) True Negative (TN)

Berdasarkan confusion matrix, kinerja Classification Tree dapat dievaluasi menggunakan beberapa ukuran, yaitu akurasi, precision, recall, specificity, dan F1-Score (Pangestuti et al., 2025). Akurasi menunjukkan proporsi seluruh amatan yang diprediksi dengan benar, sedangkan precision dan recall masing-masing menunjukkan ketepatan prediksi dan kemampuan model menangkap amatan kelas positif. Specificity menunjukkan kemampuan model menangkap amatan kelas negatif, dan F1-Score merupakan rata-rata harmonik dari precision dan recall. Rumus masing-masing ukuran disajikan pada Tabel 3.

Tabel 3. Ukuran Evaluasi Classification Tree

Ukuran Rumus Keterangan
Akurasi \(\frac{TP + TN}{TP + TN + FP + FN}\) Proporsi seluruh amatan yang diprediksi dengan benar.
Precision \(\frac{TP}{TP + FP}\) Ketepatan prediksi pada kelas positif.
Recall \(\frac{TP}{TP + FN}\) Kemampuan model menangkap amatan kelas positif.
Specificity \(\frac{TN}{TN + FP}\) Kemampuan model menangkap amatan kelas negatif.
F1-Score \(2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}\) Rata-rata harmonik Precision dan Recall.

Pada Regression Tree, evaluasi dilakukan dengan membandingkan nilai aktual dan nilai hasil prediksi. Ukuran yang digunakan adalah Mean Squared Error (MSE), Root Mean Squared Error (RMSE), dan koefisien determinasi (R²). Model dengan nilai RMSE yang lebih rendah menunjukkan model yang lebih baik dan hasil prediksi yang lebih akurat (Qoiriah & Yamasari, 2021), sedangkan nilai R² yang semakin mendekati 1 menunjukkan bahwa model semakin mampu menjelaskan keragaman respons. Rumus masing-masing ukuran disajikan pada Tabel 4.

Tabel 4. Ukuran Evaluasi Regression Tree

Ukuran Rumus Keterangan
MSE \(\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2\) Rata-rata kuadrat selisih nilai aktual dan prediksi.
RMSE \(\sqrt{MSE}\) Akar dari MSE, satuannya sama dengan variabel respons.
\(R^2\) \(1 - \frac{\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}{\sum_{i=1}^{n}(y_i - \bar{y})^2}\) Proporsi keragaman respons yang dijelaskan model.

Keterangan: \(y_i\) nilai aktual, \(\hat{y}_i\) nilai prediksi, \(\bar{y}\) rata-rata nilai aktual, dan \(n\) banyaknya amatan.

2.4 Missing Value

Missing value adalah kondisi ketika terdapat nilai yang tidak tersedia pada suatu observasi dalam dataset. Pada penelitian ini, penanganan missing value dilakukan menggunakan fungsi na.omit() yang tersedia dalam R. Fungsi ini menghapus seluruh observasi yang memiliki setidaknya satu nilai hilang pada salah satu variabel. Dengan demikian, data yang digunakan dalam pemodelan Regression Tree merupakan data yang tidak memiliki missing value. Pendekatan ini dilakukan agar proses pembentukan model, prediksi, dan evaluasi menggunakan data yang lengkap tanpa melakukan imputasi atau pengisian nilai yang hilang.

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

Jenis data yang digunakan dalam penelitian ini adalah data kuantitatif, yaitu data berbentuk angka yang dapat diolah dan dianalisis secara statistik. Sumber data yang digunakan merupakan data sekunder yang diperoleh dari dataset Hitters pada package ISLR dalam perangkat lunak R. Dataset ini memuat informasi mengenai pemain bisbol, termasuk variabel Salary yang digunakan sebagai variabel respons untuk membangun model prediksi menggunakan metode Decision Tree (Regression Tree).

3.2 Variabel Penelitian

No Variabel Keterangan Tipe Data Peran
1 Salary Gaji tahunan pemain pada tahun 1987 (dalam ribuan dolar) Numerik Respons
2 AtBat Jumlah pukulan (at bat) pada musim 1986 Numerik Prediktor
3 Hits Jumlah pukulan sukses (hits) pada musim 1986 Numerik Prediktor
4 HmRun Jumlah home run pada musim 1986 Numerik Prediktor
5 Runs Jumlah run yang dicetak pada musim 1986 Numerik Prediktor
6 RBI Jumlah run batted in pada musim 1986 Numerik Prediktor
7 Walks Jumlah walks pada musim 1986 Numerik Prediktor
8 Years Lama bermain di liga utama (tahun) Numerik Prediktor
9 CAtBat Jumlah at bat selama karier Numerik Prediktor
10 CHit Jumlah hits selama karier Numerik Prediktor
11 CHmRun Jumlah home run selama karier Numerik Prediktor
12 CRuns Jumlah run yang dicetak selama karier Numerik Prediktor
13 CRBI Jumlah run batted in selama karier Numerik Prediktor
14 CWalks Jumlah walks selama karier Numerik Prediktor
15 League Liga pemain pada akhir musim 1986 (A atau N) Kategorik Prediktor
16 Division Divisi pemain pada akhir musim 1986 (E atau W) Kategorik Prediktor
17 PutOuts Jumlah put out pada musim 1986 Numerik Prediktor
18 Assists Jumlah assist pada musim 1986 Numerik Prediktor
19 Errors Jumlah kesalahan (error) pada musim 1986 Numerik Prediktor
20 NewLeague Liga pemain pada awal musim 1987 (A atau N) Kategorik Prediktor

3.3 Langkah-langkah Analisis

  1. Mulai.
  2. Memanggil package yang diperlukan (ISLR, dplyr, rpart, rpart.plot, caret, ggplot2, dan tibble), lalu memanggil dataset Hitters dan memeriksa struktur serta ukuran data.
  3. Memeriksa missing value pada setiap variabel, lalu menghapus baris yang mengandung data hilang menggunakan fungsi na.omit().
  4. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% dengan menetapkan seed agar hasil pembagian dapat direproduksi.
  5. Membangun model regresi pohon dengan Salary sebagai variabel respons dan seluruh variabel lainnya sebagai prediktor menggunakan fungsi rpart() dengan metode anova, kemudian memvisualisasikannya dengan rpart.plot().
  6. Mengidentifikasi tingkat kepentingan variabel prediktor (variable importance) dan menyajikannya dalam bentuk tabel dan grafik.
  7. Memprediksi Salary pada data testing menggunakan model awal, lalu menghitung Mean Squared Error (MSE).
  8. Menentukan nilai Complexity Parameter (CP) terbaik berdasarkan nilai cross-validation error (xerror) terkecil, kemudian melakukan pruning menggunakan prune() dan memvisualisasikan pohon hasilnya.
  9. Memprediksi kembali data testing menggunakan model setelah pruning, menghitung MSE, dan membandingkannya dengan MSE model awal.
  10. Selesai.

3.4 Diagram Alir Penelitian

BAB IV HASIL DAN PEMBAHASAN

4.1 Persiapan Package dan Dataset

library(ISLR)        # sumber dataset Hitters
library(dplyr)       # manipulasi data
library(rpart)       # membangun decision tree (CART)
library(rpart.plot)  # visualisasi pohon
library(caret)       # pembagian data training dan testing
library(ggplot2)     # grafik
library(tibble)      # rownames_to_column

data(Hitters)
dim(Hitters)
## [1] 322  20
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 ...
head(Hitters)
##                   AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits CHmRun
## -Andy Allanson      293   66     1   30  29    14     1    293    66      1
## -Alan Ashby         315   81     7   24  38    39    14   3449   835     69
## -Alvin Davis        479  130    18   66  72    76     3   1624   457     63
## -Andre Dawson       496  141    20   65  78    37    11   5628  1575    225
## -Andres Galarraga   321   87    10   39  42    30     2    396   101     12
## -Alfredo Griffin    594  169     4   74  51    35    11   4408  1133     19
##                   CRuns CRBI CWalks League Division PutOuts Assists Errors
## -Andy Allanson       30   29     14      A        E     446      33     20
## -Alan Ashby         321  414    375      N        W     632      43     10
## -Alvin Davis        224  266    263      A        W     880      82     14
## -Andre Dawson       828  838    354      N        E     200      11      3
## -Andres Galarraga    48   46     33      N        E     805      40      4
## -Alfredo Griffin    501  336    194      A        W     282     421     25
##                   Salary NewLeague
## -Andy Allanson        NA         A
## -Alan Ashby        475.0         N
## -Alvin Davis       480.0         A
## -Andre Dawson      500.0         N
## -Andres Galarraga   91.5         N
## -Alfredo Griffin   750.0         A

Interpretasi: Dataset Hitters terdiri atas 322 pemain (baris) dan 20 variabel (kolom). Variabel Salary adalah variabel respons bertipe numerik, sedangkan 19 variabel lainnya menjadi prediktor. Dari keluaran str() terlihat bahwa sebagian besar variabel bertipe numerik (int atau num), sedangkan League, Division, dan NewLeague bertipe factor (kategorik). CART dapat langsung memproses kedua tipe tersebut tanpa transformasi tambahan.

4.2 Pengecekan dan Penanganan 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
Hitters_clean <- na.omit(Hitters)

dim(Hitters_clean)
## [1] 263  20
sum(is.na(Hitters_clean))
## [1] 0

Interpretasi: Terdapat total 59 data hilang, dan seluruhnya berada pada variabel Salary (59 data), sedangkan variabel lain lengkap. Karena Salary adalah variabel respons, baris yang tidak memiliki nilai Salary tidak dapat digunakan untuk melatih maupun menguji model. Setelah na.omit(), data berkurang dari 322 menjadi 263 baris, dan pengecekan ulang menunjukkan sisa data hilang sebanyak 0. Dengan demikian, data siap digunakan untuk pemodelan.

4.3 Pembagian Data Training dan Testing

set.seed(234)
idx <- createDataPartition(Hitters_clean$Salary, p = 0.7, list = FALSE)

data_train <- Hitters_clean[idx, ]
data_test  <- Hitters_clean[-idx, ]

dim(data_train)
## [1] 185  20
dim(data_test)
## [1] 78 20

Interpretasi: Data training terdiri atas 185 pemain (70.3%) dan data testing 78 pemain (29.7%). Data training digunakan untuk membentuk pohon, sedangkan data testing tidak ikut dilatih dan hanya digunakan untuk menilai kemampuan model memprediksi data baru. Hasil pembagian dapat berbeda bila nilai seed diganti.

4.4 Pembentukan Regression Tree

set.seed(234)
fit_tree <- rpart(Salary ~ .,
                  data   = data_train,
                  method = "anova",
                  cp     = 0.001)

fit_tree
## n= 185 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##  1) root 185 37300170.00  529.3190  
##    2) CRBI< 300.5 107  7781241.00  296.1480  
##      4) CAtBat< 1447 71  4787307.00  205.7113  
##        8) RBI>=16 64   451745.40  169.8464  
##         16) CRuns< 101.5 37    43273.30  114.7297 *
##         17) CRuns>=101.5 27   142042.10  245.3766  
##           34) Years< 3.5 10     6090.00  186.0000 *
##           35) Years>=3.5 17    79957.63  280.3039 *
##        9) RBI< 16 7  3500575.00  533.6190 *
##      5) CAtBat>=1447 36  1267980.00  474.5093  
##       10) Walks< 60.5 27   759116.70  418.9753  
##         20) Division=W 14   300819.20  361.2381 *
##         21) Division=E 13   361367.20  481.1538 *
##       11) Walks>=60.5 9   175788.90  641.1111 *
##    3) CRBI>=300.5 78 15721120.00  849.1817  
##      6) Hits< 122.5 32  1830184.00  593.1771  
##       12) HmRun< 7.5 16   724360.00  484.0104 *
##       13) HmRun>=7.5 16   724468.40  702.3438 *
##      7) Hits>=122.5 46 10334770.00 1027.2720  
##       14) CHmRun< 256.5 39  5352320.00  917.2857  
##         28) Years>=9.5 23  1423979.00  753.5352  
##           56) CRuns< 751.5 13   361905.40  629.9725 *
##           57) CRuns>=751.5 10   605568.10  914.1667 *
##         29) Years< 9.5 16  2425068.00 1152.6770 *
##       15) CHmRun>=256.5 7  1882174.00 1640.0520 *
n_leaf_awal <- sum(fit_tree$frame$var == "<leaf>")

Interpretasi: Keluaran fit_tree menampilkan setiap simpul beserta aturan pemisahnya, banyaknya amatan (n), jumlah kuadrat galat (deviance), dan rata-rata Salary (yval) pada simpul tersebut. Simpul akar memuat 185 pemain dengan rata-rata Salary sebesar 529.32 (ribu dolar) dan pemisah pertama menggunakan variabel CRBI. Pohon awal memiliki 13 simpul akhir, dan nilai Salary prediksi untuk pemain baru adalah rata-rata Salary pada simpul akhir tempat pemain tersebut jatuh.

4.5 Visualisasi Regression Tree

rpart.plot(fit_tree,
           type = 4, extra = 101, fallen.leaves = TRUE,
           box.palette = "GnBu", shadow.col = "gray",
           main = "Regression Tree Awal (Salary)")

Interpretasi: Pohon dibaca dari simpul akar di atas ke simpul akhir di bawah. Setiap kotak memuat rata-rata Salary dan banyaknya pemain, sedangkan cabang kiri berlaku bila syarat pada simpul terpenuhi (yes) dan cabang kanan bila tidak. Variabel yang berada dekat simpul akar (di sini CRBI) adalah pemisah paling kuat dalam membedakan gaji pemain. Simpul akhir dengan warna lebih pekat menunjukkan kelompok pemain dengan rata-rata gaji tertinggi, sehingga jalur dari akar ke simpul tersebut merupakan aturan keputusan (decision rules) untuk pemain bergaji tinggi.

4.6 Analisis Variable Importance

vi_df <- data.frame(Importance = fit_tree$variable.importance) %>%

  rownames_to_column("Variabel") %>%
  mutate(Persen = round(100 * Importance / sum(Importance), 2),
         Importance = round(Importance, 2)) %>%
  arrange(desc(Importance))

knitr::kable(vi_df, caption = "Tingkat Kepentingan Variabel Prediktor")
Tingkat Kepentingan Variabel Prediktor
Variabel Importance Persen
CRBI 18006203.09 16.05
CRuns 16275302.12 14.51
CHits 15846822.12 14.13
CAtBat 15773269.72 14.06
Years 12575599.24 11.21
CWalks 11352010.78 10.12
Hits 3995824.17 3.56
CHmRun 3746799.11 3.34
AtBat 3626215.94 3.23
Runs 3249147.01 2.90
RBI 3101676.38 2.77
Walks 2436801.19 2.17
HmRun 1520655.45 1.36
PutOuts 553921.48 0.49
Division 96930.34 0.09
ggplot(vi_df, aes(x = reorder(Variabel, Importance), y = Importance)) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  labs(title = "Variable Importance Regression Tree",
       x = "Variabel", y = "Importance") +
  theme_minimal()

Interpretasi: Tiga variabel dengan kepentingan tertinggi adalah CRBI, CRuns, CHits, dan variabel teratas (CRBI) menyumbang 16.05% dari total kepentingan. Artinya, variabel-variabel tersebut paling berperan dalam menjelaskan perbedaan Salary antarpemain. Variabel dengan skor kecil berkontribusi sedikit dalam menurunkan galat. Perlu dicatat bahwa variabel yang tidak muncul pada gambar pohon masih bisa memiliki skor, karena skor juga memperhitungkan pemisah pengganti.

4.7 Prediksi dan Evaluasi Model Awal (MSE)

pred_awal <- predict(fit_tree, newdata = data_test)

hasil_awal <- data.frame(Aktual    = data_test$Salary,
                         Prediksi  = round(pred_awal, 2),
                         Selisih   = round(data_test$Salary - pred_awal, 2))
head(hasil_awal, 10)
##                   Aktual Prediksi Selisih
## -Al Newman          70.0   533.62 -463.62
## -Argenis Salazar   100.0   114.73  -14.73
## -Andre Thornton   1100.0   702.34  397.66
## -Alan Wiggins      700.0   481.15  218.85
## -Buddy Biancalana  175.0   533.62 -358.62
## -Bill Doran        625.0   641.11  -16.11
## -Billy Hatcher     110.0   114.73   -4.73
## -BillyJo Robidoux   67.5   114.73  -47.23
## -Bill Schroeder    180.0   114.73   65.27
## -Chris Bando       305.0   280.30   24.70
mse_awal  <- mean((data_test$Salary - pred_awal)^2)
rmse_awal <- sqrt(mse_awal)

c(MSE = round(mse_awal, 2), RMSE = round(rmse_awal, 2))
##      MSE     RMSE 
## 80020.62   282.88

Interpretasi: Model awal menghasilkan MSE sebesar 8.002062^{4} dan RMSE sebesar 282.88. Karena Salary dinyatakan dalam ribuan dolar, rata-rata galat prediksi model berkisar sekitar 282.88 ribu dolar. Semakin kecil nilai MSE, semakin dekat prediksi dengan nilai aktual. Nilai ini menjadi pembanding untuk menilai apakah pruning memperbaiki model.

4.8 Penentuan Complexity Parameter (CP) Terbaik

printcp(fit_tree)
## 
## Regression tree:
## rpart(formula = Salary ~ ., data = data_train, method = "anova", 
##     cp = 0.001)
## 
## Variables actually used in tree construction:
##  [1] CAtBat   CHmRun   CRBI     CRuns    Division Hits     HmRun    RBI     
##  [9] Walks    Years   
## 
## Root node error: 37300166/185 = 201623
## 
## n= 185 
## 
##           CP nsplit rel error  xerror    xstd
## 1  0.3699126      0   1.00000 1.01440 0.16933
## 2  0.0953392      1   0.63009 0.66573 0.13523
## 3  0.0831170      2   0.53475 0.73618 0.13772
## 4  0.0462720      3   0.45163 0.69985 0.12396
## 5  0.0403020      4   0.40536 0.69910 0.13299
## 6  0.0223856      5   0.36506 0.64196 0.13100
## 7  0.0122387      6   0.34267 0.66030 0.13128
## 8  0.0102240      7   0.33043 0.65698 0.12895
## 9  0.0089296      8   0.32021 0.65061 0.12904
## 10 0.0071429      9   0.31128 0.63971 0.12915
## 11 0.0025987     10   0.30414 0.63728 0.12981
## 12 0.0015012     11   0.30154 0.65142 0.13461
## 13 0.0010000     12   0.30004 0.65217 0.13460
plotcp(fit_tree, upper = "splits")

best_cp <- fit_tree$cptable[which.min(fit_tree$cptable[, "xerror"]), "CP"]
best_cp
## [1] 0.002598657

Interpretasi: Galat cross-validation terkecil dicapai pada CP sebesar 0.0026, yaitu pada pohon dengan 10 pemisahan. Berbeda dengan rel error yang selalu turun saat pohon membesar, xerror turun lalu naik kembali, yang menandakan pohon terlalu besar mulai menghafal data training (overfitting). Karena itu CP dipilih berdasarkan xerror terkecil, bukan rel error.

4.9 Pruning dan Visualisasi Pohon

pruned_tree <- prune(fit_tree, cp = best_cp)

n_leaf_prune <- sum(pruned_tree$frame$var == "<leaf>")

rpart.plot(pruned_tree,
           type = 4, extra = 101, fallen.leaves = TRUE,
           box.palette = "GnBu", shadow.col = "gray",
           main = "Regression Tree Setelah Pruning (Salary)")

Interpretasi. Jumlah simpul akhir berubah dari 13 pada pohon awal menjadi 11 setelah pruning, sehingga pohon menjadi lebih sederhana dan lebih mudah diinterpretasikan. Cabang yang dibuang adalah cabang yang hanya memperbaiki galat pada data training tetapi tidak memperbaiki galat hasil cross-validation.

4.10 Evaluasi Model Setelah Pruning (MSE)

pred_prune <- predict(pruned_tree, newdata = data_test)

mse_prune  <- mean((data_test$Salary - pred_prune)^2)
rmse_prune <- sqrt(mse_prune)

perbandingan <- data.frame(

  Model        = c("Sebelum Pruning", "Setelah Pruning"),
  Simpul_Akhir = c(n_leaf_awal, n_leaf_prune),
  MSE          = round(c(mse_awal, mse_prune), 2),
  RMSE         = round(c(rmse_awal, rmse_prune), 2)
)

knitr::kable(perbandingan, caption = "Perbandingan Kinerja Model Sebelum dan Sesudah Pruning")
Perbandingan Kinerja Model Sebelum dan Sesudah Pruning
Model Simpul_Akhir MSE RMSE
Sebelum Pruning 13 80020.62 282.88
Setelah Pruning 11 77556.98 278.49

Interpretasi: MSE model setelah pruning sebesar 7.755698^{4}, dibandingkan 8.002062^{4} pada model awal. Nilai MSE menurun sebesar 3.08%, sehingga model hasil pruning lebih akurat sekaligus lebih sederhana. RMSE setelah pruning sebesar 278.49 ribu dolar. Kesimpulannya, model terbaik dipilih dengan mempertimbangkan MSE yang lebih kecil sekaligus kesederhanaan pohon.

BAB V KESIMPULAN

5.1 Kesimpulan

Decision Tree merupakan metode supervised learning berbasis pohon yang membentuk aturan prediksi dengan membagi data secara bertahap berdasarkan variabel prediktor hingga terbentuk kelompok yang semakin homogen. Metode Classification and Regression Tree (CART) menghasilkan pohon klasifikasi apabila variabel respons berupa kategori dan pohon regresi apabila variabel respons berupa numerik kontinu. Pohon tersusun atas root node, intermediate node, leaf node, dan cabang, dengan leaf node sebagai hasil prediksi. Pemisahan terbaik ditentukan menggunakan ukuran kehomogenan simpul, yaitu Gini Index atau Entropy beserta Information Gain pada klasifikasi, serta ukuran galat seperti Mean Squared Error (MSE) pada regresi. Kelebihan metode ini adalah hasilnya mudah dipahami dan dapat menangani prediktor numerik maupun kategorik, sedangkan pohon yang terlalu besar dapat disederhanakan melalui pruning untuk mengurangi risiko overfitting.

Model Classification Tree dengan algoritma CART dibangun melalui tiga tahap yang diulang pada setiap simpul, yaitu mencari pemisahan terbaik dari setiap variabel prediktor, menentukan variabel dan pemisah terbaik, lalu melakukan pemisahan dan memeriksa apakah proses perlu dilanjutkan. Proses pemisahan berhenti apabila simpul sudah cukup homogen, tidak ada pemisahan yang mungkin dilakukan, jumlah amatan dalam simpul berada di bawah batas minimum, atau kedalaman pohon mencapai batas maksimum. Pada praktiknya di R, data dibagi menjadi data training dan testing, pohon dibentuk dengan fungsi rpart() menggunakan method = “class”, kemudian pentingnya variabel dianalisis. Selanjutnya, nilai complexity parameter (CP) terbaik dipilih berdasarkan galat cross-validation terkecil untuk melakukan pruning, dan kinerja model dievaluasi dengan confusion matrix, akurasi, precision, recall, specificity, serta kurva ROC dan AUC.

Berdasarkan hasil analisis pada dataset Hitters untuk memprediksi Salary dengan Regression Tree, data yang semula berjumlah 322 pemain menjadi 263 pemain setelah penanganan missing value dengan na.omit(), kemudian dibagi menjadi 185 data training dan 78 data testing. Pohon awal memiliki 13 simpul akhir dengan variabel pemisah pertama CRBI, dan tiga variabel dengan tingkat kepentingan tertinggi adalah CRBI, CRuns, CHits. Nilai CP terbaik berdasarkan cross-validation error terkecil adalah 0.0026, sehingga pohon hasil pruning memiliki 11 simpul akhir. Model awal menghasilkan MSE sebesar 80020.62, sedangkan model setelah pruning menghasilkan MSE sebesar 77556.98 atau menurun sebesar 3.08%, sehingga model hasil pruning lebih sederhana sekaligus lebih akurat dalam memprediksi Salary.

5.2 Saran

Pada praktikum Machine Learning berikutnya, disarankan agar praktikan lebih teliti dalam memasukkan dan mengolah data menggunakan RStudio, terutama dalam penggunaan sintaks serta interpretasi nilai CP, akurasi, sensitivity, specificity, dan AUC. Selain itu, pemilihan nilai cp perlu diperhatikan agar pohon yang dihasilkan tidak terlalu rumit dan tetap mampu mengklasifikasikan data dengan baik. Hasil evaluasi juga sebaiknya tidak hanya dilihat dari nilai akurasi, tetapi dikaitkan dengan sensitivity, specificity, dan AUC sehingga kesimpulan mengenai kemampuan model menjadi lebih tepat.

DAFTAR PUSTAKA

Blockeel, H., Devos, L., Frénay, B., Nanfack, G., & Nijssen, S. (2023). Decision trees: from efficient prediction to responsible AI. In Frontiers in Artificial Intelligence (Vol. 6). Frontiers Media SA.

Chen, Y., Cheung, K. C., Sun, R. Z., & Yam, S. C. P. (2024). A user guide of CART and random forests with applications in FinTech and InsurTech. Japanese Journal of Statistics and Data Science, 7(2), 999–1038.

Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu.

Lisyhana, E. (2023). Klasifikasi indeks prestasi mahasiswa Fakultas Sains dan Teknologi UIN Suska Riau berdasarkan biodata mahasiswa menggunakan metode CART [Skripsi, Universitas Islam Negeri Sultan Syarif Kasim Riau].

Pangestuti, A., Indawati, R., & Indriani, D. (2025). Penerapan metode Classification and Regression Tree (CART) dalam klasifikasi stroke di RS X. Jurnal Kesehatan Tambusai, 6(1), 2639–2647.

Widjanarko, E. W., Syafitri, U. D., & Alamudi, A. (2022). Klasifikasi sekolah dalam penerimaan mahasiswa baru Vokasi IPB jalur USMI menggunakan metode CART. Xplore: Journal of Statistics, 11(3)