UAS Machine Learning
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. Data mencangkup 50.000 orang pelanggan dengan 11 variabel sebagai berikut :
X1
: rata-rata durasi melakukan panggilan per bulan (menit)X2
: rata-rata penghasilan dari transaksi panggilan perbulan (Rp)X3
: rata-rata frekuensi melakukan panggilan per bulanX4
: persentase panggilan di jam kerjaX5
: persentase panggilan sesama operatorX6
: rata-rata penghasilan dari transaksi SMS per bulan (Rp)X7
: persentase transaksi SMS sesama operatorX8
: rata-rata pemakaian data per bulan (MB)X9
: rata-rata penghasilan dari transaksi pemakaian data per-bulan (Rp)X10
: rata-rata frekuensi melakukan recharge pulsa per bulanX11
: rata-rata banyaknya wilayah yang dikunjungi per bulan
Data
library(tidyverse)
library(caret)
library(rpart)
library(rpart.plot)
library(vip)
library(Metrics)
library(e1071)
library(pROC)
library(adabag)
library(DT)
library(AppliedPredictiveModeling)
library(NeuralNetTools)
library(skimr)
library(randomForest)
library(mlbench)
## Warning: package 'mlbench' was built under R version 4.1.2
<- read.csv("C:/sqlite/db/mydata.csv")
data str(data)
## 'data.frame': 50000 obs. of 13 variables:
## $ ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ X1 : int 257 24 1 627 42 65 209 11 16 117 ...
## $ X2 : int 13643 13897 760 41160 19002 38253 76895 12650 2491 55057 ...
## $ X3 : int 27 15 1 97 38 43 262 10 3 121 ...
## $ X4 : num 0.78 0.739 0.5 0.707 0.75 ...
## $ X5 : num 0.963 0.906 1 0.998 0.964 ...
## $ X6 : int 5217 18025 3275 2864 2794 1122 14061 16131 1892 4222 ...
## $ X7 : num 0.769 0.291 0.962 0.723 0.748 ...
## $ X8 : int 768 2368 2542 0 0 5 0 0 405 0 ...
## $ X9 : int 30006 39954 43544 0 0 1719 0 0 18934 0 ...
## $ X10: num 6.3 7.3 1.3 9.3 4 17 24.7 10 3.7 8.7 ...
## $ X11: num 4.7 5.3 1.3 5 1 14.7 9.7 5.3 2 6 ...
## $ Y : int 1 1 0 0 0 1 0 0 0 0 ...
Variabel Y merupkan variabel respon yang merupakan data kategorik dengan angka 0 (tidak berpotensi) dan 1 (berpotensi) untuk direkrut mengikuti channel. sedangkan variabel X1 - X11 merupakan data integer dan numerik.
Eksplorasi Data
featurePlot(x=data[,8:12], y= as.factor(data[,13]), ##angka x dan y dimana y didefinisikan sebagai faktor
plot="box", scales=list(x=list(relation="free"), ##scale free menandakan bahwa skala akan disesuaikan berdasarkan skala data yang ada
y=list(relation="free"),auto.key=list(columns=4)))
featurePlot(x=data[,2:7], y= as.factor(data[,13]), # dibagi menjadi 2 kali agar plot tidak terlalu kecil dan lebih mudah dipahami
plot="box",
scales=list(x=list(relation="free"),
y=list(relation="free"),auto.key=list(columns=4)))
Dari box plot diatas dapat terlihat bahwa untuk masing - masing variabel dibagi berdasarkan Y = 0 dan Y = 1. Terlihat pada setiap box plot memiliki banyak pencilan maka dapat dikatakan bahwa distribusi data cenderung kurang baik.
<- data[,2:13] ## Membuang variable indeks
newdata str(newdata)
## 'data.frame': 50000 obs. of 12 variables:
## $ X1 : int 257 24 1 627 42 65 209 11 16 117 ...
## $ X2 : int 13643 13897 760 41160 19002 38253 76895 12650 2491 55057 ...
## $ X3 : int 27 15 1 97 38 43 262 10 3 121 ...
## $ X4 : num 0.78 0.739 0.5 0.707 0.75 ...
## $ X5 : num 0.963 0.906 1 0.998 0.964 ...
## $ X6 : int 5217 18025 3275 2864 2794 1122 14061 16131 1892 4222 ...
## $ X7 : num 0.769 0.291 0.962 0.723 0.748 ...
## $ X8 : int 768 2368 2542 0 0 5 0 0 405 0 ...
## $ X9 : int 30006 39954 43544 0 0 1719 0 0 18934 0 ...
## $ X10: num 6.3 7.3 1.3 9.3 4 17 24.7 10 3.7 8.7 ...
## $ X11: num 4.7 5.3 1.3 5 1 14.7 9.7 5.3 2 6 ...
## $ Y : int 1 1 0 0 0 1 0 0 0 0 ...
$Y =ifelse(newdata$Y == 0 ,"No","Yes") # mengubah 0,1 pada Y menjadi 0 tidak dan 1 iya
newdata
<- skim(newdata[,1:11]) ## Melihat summari data dan memeriksa terdapat adanya data hilang NA
skimmed <- skimmed[, c(1:6,12)] ## 1:6 -12 menunjukan apasaja summery yang ingin ditampilkan seperti mean,sd,NA dan lainya
skim skim
Name | newdata[, 1:11] |
Number of rows | 50000 |
Number of columns | 11 |
_______________________ | |
Column type frequency: | |
numeric | 11 |
________________________ | |
Group variables | None |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | hist |
---|---|---|---|---|---|
X1 | 0 | 1 | 110.67 | 180.63 | ▇▁▁▁▁ |
X2 | 0 | 1 | 27907.54 | 27361.61 | ▇▁▁▁▁ |
X3 | 0 | 1 | 40.23 | 51.21 | ▇▁▁▁▁ |
X4 | 0 | 1 | 0.73 | 0.14 | ▁▁▁▇▃ |
X5 | 0 | 1 | 0.88 | 0.20 | ▁▁▁▁▇ |
X6 | 0 | 1 | 6745.71 | 7915.11 | ▇▁▁▁▁ |
X7 | 0 | 1 | 0.77 | 0.25 | ▁▁▂▃▇ |
X8 | 0 | 1 | 946.87 | 2260.86 | ▇▁▁▁▁ |
X9 | 0 | 1 | 16144.17 | 26826.08 | ▇▁▁▁▁ |
X10 | 0 | 1 | 7.13 | 4.84 | ▇▆▂▁▁ |
X11 | 0 | 1 | 3.68 | 2.41 | ▇▁▁▁▁ |
Struktur dari dataset yang digunakan menunjukan bahwa dataset terdiri dari 50.000 observasi dan 12 variabel yang terbasuk varibale Y didalamnya. Didalam struktur data juga ditampilkan tipe data pada setiap variabel. Selanjutnya dengan menggunakan skimmed kita dapat melihat summary data diantaranya mean (rata-rata), standar deviasi, dan bentuk histogram dari setiap variabelnya. Seperti data pada X10 terlihat lebih condong ke kanan persebaran datanya sedangkan data X1,X2,X3 terlihat lebih dominan berada pada daerah kiri.
Split Data
set.seed(102)
<- createDataPartition(newdata$Y, p=0.75,list=FALSE) #angka 0.75 pembagian data
index <- newdata[ index,] # include angka 0.75
train <- newdata[-index,] # tidak temasuk kedalam 0.75
test head(train)
## X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 Y
## 1 257 13643 27 0.7799619 0.9627874 5217 0.7687453 768 30006 6.3 4.7 Yes
## 2 24 13897 15 0.7393772 0.9061206 18025 0.2906286 2368 39954 7.3 5.3 Yes
## 3 1 760 1 0.5000000 1.0000000 3275 0.9617486 2542 43544 1.3 1.3 No
## 4 627 41160 97 0.7065245 0.9976897 2864 0.7232183 0 0 9.3 5.0 No
## 6 65 38253 43 0.7786787 1.0000000 1122 1.0000000 5 1719 17.0 14.7 Yes
## 7 209 76895 262 0.7715915 0.9784123 14061 0.6753892 0 0 24.7 9.7 No
dim(train)
## [1] 37500 12
dim(test)
## [1] 12500 12
Pada pemodelan klasifikasi dibutuhkan untuk membagi data menjadi data training dan data testing. Data training digunakan untuk membuat model dari klasifikasi sdangkan data testing digunakan untuk menguji peforma dari klasifikasi. Pada pemodelan kali ini training set 0.75 dan testing 0.25. Berikut merupakan nilai dari sebagian data training dengan jumlah observasi sebanyak 37.500 dan jumlah observasi data testing 12.500.
Model Klasifikasi
Cross Validation adalah metode untuk mencari angka optimal dari suatu model dengan mengevaluasi model tersebut. Cross validation yang digunakan adalah K-fold Validation dengan K = 5.
set.seed(234)
= trainControl( #Cross validation k =5 dengan mengunakan k-fold
control method = "cv",
number = 5,
savePredictions = "final", # angka akhir prediksi yang diambil adalah angka final atau terbaik
classProbs = TRUE,
summaryFunction = twoClassSummary)
Regresi Logistik
Regresi Logistik merupakan sebuah model yang dapat digunakan untuk klasifikasi dan regresi(melihat pengaruh dependent terhadapa independent). Metode regresi logistik yang digunakan kali ini merupakan metode klasifikasi yang digunakan untuk mengklasifikasikan sebuah data ke dalam data kategorik Y Berpotensi
atau TidaK Berpotensi
yang biasa disebut dengan biner.
<- train(
log form = Y ~ ., #angka Y
data = newdata, #nama data
trControl = control, # Cross validation
method = "glm", # model logreg
family = "binomial") # berbetuk biner 1 dan 0
= predict(log, test) # angka testing untuk menguji model
predlog = predict(log,test,type="prob")
p_predlog = factor(test$Y) # angka actual Test sebagai pembanding model
actuallog
<- confusionMatrix(actuallog, predlog, positive = "Yes") # Mencari angka confusion matrix
cm_log #dengan angka positive yang diharapkan adalah postive = YES/ berpotensi
Berdasarkan output confusion matrix
pada model regresi logistik diatas dapat dilihat ada sebanyak 216 pelanggan yang diprediksi tepat dan 203 pelanggan berpotensi tidak diklasifikasikan secara tepat. Sebanyak 9963 yang diprediksi tepat tidak memiliki potensial dan 2118 orang yang tidak berpotensi diklasifikasikan kedalam berpotensi, kesalahan dalam klsifikasi masih cendrung besar.
Berdasarkan angka akurasi ternyata model regresi logistik memiliki angka akurasi yaitu 81.43 % dan dapat dikatakan bahwa akurasi model ini cukup baik
cm_log
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 9963 203
## Yes 2118 216
##
## Accuracy : 0.8143
## 95% CI : (0.8074, 0.8211)
## No Information Rate : 0.9665
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.1061
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.51551
## Specificity : 0.82468
## Pos Pred Value : 0.09254
## Neg Pred Value : 0.98003
## Prevalence : 0.03352
## Detection Rate : 0.01728
## Detection Prevalence : 0.18672
## Balanced Accuracy : 0.67010
##
## 'Positive' Class : Yes
##
= roc(test$Y, p_predlog[,"Yes"]) roclog
## Setting levels: control = No, case = Yes
## Setting direction: controls < cases
ggroc(roclog,linetype = "dashed", size = 1,color="blue4")+
geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color="darkgrey", linetype="dashed")
$auc roclog
## Area under the curve: 0.7386
angka AUC pada model Regresi Logistik dengan menggunakan kurva ROC-nya adalah 0.7386.
Pohon Klasifikasi
Adalah model klasifikasi yang dibentuk menyerupai sebuah pohon dengan tiga bagaian yaitu :
Root (akar) yang merupakan bagian start dari klasifikasi
Internal node adalah bagian yang memiliki 1 bagian input daja dan memiliki setidaknya 2 cabang
Leaf (terminal) merupakan bagian akhir klasifikasi yang juga merupakan suatu angka akhir dari prediksi klasifikasi.
set.seed(012)
<- train(Y ~ ., # Variable Y
tree data = train, # nama data
method = "rpart", #Metode decision tree dengan rpart
tuneLength = 10, #Pemilihan tune da[at dilaukan dengan ditentukan sendiri
metric = "ROC",
trControl = control) # Cross validation dengan hasil yang diambil adallah hasil final/terbaik
print(tree)
## CART
##
## 37500 samples
## 11 predictor
## 2 classes: 'No', 'Yes'
##
## No pre-processing
## Resampling: Cross-Validated (5 fold)
## Summary of sample sizes: 30000, 30001, 30000, 30000, 29999
## Resampling results across tuning parameters:
##
## cp ROC Sens Spec
## 0.001142531 0.6384744 0.9724572 0.1379558
## 0.001213939 0.6384644 0.9739654 0.1333845
## 0.001285347 0.6386312 0.9738341 0.1329551
## 0.001428163 0.6394424 0.9726535 0.1369551
## 0.001713796 0.6393075 0.9761948 0.1283897
## 0.001749500 0.6384518 0.9770146 0.1252491
## 0.002856327 0.6375517 0.9783262 0.1172542
## 0.003141959 0.6360755 0.9797691 0.1113927
## 0.003284776 0.6360755 0.9797691 0.1113927
## 0.007283633 0.5824688 0.9872445 0.0665543
##
## ROC was used to select the optimal model using the largest value.
## The final value used for the model was cp = 0.001428163.
rpart.plot(tree$finalModel, tweak = 1.6) # melihat bentuk pohon klasifikasi dengan besar setiap node adalah 1.6
= predict(tree, test) # angka prediksi
predtree = predict(tree,test,type="prob")
p_predtree = factor(test$Y)
actualtree
<- confusionMatrix(actualtree, predtree, positive = "Yes")
cm_tree cm_tree
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 9866 300
## Yes 1982 352
##
## Accuracy : 0.8174
## 95% CI : (0.8106, 0.8242)
## No Information Rate : 0.9478
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.1679
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.53988
## Specificity : 0.83271
## Pos Pred Value : 0.15081
## Neg Pred Value : 0.97049
## Prevalence : 0.05216
## Detection Rate : 0.02816
## Detection Prevalence : 0.18672
## Balanced Accuracy : 0.68630
##
## 'Positive' Class : Yes
##
Berdasarkan output confusion matrix
pada model pohon klasifikasi diatas dapat dilihat bahwa ada sebanyak 352 pelanggan yang diprediksi tepat memiliki potensial untuk diajak menggunakan channel perbankan, 9866 yang diprediksi tidak memiliki potensial. Namun, masih terdapat banyak kesalahan dalam prediksi, masih ada sebanyak 1982 yang diprediksi tidak berpotensi yang seharusnya berpotensi, dan ada sebanyak 300 yang diprediksi berpotensi yang seharusnya tidak berpotensi. Jika dilihat berdasarkan akurasinya tenyata model decision tree memiliki akurasi yaitu 81.74%.
= roc(test$Y, p_predtree[,"Yes"]) roctree
## Setting levels: control = No, case = Yes
## Setting direction: controls < cases
ggroc(roctree,linetype = "dashed", size = 1,color="blue4")+
geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color="darkgrey", linetype="dashed")
$auc roctree
## Area under the curve: 0.6422
angka AUC pada model Pohon Klasifikasi dengan menggunakan kurva ROC-nya adalah 0.6422 angka ini lebih kecil dari model Regresi Logistik.
Random Forest
Metode random forest adalah pengembangan dari metode CART, yaitu dengan menerapkan metode bootstrap aggregating (bagging) dan random feature selection (Breiman 2001). Metode random forest merupakan salah satu metode pohon gabungan dimana sebanyak k pohon ditumbuhkan sehingga terbentuk suatu hutan (forest), kemudian analisis dilakukan pada kumpulan pohon tersebut dengan cara menggabungkan hasil prediksi dari k pohon yang terbentuk.
set.seed(012)
<- train(Y ~ .,
forest data = train,
method = "ranger",
metric = "ROC",
importance = 'permutation',
trControl = control)
## Growing trees.. Progress: 93%. Estimated remaining time: 2 seconds.
## Growing trees.. Progress: 82%. Estimated remaining time: 6 seconds.
## Growing trees.. Progress: 89%. Estimated remaining time: 3 seconds.
## Growing trees.. Progress: 89%. Estimated remaining time: 3 seconds.
## Growing trees.. Progress: 91%. Estimated remaining time: 2 seconds.
= predict(forest, test, type = "raw")
predforest = predict(forest,test,type="prob")
p_predforest = factor(test$Y)
actualforest
<- confusionMatrix(actualforest, predforest, positive = "Yes")
cm_forest cm_forest
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 9977 189
## Yes 2072 262
##
## Accuracy : 0.8191
## 95% CI : (0.8123, 0.8258)
## No Information Rate : 0.9639
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.1359
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.58093
## Specificity : 0.82804
## Pos Pred Value : 0.11225
## Neg Pred Value : 0.98141
## Prevalence : 0.03608
## Detection Rate : 0.02096
## Detection Prevalence : 0.18672
## Balanced Accuracy : 0.70448
##
## 'Positive' Class : Yes
##
Berdasarkan output confusion matrix pada model pohon klasifikasi dapat dilihat bahwa ada sebanyak 262 pelanggan yang diprediksi tepat memiliki potensial untuk diajak menggunakan channel perbankan, 9977 yang diprediksi tidak memiliki potensial. Namun, masih terdapat banyak kesalahan dalam prediksi, masih ada sebanyak 2072 yang diprediksi tidak berpotensi yang seharusnya berpotensi, dan ada sebanyak 189 yang diprediksi berpotensi yang seharusnya tidak berpotensi. Jika dilihat berdasarkan akurasinya tenyata model decision tree memiliki akurasi yaitu 81.91%
= roc(test$Y, p_predforest[,"Yes"]) rocforest
## Setting levels: control = No, case = Yes
## Setting direction: controls < cases
ggroc(rocforest,linetype = "dashed", size = 1,color="blue4")+
geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color="darkgrey", linetype="dashed")
$auc rocforest
## Area under the curve: 0.7578
angka AUC pada model Pohon Klasifikasi dengan menggunakan kurva ROC-nya adalah 0.7578 nilia ini lebih baik dibandingkan dengan Model Regresi Logistik dan Pohon Klasifikasi.
vip(forest,aesthetics = list(fill = "blue4")) +
ggtitle("Random Forest") +
theme_minimal()
Dari hasil output diatas terlihat bahwa urutan variabel/faktor importance berutuan dimulai dari yang paling berpengaruh adalah X9
yaitu rata-rata penghasilan dari transaksi pemakaian data per-bulan (Rp) dan X2
rata-rata penghasilan dari transaksi panggilan perbulan (Rp) Sedangkan variable yang paling sedikit mempengaruhi adalah X11
: rata-rata banyaknya wilayah yang dikunjungi per bulan. Variable yang berpengaruh diskalakan dengan angka maksimum 100.
Bagging
Bagging merupakan salah satu model ensemble yang sederhana namun dapat meningkatkan hasil prediksi (Liang & Zhang, 2011). Model ini bekerja dengan mengurangi variansi atau noise pada prediksi dan sangat baik digunakan pada data yang tidak stabil.
set.seed(012)
<- train( Y ~ .,
treebag data = train,
method = "treebag",
trControl = control,
metric = "ROC")
= predict(treebag, test, type = "raw")
predtreebag = predict(treebag,test,type="prob")
p_predtreebag = factor(test$Y)
actualtreebag
<- confusionMatrix(actualtreebag, predtreebag, positive = "Yes")
cm_treebag cm_treebag
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 9619 547
## Yes 1826 508
##
## Accuracy : 0.8102
## 95% CI : (0.8032, 0.817)
## No Information Rate : 0.9156
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.2077
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.48152
## Specificity : 0.84045
## Pos Pred Value : 0.21765
## Neg Pred Value : 0.94619
## Prevalence : 0.08440
## Detection Rate : 0.04064
## Detection Prevalence : 0.18672
## Balanced Accuracy : 0.66099
##
## 'Positive' Class : Yes
##
Berdasarkan output confusion matrix pada model pohon klasifikasi dapat dilihat bahwa ada sebanyak 547 pelanggan yang diprediksi tepat memiliki potensial untuk diajak menggunakan channel perbankan, 9619 yang diprediksi tidak memiliki potensial. Namun, masih terdapat banyak kesalahan dalam prediksi, masih ada sebanyak 1826 yang diprediksi tidak berpotensi yang seharusnya berpotensi, dan ada sebanyak 508 yang diprediksi berpotensi yang seharusnya tidak berpotensi. Jika dilihat berdasarkan akurasinya tenyata model decision tree memiliki akurasi yaitu 81.02%
= roc(test$Y, p_predtreebag[,"Yes"]) roctreebag
## Setting levels: control = No, case = Yes
## Setting direction: controls < cases
ggroc(roctreebag,linetype = "dashed", size = 1,color="blue4")+
geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color="darkgrey", linetype="dashed")
$auc roctreebag
## Area under the curve: 0.7245
Niai AUC pada model bagging adalah 0.7245 jika dibandingkan dengan model sebelumnya model bagging memiliki angka AUC dibawah model Regresi Logistik dan Random Forest.
AdaBoost
Adative Boosting atau Adaboost adalah model suatu model kombinasi,berjalan secara berhubungan pada setiap tahapnya (sequancing). Model awal merupakan suatu model tree yang didefinisikan sebanyak n model.Kemudian kesalahan dalam klasifikasi akan dikirim ke proses kedua dan berulang sebanyak N hingga kondisi tertentu didapatkan. Adaboost hanya memiliki 1 root (akar) dan 2 leaf (terminal) yang disebut dengan stump.
set.seed(012)
<- train( Y ~ .,
adaboost data = train,
method = "AdaBoost.M1",
trControl = control,
metric = "ROC")
= predict(adaboost, test, type = "raw")
predadaboost = predict(adaboost,test,type="prob")
p_predadaboost = factor(test$Y)
actualadaboost
<- confusionMatrix(actualadaboost, predadaboost, positive = "Yes")
cm_adaboost cm_adaboost
## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 9805 361
## Yes 1897 437
##
## Accuracy : 0.8194
## 95% CI : (0.8125, 0.8261)
## No Information Rate : 0.9362
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.2032
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.54762
## Specificity : 0.83789
## Pos Pred Value : 0.18723
## Neg Pred Value : 0.96449
## Prevalence : 0.06384
## Detection Rate : 0.03496
## Detection Prevalence : 0.18672
## Balanced Accuracy : 0.69276
##
## 'Positive' Class : Yes
##
Pada model adaboost didapatkan angka akurasi sebaesar 81.94% angka akurasi yang didapatkan hampir sama dengan metode random forest yaitu 81.91%. Pelanggan operator telekomunikasi seluler yang potensial untuk bergabung dalam channel perbankan.yang diprediksikan secara benar sebanyak 437 dan diprediksi salah 361. Sedangkan pelanggan yang tidak berpotensi yang di prediksi secara benar sebanyak 9805 orang dan yang salah sebanyak 1897.
= roc(test$Y, p_predadaboost[,"Yes"]) rocadaboost
## Setting levels: control = No, case = Yes
## Setting direction: controls < cases
ggroc(rocadaboost,linetype = "dashed", size = 1,color="blue4")+
geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color="darkgrey", linetype="dashed")
$auc rocadaboost
## Area under the curve: 0.753
AUC pada model Adaboost adalah 0.753 dimana angka ini lebih baik dibandigkan Regresi Logistik, Pohon Regresi dan Bagging. Tapi, angka AUC adaboost tidak terlalu jauh berbeda dari model Random Forest dengan selisih 0.0049.
Perbandingan Model
ggroc(list(Logistic = roclog,Decision_Tree = roctree,
Random_Forest = rocforest,
Bagging = roctreebag,
Adabost = rocadaboost ),linetype = "dashed", size = 1)+
geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color="darkgrey", linetype="dashed")
Semakin baik prediksi dari suatu model ditandai dengan semakin besar angka AUC Area Under Curva
dari kurva ROC-nya. Jika dilihat hanya menggunakan kurva ROC daerah paling lebar atau garis teratas yaitu model Random forest yang juga terlihat berhimpitan dengan Adaboost yang menandakan bahwa model pengklasifikasian memiliki nilai ROC yang hampir mirip . Sedangkan model yang kurang baik dibandingkan 4 model lainya adalah model Pohon klasifikasi (Decision tree).
<- resamples(list(RegresiLogistik =log ,PohonRegresi = tree, RandomForest= forest,Bagging = treebag, AdaativeBoost = adaboost))
results
bwplot(results)
Berdasarkan boxplot diatas dapat juga dilihat bahwa ROC adaboost dan Random Forest sangat berdekatan dengan seisih yang sangat kecil dan hampir sama.
<- auc(roclog)
auclog <- auc(roctree)
auctree <- auc(rocforest)
aucforest <- auc(roctreebag)
auctreebag <- auc(rocadaboost)
aucadaboost
<- data.frame(Metode = c("Regresi Logistik","Pohon Regresi","Random Forest","Bagging","Adaative Boost"),
compa AUC = c(auclog,auctree,aucforest,auctreebag,aucadaboost),
ACC = c(cm_log$overall[1],cm_tree$overall[1],
$overall[1],cm_treebag$overall[1],cm_adaboost$overall[1]))
cm_forestdatatable(compa)
Berdasarkan angka AUC Random forest memang memiliki angka yang lebih tingi dibandingkan Adative Boosting namun selisihnya hanya sedikit, begitu juga dengan angka akurasi antara dua model tersebut. Disini diambilah ukuran Akurasi sebagai nilai keputusan maka model yang lebih baik adalah model Adaboost dengan akurasi 81.94%
Kesimpulan
Hasil dari model yang dibentuk untuk memprediksi pelanggan operator telekomunikasi seluler yang potensial untuk bergabung dalam channel perbankan diperoleh model Adative Boosting dengan akurasi 81.94% merupakan model terbaik meskipun sebenaranya model Random forest juga memiliki akurasi yang hampir sama.
Pada model Random Forest memiliki kelebihan dalam penyajian feature importance dimana secara berurutan variabel importancenya adalah :
X9
: rata-rata penghasilan dari transaksi pemakaian data per-bulan (Rp)X2
: rata-rata penghasilan dari transaksi panggilan perbulan (Rp)X5
: persentase panggilan sesama operatorX8
: rata-rata pemakaian data per bulan (MB)X10
: rata-rata frekuensi melakukan recharge pulsa per bulanX3
: rata-rata frekuensi melakukan panggilan per bulanX1
: rata-rata durasi melakukan panggilan per bulan (menit)X7
: persentase transaksi SMS sesama operatorX4
: persentase panggilan di jam kerjaX11
: rata-rata banyaknya wilayah yang dikunjungi per bulan
Namun dua model yang memiliki akurasi yang baik diatas masih perlu dipertimbangkan metode evaluasi terhadap modelnya. Dikarenakan kesalahan dalam pengklasifikasian data yang yang sebenarnya tidak berpotensi diklasifikasikan sebagai pelanggan berpotensi masih sangat cukup besar hal ini terjadi karena data yang tidak setimbang.
Referensi
- https://www.mygreatlearning.com/blog/adaboost-algorithm/
- https://medium.com/iykra/mengenal-decision-tree-dan-manfaatnya-b98cf3cf6a8d
- https://bookdown.org/michela_cameletti/rlabnotes_mlfe2021/trees.html#pruning
- https://topepo.github.io/caret/train-models-by-tag.html#random-forest
- Liang, G., & Zhang, C. (2011). Empirical Study of Bagging Predictors on Medical Data. Proceedings of the 9-th Australasian Data Mining Conference, 31-40