BAB I PENDAHULUAN

1.1 Latar Belakang

Machine learning merupakan bidang yang memungkinkan komputer mempelajari pola dari data untuk menghasilkan prediksi atau keputusan berdasarkan informasi yang tersedia. Pendekatan ini banyak digunakan dalam analisis data karena mampu membangun model berdasarkan data yang telah diamati dan menerapkannya untuk memperkirakan hasil pada data baru. Alpaydın (2020) menjelaskan bahwa machine learning berkaitan dengan pengembangan algoritma yang memungkinkan komputer memanfaatkan data atau pengalaman sebelumnya untuk menyelesaikan suatu permasalahan. Salah satu pendekatan dalam machine learning adalah supervised learning, yaitu proses pembelajaran menggunakan data yang memiliki variabel prediktor dan variabel respons. Melalui pendekatan tersebut, model dapat mempelajari hubungan antara variabel prediktor dan variabel respons untuk menghasilkan prediksi pada pengamatan baru.

Salah satu metode dalam supervised learning adalah Classification and Regression Tree (CART), yaitu metode yang membentuk model prediksi melalui pembagian data secara bertahap berdasarkan variabel prediktor. CART mencakup dua jenis pemodelan, yaitu Classification Tree untuk memprediksi variabel respons kategorik dan Regression Tree untuk memprediksi variabel respons numerik. Abedinia dan Seydi (2024) menjelaskan bahwa pohon keputusan merupakan metode pembelajaran statistik yang dapat digunakan untuk permasalahan klasifikasi dan regresi melalui proses pembagian data secara rekursif. Struktur pohon yang dihasilkan memungkinkan aturan prediksi disajikan secara sistematis sehingga lebih mudah dipahami dan diinterpretasikan. Selain itu, kompleksitas pohon dapat dikendalikan melalui proses pruning atau pemangkasan cabang. Chew et al. (2025) membahas penerapan strategi pruning untuk menyederhanakan struktur pohon keputusan sekaligus mempertahankan kinerja model. Dengan demikian, CART dapat digunakan untuk membangun model prediksi yang memiliki struktur interpretatif dan dapat disesuaikan kompleksitasnya berdasarkan kebutuhan analisis.

Oleh karena itu, pemahaman mengenai konsep machine learning dan metode CART diperlukan sebagai dasar untuk memahami proses pembentukan model prediksi berbasis pohon keputusan. Pemahaman tersebut mencakup prinsip pembagian data, pembentukan struktur pohon, serta perbedaan penggunaan Classification Tree dan Regression Tree berdasarkan jenis variabel respons. Selain itu, pemahaman mengenai kompleksitas model dan proses pruning diperlukan agar struktur pohon yang terbentuk dapat diinterpretasikan dengan baik. Penguasaan konsep dasar tersebut diharapkan dapat membantu mahasiswa memahami prinsip kerja metode Decision Tree dan penerapannya dalam analisis data.

1.2 Rumusan Masalah

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

1.3 Tujuan

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

BAB II TINJAUAN PUSTAKA

2.1 Machine Learning

Machine learning merupakan pendekatan dalam ilmu komputer yang memungkinkan sistem mempelajari pola dan hubungan dari data untuk menghasilkan prediksi atau keputusan. Proses pembelajaran dilakukan dengan membangun model berdasarkan data yang tersedia, sehingga model tersebut dapat digunakan untuk menganalisis pengamatan baru. Kemampuan model dalam menghasilkan prediksi dipengaruhi oleh karakteristik data, pemilihan metode, serta proses evaluasi yang dilakukan.

Salah satu pendekatan dalam machine learning adalah supervised learning, yaitu pembelajaran menggunakan data yang memiliki variabel prediktor dan variabel respons. Variabel prediktor digunakan sebagai dasar untuk memperkirakan nilai variabel respons. Berdasarkan jenis variabel responsnya, supervised learning dibedakan menjadi klasifikasi dan regresi. Klasifikasi digunakan ketika variabel respons berbentuk kategori, sedangkan regresi digunakan ketika variabel respons berbentuk numerik.

Salah satu metode supervised learning adalah Decision Tree. Metode ini membentuk model prediksi melalui serangkaian aturan pemisahan data berdasarkan variabel prediktor. Hasil pemodelannya berupa struktur pohon yang menunjukkan proses pengambilan keputusan dari simpul awal hingga simpul akhir. Decision Tree dapat digunakan untuk klasifikasi maupun regresi, serta memiliki kelebihan berupa struktur model yang relatif mudah dipahami dan diinterpretasikan. Oleh karena itu, metode ini dapat digunakan untuk mempelajari hubungan antara variabel prediktor dan variabel respons dalam suatu data (Fransiska, 2026).

2.2 Decision Tree dan Classification and Regression Tree (CART)

Decision Tree merupakan metode pemodelan yang merepresentasikan aturan pengambilan keputusan dalam bentuk struktur menyerupai pohon. Struktur tersebut terdiri atas beberapa komponen, yaitu root node sebagai simpul awal yang memuat seluruh pengamatan, intermediate node sebagai simpul yang membagi pengamatan berdasarkan kriteria tertentu, branch sebagai cabang yang menghubungkan simpul, serta leaf node sebagai simpul akhir yang menghasilkan prediksi. Pembentukan pohon dilakukan melalui pemisahan data secara bertahap hingga diperoleh kelompok pengamatan yang sesuai dengan tujuan pemodelan (Fransiska, 2026).

Salah satu algoritma yang digunakan untuk membentuk Decision Tree adalah Classification and Regression Tree (CART). Algoritma ini dapat digunakan untuk dua jenis pemodelan, yaitu Classification Tree dan Regression Tree. Classification Tree digunakan ketika variabel respons bersifat kategorik, sedangkan Regression Tree digunakan ketika variabel respons bersifat numerik. CART membentuk pohon melalui proses pemisahan biner (binary splitting), yaitu membagi setiap simpul menjadi dua kelompok berdasarkan kriteria pemisahan tertentu. Pemisahan dilakukan secara berulang untuk memperoleh kelompok yang sesuai dengan karakteristik variabel respons (Sinambela, 2008).

Pada Classification Tree, pemilihan pemisahan dapat didasarkan pada ukuran ketidakmurnian kelas, seperti Gini Index. Sementara itu, pada Regression Tree, pemisahan dilakukan untuk memperoleh kelompok dengan nilai respons yang relatif homogen. Prediksi pada setiap simpul akhir umumnya berupa rata-rata nilai respons pengamatan yang berada dalam simpul tersebut. Pendekatan pohon regresi dapat digunakan untuk mempelajari pola hubungan antara variabel respons numerik dan variabel prediktor (Luqman dkk., 2015; Nopianti dkk., 2022).

Kinerja model regresi dapat dievaluasi menggunakan Mean Squared Error (MSE), yaitu rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi. MSE dirumuskan sebagai berikut.

\[ MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \] dengan \(n\) merupakan jumlah pengamatan, \(y_i\) merupakan nilai aktual, dan \(\hat{y}_i\) merupakan nilai prediksi. Nilai MSE yang lebih kecil menunjukkan tingkat kesalahan prediksi yang lebih rendah pada data evaluasi.

Kompleksitas pohon juga menjadi aspek penting dalam pembentukan model. Pohon yang terlalu sederhana berpotensi tidak mampu menangkap pola data dengan baik, sedangkan pohon yang terlalu kompleks dapat mengalami overfitting. Kondisi tersebut terjadi ketika model terlalu menyesuaikan diri dengan data pelatihan sehingga kemampuan prediksinya pada data baru dapat menurun. Salah satu cara untuk mengendalikan kompleksitas pohon adalah pruning atau pemangkasan cabang. Dalam implementasi CART menggunakan paket rpart pada R, kompleksitas pohon dapat dikendalikan melalui complexity parameter (CP). Pemilihan CP dapat mempertimbangkan kesalahan validasi silang (cross-validation error) untuk memperoleh struktur pohon yang lebih sederhana tanpa mengabaikan kemampuan prediksinya (Fransiska, 2026).

2.3 Tahapan Pemodelan Regression Tree

Secara umum, pemodelan Regression Tree dilakukan melalui beberapa tahapan berikut.

  1. Persiapan data Data diperiksa untuk mengetahui kelengkapan, tipe variabel, dan kesesuaian variabel prediktor serta variabel respons. Tahap ini bertujuan memastikan data yang digunakan sesuai dengan kebutuhan pemodelan.

  2. Pembagian data Data dibagi menjadi data training dan testing. Data training digunakan untuk membentuk model, sedangkan data testing digunakan untuk mengukur kemampuan model dalam memprediksi pengamatan yang tidak digunakan selama pelatihan.

  3. Pembentukan model Model Regression Tree dibangun dengan membagi data secara bertahap berdasarkan variabel prediktor. Proses pemisahan bertujuan membentuk kelompok pengamatan dengan nilai respons yang relatif homogen, sehingga prediksi pada setiap simpul akhir dapat merepresentasikan kelompok tersebut.

  4. Visualisasi dan identifikasi kepentingan variabel Struktur pohon divisualisasikan untuk memperlihatkan aturan pemisahan dan hasil prediksi pada setiap simpul. Selain itu, variable importance digunakan untuk menggambarkan kontribusi relatif variabel prediktor dalam pembentukan model.

  5. Evaluasi model Kemampuan prediksi model dievaluasi menggunakan data testing. Salah satu ukuran yang dapat digunakan adalah MSE, yang menunjukkan rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi. Semakin kecil nilai MSE, semakin rendah kesalahan prediksi pada data yang dievaluasi.

  6. Pemangkasan pohon (pruning) Pemangkasan dilakukan untuk mengendalikan kompleksitas pohon dan mengurangi risiko overfitting. Pada paket rpart, nilai CP dapat dipilih dengan mempertimbangkan tabel kompleksitas dan nilai kesalahan validasi silang.

  7. Evaluasi setelah pemangkasan Model hasil pruning dievaluasi kembali menggunakan data pengujian dan ukuran evaluasi yang sama. Perbandingan hasil sebelum dan sesudah pemangkasan dapat digunakan untuk menilai perubahan kesalahan prediksi serta menentukan apakah struktur pohon yang lebih sederhana memberikan kinerja yang lebih baik (Fransiska, 2026).

BAB III METODE PENELITIAN

3.1 Sumber Data

Data yang digunakan dalam praktikum ini merupakan data kuantitatif yang bersumber dari dataset sekunder Hitters dalam paket ISLR pada perangkat lunak R. Dataset tersebut berisi informasi mengenai pemain bisbol, termasuk karakteristik dan statistik permainan serta gaji yang diterima. Dataset ini digunakan untuk membangun model Decision Tree dengan pendekatan Regression Tree guna memprediksi gaji pemain bisbol berdasarkan variabel prediktor yang tersedia. Sebelum pemodelan dilakukan, data diperiksa untuk mengetahui keberadaan nilai hilang (missing value) dan ditangani menggunakan fungsi na.omit().

3.2 Variabel Penelitian

Variabel penelitian terdiri atas variabel respons dan variabel prediktor. Variabel respons yang digunakan adalah Salary, yaitu gaji pemain bisbol dalam satuan ribuan dolar Amerika Serikat. Variabel Salary merupakan variabel kuantitatif sehingga sesuai untuk pemodelan regresi.

Variabel prediktor merupakan variabel lain dalam dataset Hitters yang digunakan untuk memprediksi Salary, seperti pengalaman bermain, jumlah pertandingan, serta statistik pukulan dan pertahanan pemain. Variabel-variabel tersebut digunakan sebagai dasar pembentukan pohon regresi untuk mengidentifikasi pola hubungan antara karakteristik pemain dan gaji yang diterima.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan dalam praktikum Decision Tree menggunakan Regression Tree adalah sebagai berikut.

  1. Membuka aplikasi RStudio.
  2. Memanggil paket ISLR dan memuat dataset Hitters ke dalam R.
  3. Memeriksa struktur data, jumlah observasi, jumlah variabel, dan tipe data.
  4. Memeriksa keberadaan missing value pada setiap variabel.
  5. Menangani missing value dengan menghapus pengamatan yang mengandung nilai hilang menggunakan fungsi na.omit().
  6. Menentukan Salary sebagai variabel respons dan variabel lainnya sebagai variabel prediktor.
  7. Membagi data menjadi data training dan data testing.
  8. Membangun model Regression Tree menggunakan data training.
  9. Memvisualisasikan struktur pohon regresi yang telah terbentuk.
  10. Menganalisis variable importance untuk mengetahui tingkat kepentingan relatif setiap variabel prediktor dalam model.
  11. Melakukan prediksi nilai Salary pada data testing menggunakan model yang telah dibangun.
  12. Mengevaluasi hasil prediksi menggunakan Mean Squared Error (MSE).
  13. Menentukan nilai complexity parameter (CP) terbaik berdasarkan tabel kompleksitas pohon dengan mempertimbangkan kesalahan validasi silang.
  14. Melakukan pruning atau pemangkasan pohon menggunakan nilai CP terbaik.
  15. Melakukan prediksi kembali pada data testing menggunakan model hasil pruning.
  16. Menghitung kembali MSE setelah pruning.
  17. Membandingkan nilai MSE sebelum dan sesudah pruning untuk mengevaluasi perubahan kinerja model.
  18. Menarik kesimpulan berdasarkan hasil pemodelan, variable importance, dan perbandingan nilai MSE sebelum serta sesudah pemangkasan pohon.

BAB IV HASIL DAN PEMBAHASAN

Batasan masalah diminta untuk memprediksi variabel Salary menggunakan algoritma Decision Tree (Regression Tree) pada dataset Hitters dari package ISLR. Tahapan yang diminta meliputi pengecekan dan penanganan missing value menggunakan na.omit(), pembagian data menjadi training dan testing, pembentukan dan visualisasi tree, analisis variable importance, prediksi dan evaluasi menggunakan Mean Squared Error (MSE), penentuan nilai Complexity Parameter (CP) terbaik, pruning, serta evaluasi kembali model menggunakan MSE.

4.1 Library dan Pemeriksaan Data

Tahap awal dilakukan dengan memanggil library yang diperlukan dan memuat dataset Hitters dari package ISLR. Dataset tersebut berisi informasi pemain bisbol yang mencakup statistik permainan, pengalaman bermain, liga dan divisi tempat pemain bertanding, serta gaji pemain (Salary). Variabel Salary digunakan sebagai variabel respons yang akan diprediksi, sedangkan variabel lainnya digunakan sebagai prediktor.

Sintaks yang digunakan adalah sebagai berikut.

# Library
library(ISLR)
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(ggplot2)
library(caret)
## Loading required package: lattice
library(rpart)
library(rpart.plot)
library(tibble)
library(forcats)

# Data
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 ...
dim(Hitters)
## [1] 322  20

Fungsi library() digunakan untuk memanggil library yang diperlukan, sedangkan data() digunakan untuk memuat dataset. Fungsi str() digunakan untuk mengetahui struktur data, termasuk jumlah observasi, jumlah variabel, dan tipe data, sementara dim() digunakan untuk melihat dimensi dataset.

Berdasarkan hasil str(Hitters) dan dim(Hitters), dataset terdiri atas 322 observasi dan 20 variabel. Variabel yang tersedia mencakup statistik permainan musim berjalan, yaitu AtBat, Hits, HmRun, Runs, RBI, dan Walks. Selain itu terdapat pengalaman dan akumulasi statistik karier, yaitu Years, CAtBat, CHits, CHmRun, CRuns, CRBI, dan CWalks. Variabel lainnya adalah PutOuts, Assists, Errors, Salary, serta tiga variabel kategorik berupa faktor dua level, yaitu League (A/N), Division (E/W), dan NewLeague (A/N).

Variabel Salary bertipe numerik sehingga dapat digunakan sebagai variabel respons dalam pemodelan Regression Tree. Berbeda dengan Classification Tree yang memprediksi kelas, Regression Tree digunakan untuk memprediksi nilai numerik. Oleh karena itu, pembentukan model dilakukan menggunakan method = "anova" pada fungsi rpart().

Hasil pemeriksaan awal juga menunjukkan bahwa variabel Salary memiliki nilai yang hilang (NA). Kondisi tersebut perlu ditangani sebelum pembagian data dan pemodelan dilakukan.

4.2 Handling Missing Value

Missing value merupakan kondisi ketika suatu observasi tidak memiliki nilai pada variabel tertentu. Pemeriksaan dilakukan untuk mengetahui jumlah data yang hilang pada setiap variabel.

Sintaks yang digunakan adalah sebagai berikut.

# Cek 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
# Handling Missing Value
Hitters_clean <- na.omit(Hitters)

dim(Hitters_clean)
## [1] 263  20
colSums(is.na(Hitters_clean))
##     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         0         0

Fungsi is.na() digunakan untuk mengidentifikasi nilai yang hilang, sedangkan colSums() digunakan untuk menghitung jumlah missing value pada setiap variabel. Selanjutnya, fungsi na.omit() digunakan untuk menghapus observasi yang memiliki setidaknya satu nilai hilang.

Berdasarkan hasil pemeriksaan awal, terdapat 59 missing value pada variabel Salary, sedangkan 19 variabel lainnya tidak memiliki nilai hilang. Setelah dilakukan penanganan menggunakan na.omit(), jumlah observasi berkurang dari 322 menjadi 263 observasi dengan 20 variabel.

Hasil pemeriksaan kembali menunjukkan bahwa seluruh variabel sudah tidak memiliki missing value. Penghapusan observasi dipilih karena nilai Salary yang hilang merupakan nilai respons, sehingga observasi tersebut tidak dapat digunakan untuk melatih maupun mengevaluasi model regresi.

4.3 Splitting Data

Splitting data merupakan proses membagi dataset menjadi data training dan data testing. Data training digunakan untuk membentuk model, sedangkan data testing digunakan untuk mengevaluasi kemampuan model pada data yang tidak digunakan selama proses pelatihan.

Dataset dibagi dengan proporsi 70% untuk data training dan 30% untuk data testing menggunakan fungsi createDataPartition().

Sintaks yang digunakan adalah sebagai berikut.

# Data Training dan Testing
set.seed(234)

train <- createDataPartition(
  y = Hitters_clean$Salary,
  p = 0.7,
  list = FALSE
)

Hitters.train <- Hitters_clean[train, ]
Hitters.test <- Hitters_clean[-train, ]

dim(Hitters.train)
## [1] 185  20
dim(Hitters.test)
## [1] 78 20

Fungsi set.seed(234) digunakan agar pembagian data dapat direproduksi ketika sintaks dijalankan kembali. Argumen p = 0.7 menunjukkan proporsi data training, sedangkan sisa observasi digunakan sebagai data testing. Karena createDataPartition() menerima variabel respons, pembagian dilakukan dengan mempertahankan sebaran nilai Salary pada kedua bagian data.

Hasil pembagian menunjukkan bahwa data training terdiri atas 185 observasi dan 20 variabel, sedangkan data testing terdiri atas 78 observasi dan 20 variabel. Data training digunakan untuk membangun Regression Tree, sementara data testing digunakan untuk menghitung MSE.

4.4 Pembentukan dan Visualisasi Regression Tree

Regression Tree merupakan metode pemodelan yang membagi data ke dalam sejumlah kelompok berdasarkan nilai prediktor, sehingga setiap kelompok memiliki nilai respons yang relatif serupa. Pada setiap simpul terminal, prediksi berupa rata-rata nilai respons dari observasi pada simpul tersebut.

Pembentukan model dilakukan menggunakan fungsi rpart() dengan Salary sebagai variabel respons dan seluruh variabel lainnya sebagai prediktor. Parameter method = "anova" digunakan karena respons berupa data numerik, sedangkan cp = 0.001 ditetapkan melalui rpart.control() agar terbentuk pohon awal yang cukup besar sebelum dipangkas.

Sintaks yang digunakan adalah sebagai berikut.

# Regression Tree
fit.tree <- rpart(
  Salary ~ .,
  data = Hitters.train,
  method = "anova",
  control = rpart.control(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 *

Formula Salary ~ . menunjukkan bahwa Salary diprediksi menggunakan seluruh variabel lainnya dalam dataset. Visualisasi pohon dilakukan menggunakan sintaks berikut.

# Visualisasi Tree
rpart.plot(
  fit.tree,
  type = 2,
  extra = 101,
  fallen.leaves = TRUE,
  main = "Regression Tree untuk Prediksi Salary"
)

Argumen type = 2 digunakan untuk menampilkan aturan pemisahan di bawah setiap simpul. Argumen extra = 101 menambahkan jumlah observasi (\(n\)) dan persentase observasi pada setiap simpul, di samping nilai prediksi yang memang ditampilkan secara default. Argumen fallen.leaves = TRUE digunakan agar simpul terminal sejajar di bagian bawah sehingga struktur pohon lebih mudah dibaca.

Gambar 1. Regression tree untuk prediksi salary

Gambar 1. Regression tree untuk prediksi salary

Berdasarkan hasil model, simpul akar memiliki nilai prediksi Salary sebesar 529,319 dari 185 observasi. Pemisahan pertama dilakukan berdasarkan variabel CRBI pada nilai 300,5. Simpul dengan CRBI < 300,5 berisi 107 observasi (58%) dengan prediksi 296,148, sedangkan simpul dengan CRBI >= 300,5 berisi 78 observasi (42%) dengan prediksi 849,182.

Pada cabang CRBI < 300,5, pemisahan dilanjutkan dengan CAtBat pada nilai 1.447, kemudian menggunakan RBI, CRuns, Years, Walks, dan Division. Pada cabang CRBI >= 300,5, pemisahan dilanjutkan dengan Hits pada nilai 122,5, kemudian menggunakan HmRun, CHmRun, Years, dan CRuns. Hal ini menunjukkan bahwa model membentuk kelompok pemain berdasarkan kombinasi akumulasi performa karier, pengalaman bermain, dan statistik permainan.

Pohon awal memiliki 12 pemisahan dan 13 simpul terminal. Nilai prediksi simpul terminal terendah adalah 114,730 (37 observasi), sedangkan tertinggi adalah 1.640,052 (7 observasi). Kompleksitas ini memungkinkan model menangkap pola yang rinci, tetapi pohon yang terlalu besar berpotensi mengalami overfitting. Oleh karena itu, diperlukan evaluasi kesalahan prediksi dan penentuan CP terbaik sebelum dilakukan pruning.

4.5 Analisis Variable Importance

Variable importance digunakan untuk mengetahui tingkat kepentingan setiap variabel prediktor dalam pembentukan model. Pada rpart, nilai kepentingan dihitung dari kontribusi variabel terhadap penurunan deviance pada pemisahan utama, ditambah kontribusi dari pemisahan pengganti (surrogate split). Nilai yang lebih besar menunjukkan kontribusi relatif yang lebih besar dalam model.

Sintaks yang digunakan adalah sebagai berikut.

# Variable Importance
importance <- fit.tree$variable.importance
importance
##        CRBI       CRuns       CHits      CAtBat       Years      CWalks 
## 18006203.09 16275302.12 15846822.12 15773269.72 12575599.24 11352010.78 
##        Hits      CHmRun       AtBat        Runs         RBI       Walks 
##  3995824.17  3746799.11  3626215.94  3249147.01  3101676.38  2436801.19 
##       HmRun     PutOuts    Division 
##  1520655.45   553921.48    96930.34
importance_df <- data.frame(
  Feature = names(importance),
  Overall = as.numeric(importance)
) %>%
  arrange(desc(Overall))

importance_df
##     Feature     Overall
## 1      CRBI 18006203.09
## 2     CRuns 16275302.12
## 3     CHits 15846822.12
## 4    CAtBat 15773269.72
## 5     Years 12575599.24
## 6    CWalks 11352010.78
## 7      Hits  3995824.17
## 8    CHmRun  3746799.11
## 9     AtBat  3626215.94
## 10     Runs  3249147.01
## 11      RBI  3101676.38
## 12    Walks  2436801.19
## 13    HmRun  1520655.45
## 14  PutOuts   553921.48
## 15 Division    96930.34

Hasil tersebut disajikan dalam diagram batang menggunakan sintaks berikut.

ggplot(
  importance_df,
  aes(x = fct_reorder(Feature, Overall), y = Overall)
) +
  geom_col(fill = "cadetblue") +
  coord_flip() +
  theme_minimal() +
  labs(
    title = "Variable Importance pada Regression Tree",
    x = "Variabel",
    y = "Tingkat Kepentingan"
  )

Gambar 2. Variable importance pada regression tree

Gambar 2. Variable importance pada regression tree

Berdasarkan hasil perhitungan, terdapat 15 variabel yang tercatat memiliki kepentingan. Variabel CRBI memiliki tingkat kepentingan tertinggi, yaitu 18.006.203,09, diikuti CRuns (16.275.302,12), CHits (15.846.822,12), CAtBat (15.773.269,72), Years (12.575.599,24), dan CWalks (11.352.010,78). Keenam variabel tersebut memiliki nilai yang jauh di atas variabel lain. Variabel Hits berada di urutan ketujuh dengan nilai 3.995.824,17, sedangkan Division memiliki nilai terendah, yaitu 96.930,34. Variabel Assists, Errors, League, dan NewLeague tidak muncul dalam daftar.

Hasil tersebut menunjukkan bahwa variabel akumulasi performa karier dan pengalaman bermain paling berkontribusi terhadap pembentukan pohon. Namun, CRBI, CRuns, CHits, dan CAtBat sama-sama merupakan akumulasi statistik karier dan kemungkinan saling berkorelasi. Karena variable importance pada rpart ikut menghitung surrogate split, kontribusi variabel-variabel tersebut saling tumpang tindih, sehingga selisih antarvariabel tidak sebaiknya ditafsirkan terlalu tajam. Selain itu, nilai variable importance menunjukkan kontribusi relatif dalam model yang terbentuk, bukan bukti hubungan sebab-akibat terhadap Salary.

4.6 Prediksi dan Evaluasi Model Sebelum Pruning

Setelah model terbentuk, dilakukan prediksi terhadap data testing. Hasil prediksi dibandingkan dengan nilai aktual Salary untuk menghitung Mean Squared Error (MSE), yaitu rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi, dengan rumus:

\[ \mathrm{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \]

Keterangan:

  • \(n\) merupakan jumlah observasi pada data testing.
  • \(y_i\) merupakan nilai aktual.
  • \(\hat{y}_i\) merupakan nilai prediksi model.

Sintaks yang digunakan adalah sebagai berikut.

# Prediksi dan Evaluasi MSE Sebelum Pruning
pred.tree <- predict(
  fit.tree,
  newdata = Hitters.test
)

mse_before <- mean(
  (Hitters.test$Salary - pred.tree)^2
)

mse_before
## [1] 80020.62

Fungsi predict() digunakan untuk menghasilkan prediksi Salary pada data testing, kemudian MSE dihitung dari rata-rata kuadrat selisih antara Salary aktual dan hasil prediksi.

Berdasarkan hasil evaluasi, diperoleh MSE sebelum pruning sebesar 80.020,62. Nilai ini digunakan sebagai pembanding terhadap model setelah pruning, dengan nilai yang lebih rendah menunjukkan kesalahan prediksi yang lebih kecil pada data yang sama.

4.7 Penentuan CP Terbaik

Complexity Parameter (CP) merupakan parameter yang mengendalikan kompleksitas pohon. Pemisahan dipertahankan hanya apabila memberikan penurunan galat relatif minimal sebesar nilai CP. Penentuan CP terbaik dilakukan dengan memeriksa tabel kompleksitas menggunakan printcp() dan grafik menggunakan plotcp().

Sintaks yang digunakan adalah sebagai berikut.

# Menentukan CP Terbaik
printcp(fit.tree)
## 
## Regression tree:
## rpart(formula = Salary ~ ., data = Hitters.train, method = "anova", 
##     control = rpart.control(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.01127 0.16904
## 2  0.0953392      1   0.63009 0.69445 0.14286
## 3  0.0831170      2   0.53475 0.73597 0.13762
## 4  0.0462720      3   0.45163 0.69821 0.13559
## 5  0.0403020      4   0.40536 0.66768 0.13365
## 6  0.0223856      5   0.36506 0.58019 0.12556
## 7  0.0122387      6   0.34267 0.59338 0.12585
## 8  0.0102240      7   0.33043 0.58679 0.12543
## 9  0.0089296      8   0.32021 0.59549 0.12777
## 10 0.0071429      9   0.31128 0.59159 0.12783
## 11 0.0025987     10   0.30414 0.58683 0.12819
## 12 0.0015012     11   0.30154 0.60006 0.13284
## 13 0.0010000     12   0.30004 0.60041 0.13284
plotcp(fit.tree, upper = "splits")

bestcp <- fit.tree$cptable[
  which.min(fit.tree$cptable[, "xerror"]),
  "CP"
]

bestcp
## [1] 0.02238561

Fungsi printcp() menampilkan nilai CP, jumlah pemisahan (nsplit), kesalahan relatif (rel error), kesalahan validasi silang (xerror), dan simpangan baku kesalahan validasi (xstd). Nilai xerror diperoleh dari validasi silang 10-lipat bawaan rpart. CP terbaik dipilih berdasarkan xerror terkecil.

Gambar 3. Grafik CP (plotcp)

Gambar 3. Grafik CP (plotcp)

Berdasarkan hasil printcp(fit.tree), nilai rel error terus menurun seiring bertambahnya pemisahan, tetapi xerror berhenti membaik setelah pemisahan kelima. Nilai xerror terkecil sebesar 0,58019 diperoleh pada 5 pemisahan, dengan CP terbaik sebesar 0,02238561. Pada grafik, titik ini berada di bawah garis putus-putus, sedangkan penambahan pemisahan setelahnya tidak memberikan perbaikan yang berarti. Oleh karena itu, CP sebesar 0,02238561 dipilih sebagai dasar pruning.

4.8 Pruning dan Evaluasi Model Setelah Pruning

Pruning merupakan proses menyederhanakan pohon dengan menghilangkan cabang yang kurang diperlukan berdasarkan nilai CP yang ditentukan. Proses ini bertujuan mengurangi kompleksitas model dan berpotensi memperbaiki kemampuan prediksi pada data baru.

Sintaks yang digunakan adalah sebagai berikut.

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

pruned.tree
## n= 185 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##  1) root 185 37300170  529.3190  
##    2) CRBI< 300.5 107  7781241  296.1480  
##      4) CAtBat< 1447 71  4787307  205.7113 *
##      5) CAtBat>=1447 36  1267980  474.5093 *
##    3) CRBI>=300.5 78 15721120  849.1817  
##      6) Hits< 122.5 32  1830184  593.1771 *
##      7) Hits>=122.5 46 10334770 1027.2720  
##       14) CHmRun< 256.5 39  5352320  917.2857  
##         28) Years>=9.5 23  1423979  753.5352 *
##         29) Years< 9.5 16  2425068 1152.6770 *
##       15) CHmRun>=256.5 7  1882174 1640.0520 *
# Visualisasi Tree Setelah Pruning
rpart.plot(
  pruned.tree,
  type = 2,
  extra = 101,
  fallen.leaves = TRUE,
  main = "Regression Tree Setelah Pruning"
)

Gambar 3. Regression ree etelah runing

Gambar 3. Regression ree etelah runing

Berdasarkan hasil, pohon setelah pruning menjadi jauh lebih sederhana, yaitu dari 12 pemisahan (13 simpul terminal) menjadi 5 pemisahan (6 simpul terminal). Pohon tetap menggunakan CRBI sebagai pemisahan awal. Pada cabang CRBI < 300,5, pemisahan menggunakan CAtBat pada nilai 1.447 sehingga terbentuk dua simpul terminal dengan prediksi 205,711 (71 observasi) dan 474,509 (36 observasi). Pada cabang CRBI >= 300,5, pemisahan menggunakan Hits pada nilai 122,5. Kelompok dengan Hits < 122,5 menjadi simpul terminal dengan prediksi 593,177 (32 observasi), sedangkan kelompok dengan Hits >= 122,5 dipisah lagi berdasarkan CHmRun dan Years menjadi tiga simpul terminal dengan prediksi 753,535 (23 observasi), 1.152,677 (16 observasi), dan 1.640,052 (7 observasi).

Variabel RBI, CRuns, Walks, Division, dan HmRun yang sebelumnya digunakan sebagai pemisah pada pohon awal tidak lagi digunakan sebagai pemisahan setelah pruning. Dengan demikian, model yang lebih sederhana hanya mempertahankan lima variabel pemisah, yaitu CRBI, CAtBat, Hits, CHmRun, dan Years.

Selanjutnya, dihitung variable importance pada model setelah pruning.

# Variable Importance Setelah Pruning
importance_pruned <- pruned.tree$variable.importance
importance_pruned
##       CRBI      CRuns      CHits     CAtBat      Years     CWalks      AtBat 
## 16886866.7 15507629.7 14858301.0 14777292.4 12482323.9 10975741.4  3581420.4 
##       Hits     CHmRun       Runs        RBI      Walks      HmRun    PutOuts 
##  3556168.8  3100277.6  2555996.3  2000345.0  1889214.7  1111302.8   442896.8

Hasilnya menunjukkan bahwa CRBI tetap menjadi variabel dengan tingkat kepentingan tertinggi, yaitu 16.886.866,7, diikuti CRuns (15.507.629,7), CHits (14.858.301,0), CAtBat (14.777.292,4), Years (12.482.323,9), dan CWalks (10.975.741,4). Variabel Division tidak lagi muncul, sehingga jumlah variabel yang tercatat berkurang dari 15 menjadi 14. Urutan variabel utama tidak berubah, sehingga variabel akumulasi performa karier dan pengalaman bermain tetap memiliki kontribusi relatif terbesar meskipun kompleksitas pohon telah dikurangi.

Evaluasi model setelah pruning dilakukan dengan memprediksi Salary pada data testing yang sama, kemudian menghitung MSE.

# Prediksi dan Evaluasi MSE Setelah Pruning
pred.prune <- predict(
  pruned.tree,
  newdata = Hitters.test
)

mse_after <- mean(
  (Hitters.test$Salary - pred.prune)^2
)

mse_after
## [1] 75515.11
# Perbandingan MSE
hasil_mse <- data.frame(
  Model = c("Sebelum Pruning", "Setelah Pruning"),
  MSE = c(mse_before, mse_after)
)

hasil_mse
##             Model      MSE
## 1 Sebelum Pruning 80020.62
## 2 Setelah Pruning 75515.11

Berdasarkan hasil evaluasi, diperoleh MSE setelah pruning sebesar 75.515,11. Nilai tersebut lebih rendah dibandingkan MSE sebelum pruning, yaitu 80.020,62. Perbandingan kedua model disajikan pada tabel berikut.

Model Jumlah Pemisahan MSE
Sebelum pruning 12 80.020,62
Setelah pruning 5 75.515,11

Penurunan MSE sebesar 4.505,51 atau sekitar 5,63% menunjukkan bahwa pada data testing yang digunakan, model setelah pruning memiliki kesalahan prediksi yang lebih rendah dengan struktur yang jauh lebih sederhana. Namun, evaluasi ini hanya berdasarkan satu kali pembagian data dengan 78 observasi testing, sehingga selisih tersebut dapat berubah apabila pembagian data berbeda.

Secara keseluruhan, analisis menggunakan dataset Hitters menghasilkan model Regression Tree untuk memprediksi Salary. Penanganan missing value dengan na.omit() menghasilkan 263 observasi lengkap, yang dibagi menjadi 185 observasi training dan 78 observasi testing. Pada pohon awal, CRBI merupakan variabel dengan tingkat kepentingan tertinggi dan sekaligus menjadi pemisah pertama. CP terbaik yang diperoleh berdasarkan xerror terkecil adalah 0,02238561. Setelah dilakukan pruning, jumlah pemisahan berkurang dari 12 menjadi 5, sedangkan MSE turun dari 80.020,62 menjadi 75.515,11. Berdasarkan hasil tersebut, model setelah pruning lebih sederhana dan memiliki kesalahan prediksi yang lebih rendah pada data testing yang digunakan.

BAB V KESIMPULAN

5.1 Kesimpulan

Decision Tree merupakan metode machine learning yang membentuk model prediksi melalui serangkaian aturan pemisahan berdasarkan variabel prediktor. Metode ini memiliki dua pendekatan utama, yaitu Classification Tree untuk memprediksi variabel respons kategoris dan Regression Tree untuk memprediksi variabel respons numerik. Pada Regression Tree, proses pemisahan dilakukan untuk membentuk kelompok observasi dengan nilai respons yang relatif serupa, sedangkan prediksi pada setiap simpul terminal umumnya berupa rata-rata nilai respons pada kelompok tersebut. Struktur pohon yang dihasilkan juga relatif mudah diinterpretasikan karena aturan pemisahannya dapat ditelusuri dari simpul akar hingga simpul terminal.

Pembentukan Regression Tree dilakukan melalui beberapa tahapan, yaitu pemeriksaan dan penanganan missing value, pembagian data menjadi data training dan testing, pembentukan serta visualisasi pohon, analisis variable importance, dan evaluasi hasil prediksi menggunakan Mean Squared Error (MSE). Kompleksitas pohon dapat dikendalikan menggunakan Complexity Parameter (CP), sedangkan proses pruning dilakukan untuk menyederhanakan pohon dengan menghilangkan cabang yang tidak diperlukan. Pemilihan CP dapat didasarkan pada nilai cross-validation error (xerror) terkecil. MSE digunakan untuk mengukur rata-rata kuadrat kesalahan prediksi, dengan nilai yang lebih rendah menunjukkan kesalahan prediksi yang lebih kecil pada data yang dievaluasi.

Hasil penerapan Regression Tree pada dataset Hitters menunjukkan bahwa 59 missing value pada variabel Salary berhasil ditangani menggunakan na.omit(), sehingga tersisa 263 observasi. Data tersebut dibagi menjadi 185 observasi training dan 78 observasi testing. Variabel CRBI memiliki tingkat kepentingan tertinggi pada model awal, sedangkan CP terbaik yang diperoleh adalah 0,02238561. Setelah dilakukan pruning, jumlah pemisahan berkurang dari 12 menjadi 5. MSE juga mengalami penurunan dari 80.020,62 sebelum pruning menjadi 75.515,11 setelah pruning, atau turun sekitar 5,63%. Hasil ini menunjukkan bahwa model setelah pruning memiliki kesalahan prediksi yang lebih rendah pada data testing yang digunakan.

Daftar Pustaka

Abedinia, A., & Seydi, V. (2024). Building semi-supervised decision trees with semi-CART algorithm. International Journal of Machine Learning and Cybernetics, 15(10), 4493–4510. https://doi.org/10.1007/s13042-024-02161-z

Alpaydın, E. (2020). Introduction to machine learning (4th ed.). The MIT Press. https://mitpress.mit.edu/9780262043793/introduction-to-machine-learning/

Chew, Y. J., Ooi, S. Y., Pang, Y. H., & Lim, Z. Y. (2025). Decision tree pruning with privacy-preserving strategies. Electronics, 14(15), Article 3139. https://doi.org/10.3390/electronics14153139

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

Luqman, M., dkk. (2015). Identifikasi variabel yang mempengaruhi besar pinjaman dengan metode pohon regresi (Studi kasus di Unit Pengelola Kegiatan PNPM Mandiri). Jurnal Gaussian, 4(4). https://ejournal3.undip.ac.id/index.php/gaussian/article/view/10238

Nopianti, R., Panudju, A. T., & Permana, A. (2022). Prediksi harga saham Indonesia pada masa Covid-19 menggunakan regresi pohon keputusan. Jurnal Ecodemica: Jurnal Ekonomi, Manajemen, dan Bisnis, 6(1). https://ejournal.bsi.ac.id/ejurnal/index.php/ecodemica/article/view/11365

Sinambela, Y. E. S. (2008). Penerapan metode klasifikasi dengan algoritma CART pada data status daerah kabupaten di Indonesia [Karya ilmiah, Institut Pertanian Bogor]. Repository IPB. http://repository.ipb.ac.id/handle/123456789/50394