1 Kasus

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).

1.1 Libraries and Setup

# 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)

1.2 Impor Dataset

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

2 Membuat Model Neural Network

2.1 Model Neural Network Tanpa Layer

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

2.2 Model Neural Network Dengan 1 Layer

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.

2.3 Model Neural Network Dengan 2 Layer

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.

3 Menguji Model Dengan Data Test

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

3.1 Pengujian Model 1

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.

3.2 Pengujian Model 2

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.

3.3 Pengujian Model 3

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.

3.4 Kesimpulan Pengujian Model

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.

4 Pembuatan 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.

5 Kesimpulan

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.