Anda di halaman 1dari 18

DECISION

TREE
Dipresentasikan oleh Kelompok 1
Anggota Tim :

1. Kharisma Khairunnisa
2. Rosalina Milka Tandirau
3. Yuni Sabrina Effendy
4. Wahyu Ariyanto
5. Muh. Edy Sopyan Saputra
6. Dedi Ariyanto
DECISION TREE
Decision tree atau pohon keputusan adalah model prediktif dalam
bentuk struktur pohon yang menggambarkan pilihan keputusan dan
konsekuensi masing-masing keputusan. Model ini sering digunakan
dalam analisis data dan pembelajaran mesin untuk mengambil
keputusan berdasarkan serangkaian aturan.
KENAPA SIH KITA HARUS
MENGGUNAKAN DECISION TREE ?
1. Decision tree mudah diinterpretasi oleh manusia karena strukturnya
menyerupai logika keputusan yang sederhana dan mudah
dimengerti.
2. Pohon keputusan memungkinkan kita untuk melihat alur pemikiran
yang digunakan oleh model dalam membuat prediksi atau keputusan
3. Decision tree dapat menangani baik data kategorikal maupun
numerik tanpa memerlukan transformasi khusus. Ini membuatnya
cocok untuk dataset dengan campuran tipe data.
4. Pohon keputusan tidak memerlukan normalisasi atau scaling data
sebelum pemodelan. Ini memudahkan dalam persiapan data dan
dapat menghemat waktu.
KELEBIHAN & KEKURANGAN

KELEBIHAN KEKURANGAN
1.Interpretasi yang Mudah 1.Kecenderungan Overfitting
2. Tidak Memerlukan Normalisasi 2. Ketidakstabilan
3. Cocok untuk Klasifikasi dan 3. Tidak Mendukung Konsep Time
Regresi Series
4. Pemilihan Fitur Otomatis 4. Tidak Mampu Menangani Korelasi
Tinggi
ALGORITMA DECISION
TREE
Pengumpulan Data
Pemilihan Atribut
Pembagian Data
Pemilihan Kriteria Pemisahan
Pembangunan Pohon
Pemangkasan (Optional dilakukan)
Evaluasi dan Validasi
Penerapan
Interpretasi dan Komunikasi hasil
PENERAPAN
#inastal packages dan import library
library(readxl)
library(rpart)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(readr)
#import data
data_bankloan = read.csv("C:/Users/wahyu/Downloads/bankloan.csv")
head(data_bankloan)
## age ed employ address income debtinc creddebt othdebt default
## 1 41 3 17 12 176 9.3 11.359392 5.008608 1
## 2 27 1 10 6 31 17.3 1.362202 4.000798 0
## 3 40 1 15 14 55 5.5 0.856075 2.168925 0
## 4 41 1 15 14 120 2.9 2.658720 0.821280 0
## 5 24 2 2 0 28 17.3 1.787436 3.056564 1
## 6 41 2 5 5 25 10.2 0.392700 2.157300 0
tail(data_bankloan)
## age ed employ address income debtinc creddebt othdebt default
## 695 48 2 6 1 66 12.1 2.315940 5.670060 0
## 696 36 2 6 15 27 4.6 0.262062 0.979938 1
## 697 29 2 6 4 21 11.5 0.369495 2.045505 0
## 698 33 1 15 3 32 7.6 0.491264 1.940736 0
## 699 45 1 19 22 77 8.4 2.302608 4.165392 0
## 700 37 1 12 14 44 14.7 2.994684 3.473316 0
nrow(data_bankloan)
## [1] 700
summary(data_bankloan)
## age ed employ address
##Min. :20.00 Min.:1.000 Min. : 0.000 Min. : 0.000
## 1st Qu. :29.00 1st Qu.:1.000 1st Qu.: 3.000 1st Qu.: 3.000
## Median :34.00 Median :1.000 Median : 7.000 Median : 7.000
##Mean :34.86 Mean:1.723 Mean : 8.389 Mean : 8.279
## 3rd Qu. 40.00 3rd Qu.:2.000 3rd Qu.:12.000 3rd Qu.:12.000
## Max. :56.00 Max. :5.000 Max.:31.000 Max. :34.000
## income debtinc creddebt othdebt
## Min. : 14.0 Min. : 0.40 Min.: 0.0117 Min. : 0.04558
## 1st Qu.: 24.0 1st Qu.: 5.00 1st Qu.: 0.3691 1st Qu.: 1.04418
## Median : 34.0 Median : 8.60 Median : 0.8549 Median : 1.98757
## Mean : 45.6 Mean :10.26 Mean: 1.5536 Mean : 3.05821
## 3rd Qu.: 55.0 3rd Qu.:14.12 3rd Qu.: 1.9020 3rd Qu.: 3.92306
## Max. :446.0 Max. :41.30 Max.:20.5613 Max. :27.03360
## default
## Min. :0.0000
## 1st Qu. :0.0000
## Median :0.0000
## Mean :0.2614
## 3rd Qu. :1.0000
## Max. :1.0000
# Pembagian data menjadi data latih dan data uji (misalnya, 70% data latih, 30% data uji)
set.seed(123) # Untuk reproducibility
index_data_latih <- sample(nrow(data_bankloan), 0.7 * nrow(data_bankloan)) # 70% data
latih
data_latih <- data_bankloan[index_data_latih, ]
print(data_latih)
## age ed employ address income debtinc creddebt othdebt default
## 415 29 2 1 7 29 21.2 2.330092 3.817908 1
## 463 31 3 9 2 28 2.6 0.121576 0.606424 0
## 179 37 1 13 5 24 8.9 0.602352 1.533648 0
## 526 31 1 6 12 33 4.2 0.145530 1.240470 0
## 195 33 2 13 2 40 7.2 0.181440 2.698560 0
## 118 40 2 15 16 73 3.4 1.032512 1.449488 0
## 299 25 2 4 5 27 5.0 0.549450 0.800550 1
nrow(data_latih)
## [1] 489
data_uji <- data_bankloan[-index_data_latih, ]
print(data_uji)
## age ed employ address income debtinc creddebt othdebt default
## 1 41 3 17 12 176 9.3 11.359392 5.008608 1
## 2 27 1 10 6 31 17.3 1.362202 4.000798 0
## 3 40 1 15 14 55 5.5 0.856075 2.168925 0
## 4 41 1 15 14 120 2.9 2.658720 0.821280 0
## 7 39 1 20 9 67 30.6 3.833874 16.668126 0
## 9 24 1 3 4 19 24.4 1.358348 3.277652 1
## 15 48 1 22 15 100 9.1 3.703700 5.396300 0
## 18 43 1 23 19 72 7.6 1.181952 4.290048 0
## 22 47 1 17 21 43 5.6 0.587552 1.820448 0
## 27 45 2 9 26 69 6.7 0.707319 3.915681 0
## 28 43 1 25 21 64 16.7 0.951232 9.736768 0
## 32 30 1 1 10 22 10.5 1.138830 1.171170 0
nrow(data_uji)
## [1] 211
#membuat model
model = rpart(data_bankloan$default~.,data = data_bankloan,method = "class")
#evaluasi model
prediksi <- predict(model, newdata = data_uji, type = "class")
prediksi
## 1 2 3 4 7 9 15 18 22 27 28 32 35 42 43 44 53 56 58 62
## 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0
## 63 65 68 70 71 75 77 79 82 92 97 98 99 101 102 109 124 126 133 138
## 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
## 140 142 144 145 147 149 154 157 169 171 173 182 183 194 201 206 213 214 216
220
## 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0
## 228 231 233 242 247 249 254 255 256 260 263 264 266 268 271 272 273 274 275
283
## 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0
0
## 342 345 351 352 356 360 369 370 371 376 380 384 394 395 403 405 407 408 411
416
## 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0
## 419 420 423 425 427 432 435 436 438 439 440 442 443 446 448 449 452 453 460
464
## 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0
## 469 475 482 485 486 491 494 496 499 505 506 507 510 511 512 513 517 518 527
529
## 0 0 1 1 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0
## 530 539 540 541 542 547 549 550 552 561 562 563 564 565 568 569 570 572 574 577
## 1 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 1 0
## 578 579 582 585 586 594 599 605 609 612 613 617 627 632 636 63 7 639 647 651 653
## 0 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0
## 656 663 667 673 679 686 689 691 693 695 697
## 0 0 0 0 0 1 0 0 1 0 0
## Levels: 0 1
#kinerja model
#menggunakan akurasi
akurasi <- mean(prediksi == data_uji$default)
cat("Akurasi model:", akurasi, "\n")
## Akurasi model: 0.8909953
#menggunakan confusion matrix
data_uji$default <- factor(data_uji$default, levels = levels(factor(prediksi)))
conf_matrix <- confusionMatrix(prediksi, data_uji$default)
print(conf_matrix)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 151 17
## 1 6 37
##
## Accuracy : 0.891
## 95% CI : (0.8409, 0.9296)
## No Information Rate : 0.7441
## P-Value [Acc > NIR] : 8.712e-08
##
## Kappa : 0.6933
## Mcnemar's Test P-Value : 0.03706
##
## Sensitivity : 0.9618
## Specificity : 0.6852
## Pos Pred Value : 0.8988
## Neg Pred Value : 0.8605
## Prevalence : 0.7441
## Detection Rate : 0.7156
## Detection Prevalence : 0.7962
## Balanced Accuracy : 0.8235
##
## 'Positive' Class : 0
#gabungan
# Misalkan 'target_uji' adalah variabel target pada data uji.
confu_matrix <- table(prediksi, data_uji$default)
print(confu_matrix)
##
## prediksi 0 1
## 0 151 17
## 1 6 37
# Menghitung akurasi model dari confusion matrix
tp <- confu_matrix[2, 2] # True Positives
tn <- confu_matrix[1, 1] # True Negatives
fp <- confu_matrix[2, 1] # False Positives
fn <- confu_matrix[1, 2] # False Negatives

akurasi <- (tp + tn) / sum(confu_matrix)


cat("akurasi model:", akurasi, "\n")
## akurasi model: 0.8909953
TERIMA KASIH
Atas perhatian dan kerjasamanya.

Anda mungkin juga menyukai