library(tidyverse)
library(mlr3verse)
library(mlr3extralearners)
library(rpart.plot)
library(cowplot)
library(precrec)
library(kknn)
library(ranger)
Sebuah operator telekomunikasi seluler akan menjajagi kerja sama dengan sebuah bank untuk meningkatkan angka recharge pelanggan pra-bayar melalui channel perbankan (ATM, internet banking, dsb). Mereka ingin memperoleh model yang dapat digunakan untuk memprediksi pelanggan mana saja yang potensial untuk diajak menggunakan channel tersebut
Tujuan
Mencari model Machine Learning terbaik berdasarkan data yang tersediamodel machine learning yang akan digunakan:
data_pelanggan <- read.csv("Tugas_STA581.csv",stringsAsFactors = TRUE)
glimpse(data_pelanggan)
## Rows: 50,000
## Columns: 13
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,…
## $ X1 <int> 257, 24, 1, 627, 42, 65, 209, 11, 16, 117, 144, 184, 521, 3, 215, …
## $ X2 <int> 13643, 13897, 760, 41160, 19002, 38253, 76895, 12650, 2491, 55057,…
## $ X3 <int> 27, 15, 1, 97, 38, 43, 262, 10, 3, 121, 66, 57, 166, 7, 42, 4, 71,…
## $ X4 <dbl> 0.7799619, 0.7393772, 0.5000000, 0.7065245, 0.7495756, 0.7786787, …
## $ X5 <dbl> 0.9627874, 0.9061206, 1.0000000, 0.9976897, 0.9643634, 1.0000000, …
## $ X6 <int> 5217, 18025, 3275, 2864, 2794, 1122, 14061, 16131, 1892, 4222, 243…
## $ X7 <dbl> 0.7687453, 0.2906286, 0.9617486, 0.7232183, 0.7481289, 1.0000000, …
## $ X8 <int> 768, 2368, 2542, 0, 0, 5, 0, 0, 405, 0, 74, 8, 0, 0, 0, 666, 2397,…
## $ X9 <int> 30006, 39954, 43544, 0, 0, 1719, 0, 0, 18934, 0, 120, 13, 0, 0, 0,…
## $ X10 <dbl> 6.3, 7.3, 1.3, 9.3, 4.0, 17.0, 24.7, 10.0, 3.7, 8.7, 4.3, 4.3, 26.…
## $ X11 <dbl> 4.7, 5.3, 1.3, 5.0, 1.0, 14.7, 9.7, 5.3, 2.0, 6.0, 3.7, 3.0, 11.7,…
## $ Y <int> 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, …
Data yang tersedia merupakan Informasi mengenai penggunaan channel perbankan dari 50.000 pelanggan dengan 11 variabel X yaitu:
Variabel Y merupkan variabel respon yang memiliki tipe data kategorik
yaitu 0 (tidak berpotensi) dan 1 (berpotensi), namun dari output diatas
dapat dilihat bahwa tipe data var Y adalah int sehingga
perlu diubah menjadi factor, selain itu variabel ID dapat
dihilangkan karna tidak akan diperlukan untuk analisis selanjutnya.
data_pelanggan$Y <- as.factor(data_pelanggan$Y)
data_pelanggan <- data_pelanggan %>% select(-ID)
summary(data_pelanggan)
## X1 X2 X3 X4
## Min. : 0.0 Min. : 0 Min. : 0.00 Min. :0.0000
## 1st Qu.: 14.0 1st Qu.: 10621 1st Qu.: 10.00 1st Qu.:0.6975
## Median : 47.0 Median : 22092 Median : 24.00 Median :0.7498
## Mean : 110.7 Mean : 27908 Mean : 40.23 Mean :0.7342
## 3rd Qu.: 131.0 3rd Qu.: 36629 3rd Qu.: 50.00 3rd Qu.:0.8011
## Max. :4130.0 Max. :638172 Max. :1007.00 Max. :1.0000
## X5 X6 X7 X8
## Min. :0.0000 Min. : 0 Min. :0.0000 Min. : 0.0
## 1st Qu.:0.8534 1st Qu.: 1422 1st Qu.:0.6400 1st Qu.: 0.0
## Median :0.9703 Median : 3975 Median :0.8626 Median : 73.0
## Mean :0.8824 Mean : 6746 Mean :0.7718 Mean : 946.9
## 3rd Qu.:0.9972 3rd Qu.: 9261 3rd Qu.:0.9816 3rd Qu.: 925.0
## Max. :1.0000 Max. :244444 Max. :1.0000 Max. :59611.0
## X9 X10 X11 Y
## Min. : 0 Min. : 0.000 Min. : 0.000 0:40664
## 1st Qu.: 0 1st Qu.: 3.300 1st Qu.: 2.000 1: 9336
## Median : 2514 Median : 6.000 Median : 3.000
## Mean : 16144 Mean : 7.129 Mean : 3.676
## 3rd Qu.: 24431 3rd Qu.: 9.700 3rd Qu.: 4.700
## Max. :504086 Max. :30.700 Max. :35.700
berdasarkan output diatas dapat dilihat bahwa dari data pelanggan yang tersedia ternyata pelanggan yang berpotensi untuk diajak menggunakan channel perbankan (ATM, internet banking, dsb) yaitu sebesar 18.672% cenderung lebih sedikit dibandingkan pelanggan yang berpotensi untuk diajak menggunakan channel perbankan (ATM, internet banking, dsb).
Visual
x1_y <- ggplot(data_pelanggan, aes(x = X1, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X1 vs Y")
x2_y <- ggplot(data_pelanggan, aes(x = X2, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X2 vs Y")
x3_y <- ggplot(data_pelanggan, aes(x = X3, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X3 vs Y")
x4_y <- ggplot(data_pelanggan, aes(x = X4, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X4 vs Y")
x5_y <- ggplot(data_pelanggan, aes(x = X5, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X5 vs Y")
x6_y <- ggplot(data_pelanggan, aes(x = X6, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X6 vs Y")
x7_y <- ggplot(data_pelanggan, aes(x = X7, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X7 vs Y")
x8_y <- ggplot(data_pelanggan, aes(x = X8, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X8 vs Y")
x9_y <- ggplot(data_pelanggan, aes(x = X9, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X9 vs Y")
x10_y <- ggplot(data_pelanggan, aes(x = X10, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X10 vs Y")
x11_y <- ggplot(data_pelanggan, aes(x = X11, y = Y)) +
geom_boxplot() +
theme_minimal() +
labs(title = "X11 vs Y")
plot_grid(x1_y, x2_y, x3_y, x4_y, x5_y, x6_y, x7_y, x8_y, x9_y, x10_y, x11_y)
Jika dilihat dari box plot diatas untuk masing - masing pasangan var x dengan var y terlihat bahwa terdapat banyak pencilan sehingga disarankan untuk tidak menggunakan model regresi biasa
# Import data ke ekosistem mlr3
task_pelanggan = TaskClassif$new(id="pelanggan",
backend = data_pelanggan,
target = "Y",
positive = "1")
Pada kasus ini data akan dibagi menjadi dua bagian yaitu data
training dan data testing dengan proporsi data training sebesar 0.8 dari
data dan data testing sebesar 0.2 dengan menggunakan pembagian data
menggunakan fungsi holdout
set.seed(6)
resample_pelanggan =rsmp("holdout", ratio = 0.8)
resample_pelanggan$instantiate(task=task_pelanggan)
# model
learner_logreg <- lrn("classif.log_reg", predict_type="prob")
learner_logreg$train(task = task_pelanggan)
summary(learner_logreg$model)
##
## Call:
## stats::glm(formula = task$formula(), family = "binomial", data = data,
## model = FALSE)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.832e+00 7.439e-02 -24.622 < 2e-16 ***
## X1 5.414e-04 8.572e-05 6.316 2.68e-10 ***
## X10 -1.200e-01 5.488e-03 -21.869 < 2e-16 ***
## X11 -8.910e-02 1.033e-02 -8.628 < 2e-16 ***
## X2 1.502e-05 5.612e-07 26.759 < 2e-16 ***
## X3 8.204e-07 3.471e-04 0.002 0.998
## X4 1.011e+00 9.139e-02 11.066 < 2e-16 ***
## X5 -3.705e-01 7.503e-02 -4.939 7.87e-07 ***
## X6 1.350e-05 1.854e-06 7.280 3.34e-13 ***
## X7 4.477e-02 5.427e-02 0.825 0.409
## X8 4.208e-06 6.030e-06 0.698 0.485
## X9 1.992e-05 5.264e-07 37.838 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 48143 on 49999 degrees of freedom
## Residual deviance: 42901 on 49988 degrees of freedom
## AIC: 42925
##
## Number of Fisher Scoring iterations: 5
train_test_reglog = resample(task = task_pelanggan,
learner = learner_logreg,
resampling = resample_pelanggan,
store_models = TRUE)
## INFO [19:30:40.071] [mlr3] Applying learner 'classif.log_reg' on task 'pelanggan' (iter 1/1)
prediksi_test_reglog = as.data.table(train_test_reglog$prediction())
prediksi_test_reglog
## row_ids truth response prob.1 prob.0
## <int> <fctr> <fctr> <num> <num>
## 1: 1 1 0 0.17991295 0.8200870
## 2: 8 0 0 0.07013938 0.9298606
## 3: 15 0 0 0.13422142 0.8657786
## 4: 17 1 0 0.19861496 0.8013850
## 5: 22 0 0 0.27956388 0.7204361
## ---
## 9996: 49971 0 0 0.22616562 0.7738344
## 9997: 49979 0 0 0.08510491 0.9148951
## 9998: 49982 1 1 0.60513922 0.3948608
## 9999: 49991 0 0 0.24768420 0.7523158
## 10000: 49996 0 0 0.03004000 0.9699600
train_test_reglog$prediction()$confusion
## truth
## response 1 0
## 1 187 160
## 0 1622 8031
Berdasarkan output confusion matrix pada model regresi logistik diatas dapat dilihat bahwa hasil prediksi dengan klasifikasi 0 padahal seharusnya 1 masih lebih banyak dibandingkan hasil klasifikasi 1 yang sebenarnya 1.
## Akurasi
akurasi_regrlog <- train_test_reglog$aggregate(list(msr("classif.acc"),
msr("classif.specificity"),
msr("classif.sensitivity")
))
akurasi_regrlog
## classif.acc classif.specificity classif.sensitivity
## 0.8218000 0.9804664 0.1033720
Jika dilihat berdasarkan akurasinya ternyata model regresi logistik memiliki akurasi yang tinggi yaitu sebesar 82.18%
# Kurva ROC
autoplot(train_test_reglog, type = "roc")
learner_knn <- lrn("classif.kknn",predict_type="prob" ,k=10,kernel="rectangular")
set.seed(6)
train_test_knn = resample(task = task_pelanggan,
learner = learner_knn,
resampling = resample_pelanggan,
store_models = TRUE)
## INFO [19:30:41.412] [mlr3] Applying learner 'classif.kknn' on task 'pelanggan' (iter 1/1)
prediksi_test_KNN = as.data.table(train_test_knn$prediction())
head(prediksi_test_KNN)
## row_ids truth response prob.1 prob.0
## <int> <fctr> <fctr> <num> <num>
## 1: 1 1 0 0.3 0.7
## 2: 8 0 0 0.0 1.0
## 3: 15 0 0 0.0 1.0
## 4: 17 1 0 0.2 0.8
## 5: 22 0 0 0.2 0.8
## 6: 27 0 0 0.2 0.8
train_test_knn$prediction()$confusion
## truth
## response 1 0
## 1 345 392
## 0 1464 7799
Berdasarkan output confusion matrix pada model KNN diatas dapat dilihat bahwa hasil prediksi dengan klasifikasi 0 padahal seharusnya 1 masih lebih banyak dibandingkan hasil kalsifikasi 1 yang sebenarnya 1, sehingga model ini belum cukup baik untuk digunakan.
# Akurasi
akurasi_knn <- train_test_knn$aggregate(list(msr("classif.acc"),
msr("classif.specificity"),
msr("classif.sensitivity")
))
akurasi_knn
## classif.acc classif.specificity classif.sensitivity
## 0.8144000 0.9521426 0.1907131
Jika dilihat berdasarkan akurasinya ternyata model KNN memiliki akurasi yang tinggi yaitu sebesar 81.44%
# Kurva ROC
autoplot(train_test_knn, type = "roc")
learner_tree <- lrn("classif.rpart", cp = 0.001, predict_type="prob")
learner_tree$train(task = task_pelanggan)
rpart.plot(learner_tree$model,roundint = F,type = 5,tweak = 2)
set.seed(6)
train_test_tree = resample(task = task_pelanggan,
learner = learner_tree,
resampling = resample_pelanggan,
store_models = TRUE
)
## INFO [19:30:50.343] [mlr3] Applying learner 'classif.rpart' on task 'pelanggan' (iter 1/1)
prediksi_test_tree = as.data.table(train_test_tree$prediction())
prediksi_test_tree
## row_ids truth response prob.1 prob.0
## <int> <fctr> <fctr> <num> <num>
## 1: 1 1 0 0.1592170 0.8407830
## 2: 8 0 0 0.1286781 0.8713219
## 3: 15 0 0 0.1286781 0.8713219
## 4: 17 1 0 0.2647059 0.7352941
## 5: 22 0 0 0.3762475 0.6237525
## ---
## 9996: 49971 0 0 0.1286781 0.8713219
## 9997: 49979 0 0 0.1286781 0.8713219
## 9998: 49982 1 0 0.1592170 0.8407830
## 9999: 49991 0 0 0.1286781 0.8713219
## 10000: 49996 0 0 0.1286781 0.8713219
train_test_tree$prediction()$confusion
## truth
## response 1 0
## 1 326 273
## 0 1483 7918
Berdasarkan hasil output confussion matrix diatas dapat dilihat bahwa hasil prediksi dengan klasifikasi 0 padahal seharusnya 1 lebih banyak dibandingkan hasil kalsifikasi 1 yang sebenarnya 1, sehingga model ini belum cukup baik untuk digunakan.
akurasi_dtree <- train_test_tree$aggregate(list(msr("classif.acc"),
msr("classif.specificity"),
msr("classif.sensitivity")
))
akurasi_dtree
## classif.acc classif.specificity classif.sensitivity
## 0.8244000 0.9666707 0.1802101
Jika dilihat berdasarkan akurasinya ternyata model pohon klasifikasi (decision tree) memiliki akurasi yang tinggi yaitu sebesar 82.44%
# KUrva ROC
autoplot(train_test_tree, type = "roc")
learner_bagging <- lrn(id="bagging clf", "classif.ranger", mtry=11, predict_type="prob", importance="impurity")
set.seed(6)
train_test_bagging = resample(task = task_pelanggan,
learner = learner_bagging,
resampling = resample_pelanggan,
store_models = TRUE
)
## INFO [19:30:51.111] [mlr3] Applying learner 'bagging clf' on task 'pelanggan' (iter 1/1)
## Growing trees.. Progress: 25%. Estimated remaining time: 1 minute, 33 seconds.
## Growing trees.. Progress: 39%. Estimated remaining time: 1 minute, 37 seconds.
## Growing trees.. Progress: 48%. Estimated remaining time: 1 minute, 40 seconds.
## Growing trees.. Progress: 57%. Estimated remaining time: 1 minute, 35 seconds.
## Growing trees.. Progress: 65%. Estimated remaining time: 1 minute, 23 seconds.
## Growing trees.. Progress: 74%. Estimated remaining time: 1 minute, 5 seconds.
## Growing trees.. Progress: 83%. Estimated remaining time: 44 seconds.
## Growing trees.. Progress: 92%. Estimated remaining time: 22 seconds.
train_test_bagging$prediction()$confusion
## truth
## response 1 0
## 1 353 309
## 0 1456 7882
Berdasarkan output confusion matrix pada model bagging diatas dapat dilihat bahwa hasil prediksi dengan klasifikasi 0 padahal seharusnya 1 masih lebih banyak dibandingkan hasil kalsifikasi 1 yang sebenarnya 1, sehingga model ini belum cukup baik untuk digunakan.
# Akurasi
akurasi_bagging <- train_test_bagging$aggregate(list(msr("classif.acc"),
msr("classif.specificity"),
msr("classif.sensitivity")
))
akurasi_bagging
## classif.acc classif.specificity classif.sensitivity
## 0.8235000 0.9622757 0.1951354
Jika dilihat berdasarkan akurasinya ternyata model KNN memiliki akurasi yang tinggi yaitu sebesar 82.35%
autoplot(train_test_bagging, type = "roc")
learner_rf <- lrn("classif.ranger", predict_type="prob",importance="impurity")
learner_rf$train(task=task_pelanggan)
## Growing trees.. Progress: 20%. Estimated remaining time: 2 minutes, 4 seconds.
## Growing trees.. Progress: 41%. Estimated remaining time: 1 minute, 27 seconds.
## Growing trees.. Progress: 62%. Estimated remaining time: 56 seconds.
## Growing trees.. Progress: 83%. Estimated remaining time: 25 seconds.
learner_rf$model$variable.importance
## X1 X10 X11 X2 X3 X4 X5 X6
## 934.1423 955.4392 833.3195 1459.0227 843.0345 1105.8651 1042.4550 1111.9607
## X7 X8 X9
## 940.8638 1099.1962 1496.6473
importance <- data.frame(Predictors = names(learner_rf$model$variable.importance),
impurity = learner_rf$model$variable.importance
)
rownames(importance) <- NULL
importance %>% arrange(desc(impurity))
## Predictors impurity
## 1 X9 1496.6473
## 2 X2 1459.0227
## 3 X6 1111.9607
## 4 X4 1105.8651
## 5 X8 1099.1962
## 6 X5 1042.4550
## 7 X10 955.4392
## 8 X7 940.8638
## 9 X1 934.1423
## 10 X3 843.0345
## 11 X11 833.3195
#grafik
ggplot(importance,
aes(x=impurity,
y=reorder(Predictors,impurity))) +
geom_col(fill = "steelblue")+
geom_text(aes(label=round(impurity,2)),hjust=1.2)
Dari hasil output diatas terlihat bahwa variabel yang paling berpengaruh
adalah x9 dan x2 sedangkan yang pengaruhnya kecil diantara variabel
lainnya adalah x11 dan x3.
set.seed(6)
train_test_rf = resample(task = task_pelanggan,
learner = learner_rf,
resampling = resample_pelanggan,
store_models = TRUE
)
## INFO [19:38:41.522] [mlr3] Applying learner 'classif.ranger' on task 'pelanggan' (iter 1/1)
## Growing trees.. Progress: 28%. Estimated remaining time: 1 minute, 19 seconds.
## Growing trees.. Progress: 56%. Estimated remaining time: 49 seconds.
## Growing trees.. Progress: 84%. Estimated remaining time: 17 seconds.
prediksi_test_rf = as.data.table(train_test_rf$prediction())
head(prediksi_test_rf)
## row_ids truth response prob.1 prob.0
## <int> <fctr> <fctr> <num> <num>
## 1: 1 1 0 0.29487460 0.7051254
## 2: 8 0 0 0.05367857 0.9463214
## 3: 15 0 0 0.05011032 0.9498897
## 4: 17 1 0 0.22300873 0.7769913
## 5: 22 0 0 0.39980238 0.6001976
## 6: 27 0 0 0.15816649 0.8418335
train_test_rf$prediction()$confusion
## truth
## response 1 0
## 1 296 251
## 0 1513 7940
Berdasarkan output confusion matrix pada model KNN diatas dapat dilihat bahwa hasil prediksi dengan klasifikasi 0 padahal seharusnya 1 masih lebih banyak dibandingkan hasil kalsifikasi 1 yang sebenarnya 1, sehingga model ini belum cukup baik untuk digunakan.
# Akurasi
akurasi_rf <- train_test_rf$aggregate(list(msr("classif.acc"),
msr("classif.specificity"),
msr("classif.sensitivity")
))
akurasi_rf
## classif.acc classif.specificity classif.sensitivity
## 0.8236000 0.9693566 0.1636263
Jika dilihat berdasarkan akurasinya ternyata model random forest memiliki akurasi yang tinggi yaitu sebesar 82.36%
ROC
autoplot(train_test_rf, type = "roc")
# Buat daftar akurasi
akurasi <- list(
regresi.logistik = akurasi_regrlog,
knn = akurasi_knn,
pohon.klasifikasi = akurasi_dtree,
bagging = akurasi_bagging,
random.forest = akurasi_rf
)
df_akurasi <- round(t(data.frame(akurasi)), 4)
df_akurasi <- as.data.frame(df_akurasi)
df_akurasi <- df_akurasi %>%
select(classif.acc) %>%
arrange(desc(classif.acc))
df_akurasi
## classif.acc
## pohon.klasifikasi 0.8244
## random.forest 0.8236
## bagging 0.8235
## regresi.logistik 0.8218
## knn 0.8144
berdasarkan hasil akurasi diatas dapat dilihat bahwa kelima model memiliki nilai akurasi yang tidak terlalu berbeda satu sama lain. Walaupun begitu pohon klasifikasi memiliki nilai akurasi paling tinggi.
set.seed(6)
learner <- list(learner_logreg,
learner_tree,
learner_rf,
learner_knn,
learner_bagging)
set.seed(6)
design <- benchmark_grid(tasks = task_pelanggan,
learners = learner,
resamplings = resample_pelanggan
)
bmr = benchmark(design,store_models = TRUE)
## INFO [19:41:05.216] [mlr3] Running benchmark with 5 resampling iterations
## INFO [19:41:05.232] [mlr3] Applying learner 'classif.log_reg' on task 'pelanggan' (iter 1/1)
## INFO [19:41:05.857] [mlr3] Applying learner 'classif.rpart' on task 'pelanggan' (iter 1/1)
## INFO [19:41:06.582] [mlr3] Applying learner 'classif.ranger' on task 'pelanggan' (iter 1/1)
## Growing trees.. Progress: 28%. Estimated remaining time: 1 minute, 18 seconds.
## Growing trees.. Progress: 57%. Estimated remaining time: 46 seconds.
## Growing trees.. Progress: 86%. Estimated remaining time: 14 seconds.
## INFO [19:43:17.879] [mlr3] Applying learner 'classif.kknn' on task 'pelanggan' (iter 1/1)
## INFO [19:43:36.883] [mlr3] Applying learner 'bagging clf' on task 'pelanggan' (iter 1/1)
## Growing trees.. Progress: 9%. Estimated remaining time: 5 minutes, 13 seconds.
## Growing trees.. Progress: 18%. Estimated remaining time: 4 minutes, 42 seconds.
## Growing trees.. Progress: 27%. Estimated remaining time: 4 minutes, 8 seconds.
## Growing trees.. Progress: 36%. Estimated remaining time: 3 minutes, 36 seconds.
## Growing trees.. Progress: 45%. Estimated remaining time: 3 minutes, 6 seconds.
## Growing trees.. Progress: 55%. Estimated remaining time: 2 minutes, 34 seconds.
## Growing trees.. Progress: 64%. Estimated remaining time: 2 minutes, 2 seconds.
## Growing trees.. Progress: 73%. Estimated remaining time: 1 minute, 30 seconds.
## Growing trees.. Progress: 83%. Estimated remaining time: 58 seconds.
## Growing trees.. Progress: 92%. Estimated remaining time: 27 seconds.
## INFO [19:49:33.004] [mlr3] Finished benchmark
bmr$aggregate(list(msr("classif.auc"))) %>%
arrange(desc(classif.auc))
## nr task_id learner_id resampling_id iters classif.auc
## <int> <char> <char> <char> <int> <num>
## 1: 3 pelanggan classif.ranger holdout 1 0.7612431
## 2: 5 pelanggan bagging clf holdout 1 0.7527958
## 3: 1 pelanggan classif.log_reg holdout 1 0.7507214
## 4: 4 pelanggan classif.kknn holdout 1 0.7051158
## 5: 2 pelanggan classif.rpart holdout 1 0.6573313
## Hidden columns: resample_result
ROC
autoplot(bmr,type = "roc")
AUC (Area Under the Curve) adalah luas area di bawah kurva ROC, dimana semakin besar luas daerah kurva AUC maka model yang dihasilkan semakin baik.
Jika dilihat berdasarkan evaluasi menggunakn kurva ROC diatas, yang memiliki luas kurva AUC paling besar dibandingkan model lainnya adalah model Random Forest dengan kode learner_id = classif ranger dan nilai auc sebesar 0.7612431. Berdasarkan hasil evaluasi kurva AUC maka dapat dikatakan bahwa pada kasus ini model Random Forest adalah model terbaik yang bisa digunakan untuk memprediksi pelanggan mana saja yang berpotensi untuk diajak menggunakan channel perbankan (ATM, internet banking, dsb)
Dito, G.A. 2021. Neural Network dengan Keras di R. Retrieved from https://gerrydito.github.io/Neural-Network-with-Keras-in-R/
Dito, G.A. 2021. Statistical Machine Learning dengan mlr3. Retrieved from https://gerrydito.github.io/Statistical-Learning/
Dito, G.A. 2021. Tree Based Method dengan mlr3. Retrieved from https://gerrydito.github.io/Tree-Based-Methods/