Artificial Neural Network atau biasa yang disebut dengan jaringan saraf tiruan, biasanya hanya disebut neural network, adalah sistem komputasi yang diilhami oleh jaringan saraf biologis yang membentuk otak. Neural Network didasarkan pada kumpulan unit atau node yang terhubung yang disebut neuron buatan, yang secara longgar memodelkan neuron di otak .
Pada artikel ini, akan dilakukan analisis prediksi customer retention (retention). Customer retention akan melihat apakah pelanggan kembali berbelanja atau tidak atau apakah pelanggan kembali membeli atau tidak lagi. Data yang digunakan adalah data customer retention sebuah restoran. Restoran ingin memprediksi apakah pelanggan kembali lagi atau tidak bedasarkan beberapa variabel prediktor. Variabel prediktor adalah rating kebersihan restoran (clean), rating rasa makanan (taste), rating pelayanan restoran (service), dan rating kepuasan pelanggan (satisfaction).
# chunk options
knitr::opts_chunk$set(
message = FALSE,
warning = FALSE,
fig.align = "center",
comment = "#>"
)
# scientific notation
options(scipen = 9999)
# import libs
library(neuralnet)
library(tidyverse)
library(MLmetrics)
library(caret)
Mengimpor dataset yang merupakan data train yang akan digunakan dan memberi nama variabel
data_train <- read.csv("retention.csv")
names(data_train )<-c("clean","taste","service","satisfaction","retention")
data_train
ret_train<-data_train %>%
mutate(retention = as.factor(retention)) %>%
mutate(retention = factor(retention, levels = c(0,1), labels = c("Tidak", "Kembali")))
ret_train
Membuat model Neural Network tanpa hidden layer (hidden=0)
# fitting model
model_cl <- neuralnet(formula = retention ~ .,
data = ret_train,
hidden = 0,
linear.output = FALSE,
err.fct = 'ce',
act.fct = 'logistic')
plot(model_cl,rep = "best")
Model pertama kita namakan dengan model_cl
Membuat model Neural Network dengan 1 hidden layer (hidden=0)
model_cl2 <- neuralnet(formula = retention ~ .,
hidden = 2,
linear.output = F,
stepmax = 1e7,
data = ret_train)
plot(model_cl2,rep = "best")
Model Kedua kita namakan dengan model_cl2. Model terdiri dari satu layer dengan 2 node.
model_cl3 <- neuralnet(formula = retention ~.,
hidden = c(3,2),
linear.output = F,
stepmax = 1e8,
data = ret_train)
plot(model_cl3,rep = "best")
Model Kedua kita namakan dengan model_cl3. Model terdiri dari dua layer dengan 3 dan 2 node.
Kita akan menguji model dengan data test. Berikut adalah proses pengujian model dengan data test
data_test <- read.csv("retentiontest.csv")
names(data_test )<-c("clean","taste","service","satisfaction","retention")
data_test
ret_test<-data_test %>%
mutate(retention = as.factor(retention)) %>%
mutate(retention = factor(retention, levels = c(0,1), labels = c("Tidak", "Kembali")))
ret_test
retention_nn_pred <- neuralnet::compute(model_cl, covariate = ret_test)
retention_nn_pred$net.result[,1]
#> [1] 0.77553196 0.70554609 0.52665697 0.72750473 0.86891553 0.77580710
#> [7] 0.79559406 0.08706338 0.53071520 0.78454943 0.13017352 0.33992839
#> [13] 0.25544655 0.21915057 0.10228883 0.70020932 0.45081763 0.15568106
#> [19] 0.11527625 0.11199495
pred_label <- as.factor(ifelse(retention_nn_pred$net.result[,1] > 0.5, "Kembali", "Tidak"))
pred_label
#> [1] Kembali Kembali Kembali Kembali Kembali Kembali Kembali Tidak Kembali
#> [10] Kembali Tidak Tidak Tidak Tidak Tidak Kembali Tidak Tidak
#> [19] Tidak Tidak
#> Levels: Kembali Tidak
confusionMatrix(data = pred_label,
reference = ret_test$retention,
positive = "Kembali")
#> Confusion Matrix and Statistics
#>
#> Reference
#> Prediction Tidak Kembali
#> Tidak 9 1
#> Kembali 1 9
#>
#> Accuracy : 0.9
#> 95% CI : (0.683, 0.9877)
#> No Information Rate : 0.5
#> P-Value [Acc > NIR] : 0.0002012
#>
#> Kappa : 0.8
#>
#> Mcnemar's Test P-Value : 1.0000000
#>
#> Sensitivity : 0.90
#> Specificity : 0.90
#> Pos Pred Value : 0.90
#> Neg Pred Value : 0.90
#> Prevalence : 0.50
#> Detection Rate : 0.45
#> Detection Prevalence : 0.50
#> Balanced Accuracy : 0.90
#>
#> 'Positive' Class : Kembali
#>
Pengujian kinerja model dengan menggunakan matrix confusion. Hasil accuracy adalah 0,9.
retention_nn_pred2 <- neuralnet::compute(model_cl2, covariate = ret_test)
retention_nn_pred2$net.result[,1]
#> [1] 0.7771356393 0.7618075283 0.5206262696 0.7588360254 0.7983054428
#> [6] 0.7807894183 0.7887921423 0.0002827687 0.9998955253 0.7906153377
#> [11] 0.0001451478 0.2268811548 0.0153073587 0.0036700534 0.0001006627
#> [16] 0.9999795659 0.1229737069 0.0013937874 0.0005230063 0.0001065653
pred_label2 <- as.factor(ifelse(retention_nn_pred2$net.result[,1] > 0.5, "Kembali", "Tidak"))
pred_label2
#> [1] Kembali Kembali Kembali Kembali Kembali Kembali Kembali Tidak Kembali
#> [10] Kembali Tidak Tidak Tidak Tidak Tidak Kembali Tidak Tidak
#> [19] Tidak Tidak
#> Levels: Kembali Tidak
confusionMatrix(data = pred_label2,
reference = ret_test$retention,
positive = "Kembali")
#> Confusion Matrix and Statistics
#>
#> Reference
#> Prediction Tidak Kembali
#> Tidak 9 1
#> Kembali 1 9
#>
#> Accuracy : 0.9
#> 95% CI : (0.683, 0.9877)
#> No Information Rate : 0.5
#> P-Value [Acc > NIR] : 0.0002012
#>
#> Kappa : 0.8
#>
#> Mcnemar's Test P-Value : 1.0000000
#>
#> Sensitivity : 0.90
#> Specificity : 0.90
#> Pos Pred Value : 0.90
#> Neg Pred Value : 0.90
#> Prevalence : 0.50
#> Detection Rate : 0.45
#> Detection Prevalence : 0.50
#> Balanced Accuracy : 0.90
#>
#> 'Positive' Class : Kembali
#>
Pengujian kinerja model dengan menggunakan matrix confusion. Hasil accuracy adalah 0,8.
retention_nn_pred3 <- neuralnet::compute(model_cl3, covariate = ret_test)
retention_nn_pred3$net.result[,1]
#> [1] 0.7601459 0.7601459 0.7601459 0.7601459 0.7601459 0.7601459 0.7601459
#> [8] 0.0000000 0.7601459 0.7601459 0.0000000 0.7601458 0.0000000 0.0000000
#> [15] 0.0000000 0.7601459 0.7601459 0.0000000 0.0000000 0.0000000
pred_label3 <- as.factor(ifelse(retention_nn_pred3$net.result[,1] > 0.5, "Kembali", "Tidak"))
pred_label3
#> [1] Kembali Kembali Kembali Kembali Kembali Kembali Kembali Tidak Kembali
#> [10] Kembali Tidak Kembali Tidak Tidak Tidak Kembali Kembali Tidak
#> [19] Tidak Tidak
#> Levels: Kembali Tidak
confusionMatrix(data = pred_label3,
reference = ret_test$retention,
positive = "Kembali")
#> Confusion Matrix and Statistics
#>
#> Reference
#> Prediction Tidak Kembali
#> Tidak 7 1
#> Kembali 3 9
#>
#> Accuracy : 0.8
#> 95% CI : (0.5634, 0.9427)
#> No Information Rate : 0.5
#> P-Value [Acc > NIR] : 0.005909
#>
#> Kappa : 0.6
#>
#> Mcnemar's Test P-Value : 0.617075
#>
#> Sensitivity : 0.900
#> Specificity : 0.700
#> Pos Pred Value : 0.750
#> Neg Pred Value : 0.875
#> Prevalence : 0.500
#> Detection Rate : 0.450
#> Detection Prevalence : 0.600
#> Balanced Accuracy : 0.800
#>
#> 'Positive' Class : Kembali
#>
Pengujian kinerja model dengan menggunakan matrix confusion. Hasil accuracy adalah 0,75.
Berdasarkan hasil accuray, model_cl adalah model terbaik karena nilai accuracy adalah 0,9. Oleh karena itu model neural network tanpa layer merupakan model yang terbaik untuk melakukan prediksi. Implikasinya, kasus ini diselesaikan dengan menggunakan regresi logistik.
Model neural network tidak cocok untuk kasus ini. Maka kita akan membuat model regresi logistik.
library(class)
model_log <- glm(formula = retention~., family = "binomial",
data = ret_train)
model_logistic <- step(model_log , direction = "backward")
#> Start: AIC=95.49
#> retention ~ clean + taste + service + satisfaction
#>
#> Df Deviance AIC
#> - taste 1 85.487 93.487
#> - service 1 85.502 93.502
#> - satisfaction 1 87.038 95.038
#> <none> 85.485 95.485
#> - clean 1 108.992 116.992
#>
#> Step: AIC=93.49
#> retention ~ clean + service + satisfaction
#>
#> Df Deviance AIC
#> - service 1 85.527 91.527
#> <none> 85.487 93.487
#> - satisfaction 1 91.379 97.379
#> - clean 1 109.275 115.275
#>
#> Step: AIC=91.53
#> retention ~ clean + satisfaction
#>
#> Df Deviance AIC
#> <none> 85.527 91.527
#> - satisfaction 1 99.954 103.954
#> - clean 1 110.405 114.405
Berdasarkan hasil regresi logistik, variabel prediktor yang tepat adalah satisfaction dan clean untuk memprediksi customer retention.
Untuk kasus ini, model neural network tidak cocok untuk melakukan prediksi customer retention. Model yang cocok adalah regresi logistik.
Berdasarkan hasil regresi logistik, customer retention akan tepat diprediksi dengan menggunakan variabel satisfaction dan clean. Artinya restoran harus fokus kepada kepuasan pelanggan dan kebersihan restoran.