1 Kasus Bisnis 1

Sebuah perusahaan akan mengevaluasi saluran promosi apakah promosi yang dilakukan berdampak pada target penjualan. Perusahaan tersebut memiliki 60 cabang di 60 kota. Usaha promosi yang dilakukan antara lain penyebaran brosur, mengadakan event promosi, pemasangan reklame, dan pengerahan tenaga sales promotion. Publikasi ini akan melakukan evaluasi saluran pemasaran yang berdampak signifikan kepada target penjualan.

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(dplyr)
library(gtools)
library(gmodels)
library(ggplot2)
library(class)
library(tidyr)

1.2 Logistic Regression

Evaluasi dilakukan dengan membuat regresi logistik dimana variabel yang akan diprediksi adalah target penjualan. Variabel prediktor antara lain jumlah brosur yang disebar (brosur), jumlah event yang diadakan (event), jumlah reklame yang dipasang (reklame), dan jumlah tenaga sales promotion yang dikerahkan (sales).

1.3 Impor Dataset

Mengimpor dataset yang akan digunakan dan memberi nama variabel

target <- read.csv("promo.csv")
names(target) <- c("brosur", "event", "reklame", "sales", "target")
head(target)

Variabel target merupakan variabel numerik. Dalam regresi logistik variabel target harus diubah menjadi variabel kategorik. Pada tahap ini akan diubah menjadi variabel kategorik dengan kode sebagai berikut:

target1 <- target %>% 
  mutate(target = factor(target, levels = c(0,1), labels = c("Failed", "Success")))
target1

Variabel target sudah berubah menjadi variabel kategorik.Berikut adalah penjelasan dari beberapa variabel:

  • target: target penjualan apakah Success dan Failed
  • brosur: jumlah brosur yang sudah disebar
  • event: jumlah event promosi yang diadakan
  • reklame: jumlah reklame yang dipasang
  • sales: jumlah tenaga sales person yang dikerahkan untuk promosi

1.4 Cek Missing Data

Pada tahap ini akan dilakukan pengecekan missing data.

colSums(is.na(target1))
#>  brosur   event reklame   sales  target 
#>       0       0       0       0       0

Tidak ada data yang kososng.

1.5 Cek Variabel Target

Pada bagian ini akan dicek kategori dari variabel target beserta komposisinya.

prop.table(table(target1$target))
#> 
#>  Failed Success 
#>    0.45    0.55
table(target1$target)
#> 
#>  Failed Success 
#>      27      33

1.6 Membagi Data Menjadi Training vs Test

set.seed(303)
intrain <- sample(nrow(target1), nrow(target1)*0.7)
target_train <- target1[intrain,]
target_test <- target1[-intrain,]
target1$target %>% 
  levels()
#> [1] "Failed"  "Success"
target_train
target_test

1.7 Modelling

Pada tahap ini dilakukan pemodelan menggunakan regresi logistik. Pemodelan regresi logistik menggunakan fungsi glm(). Variabel yang digunakan adalah beberapa variabel yang kita anggap mempengaruhi target variabel, dimana variabel target menjadi variabel responnya.

model <- glm(formula = target~brosur+event+reklame+sales, family = "binomial", 
             data = target_train)
summary(model)
#> 
#> Call:
#> glm(formula = target ~ brosur + event + reklame + sales, family = "binomial", 
#>     data = target_train)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.9238  -0.9364   0.2139   0.8174   1.7562  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)  
#> (Intercept) -4.3504243  1.8992303  -2.291   0.0220 *
#> brosur       0.0003276  0.0005339   0.614   0.5395  
#> event        0.2385352  0.1311373   1.819   0.0689 .
#> reklame     -0.1520832  0.2492531  -0.610   0.5418  
#> sales        0.2528200  0.1940766   1.303   0.1927  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 57.843  on 41  degrees of freedom
#> Residual deviance: 42.353  on 37  degrees of freedom
#> AIC: 52.353
#> 
#> Number of Fisher Scoring iterations: 5

1.8 Multiple Linear Regression

Pada pemodelan yang pertama, masih banyak variabel prediktor yang tidak signifikan terhadap target variabel, oleh karena itu kita akan coba melakukan model fitting menggunakan metode stepwise.

model2 <- step(model, direction = "backward")
#> Start:  AIC=52.35
#> target ~ brosur + event + reklame + sales
#> 
#>           Df Deviance    AIC
#> - brosur   1   42.733 50.733
#> - reklame  1   42.735 50.735
#> - sales    1   44.190 52.190
#> <none>         42.353 52.353
#> - event    1   45.971 53.971
#> 
#> Step:  AIC=50.73
#> target ~ event + reklame + sales
#> 
#>           Df Deviance    AIC
#> - reklame  1   42.939 48.939
#> - sales    1   44.394 50.394
#> <none>         42.733 50.733
#> - event    1   48.935 54.935
#> 
#> Step:  AIC=48.94
#> target ~ event + sales
#> 
#>         Df Deviance    AIC
#> - sales  1   44.398 48.398
#> <none>       42.939 48.939
#> - event  1   49.434 53.434
#> 
#> Step:  AIC=48.4
#> target ~ event
#> 
#>         Df Deviance    AIC
#> <none>       44.398 48.398
#> - event  1   57.843 59.843
summary(model2)
#> 
#> Call:
#> glm(formula = target ~ event, family = "binomial", data = target_train)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.8590  -0.8586   0.3125   0.7855   1.5341  
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)   
#> (Intercept) -4.31882    1.53467  -2.814  0.00489 **
#> event        0.29255    0.09945   2.942  0.00326 **
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 57.843  on 41  degrees of freedom
#> Residual deviance: 44.398  on 40  degrees of freedom
#> AIC: 48.398
#> 
#> Number of Fisher Scoring iterations: 4

Dengan menggunakan metode backward pada stepwise, kita memperoleh model sebagai berikut.Variabel yang berpengaruh secara signifikan terhadap target penjualan adalah variabel event. Sedangkan variabel lain reklame, sales, dan brosur tidak berpengaruh terhadap target penjualan.

1.9 Prediksi

Dengan menggunakan model2 hasil dari stepwise, kita akan coba prediksi menggunakan data test yang sudah kita miliki.

target_test$prob_target<-predict(model2, type = "response", newdata = target_test)
target_test$prob_target
#>  [1] 0.3082770 0.4444597 0.3738737 0.3738737 0.3738737 0.5895302 0.5173608
#>  [8] 0.1988827 0.1214898 0.6580410 0.8611395 0.1563231 0.3082770 0.1214898
#> [15] 0.8223329 0.1563231 0.1214898 0.9523476
target_test$pred_target <- factor(ifelse(target_test$prob_target > 0.5,"Success","Failed"))
target_test[1:10, c("pred_target", "target")]

Pada tabel diatas, dapat diinterpretasikan bahwa hasil prediksi yang dilakukan lebih condong ke arah 1 yang artinya success.

1.10 Model Evaluation

Untuk mengevaluasi model yang telah kita buat, kita akan menggunakan confusion matrix.

library(caret)
log_conf <- confusionMatrix(target_test$pred_target, target_test$target, positive = "Success")
log_conf
#> Confusion Matrix and Statistics
#> 
#>           Reference
#> Prediction Failed Success
#>    Failed       8       4
#>    Success      0       6
#>                                           
#>                Accuracy : 0.7778          
#>                  95% CI : (0.5236, 0.9359)
#>     No Information Rate : 0.5556          
#>     P-Value [Acc > NIR] : 0.04535         
#>                                           
#>                   Kappa : 0.5714          
#>                                           
#>  Mcnemar's Test P-Value : 0.13361         
#>                                           
#>             Sensitivity : 0.6000          
#>             Specificity : 1.0000          
#>          Pos Pred Value : 1.0000          
#>          Neg Pred Value : 0.6667          
#>              Prevalence : 0.5556          
#>          Detection Rate : 0.3333          
#>    Detection Prevalence : 0.3333          
#>       Balanced Accuracy : 0.8000          
#>                                           
#>        'Positive' Class : Success         
#> 

Kinerja dari model regresi logistik adalah adalah Accuracy, Re-call/Sensitivity , Accuracy, dan Precision (Saito dan Rehmsmeier, 2015) Accuracy mengukur berapa banyak data kita yang diprediksi dengan benar. Re-call/Sensitivity mengukur dari semua hasil positif, berapa banyak yang diprediksi dengan benar. Specificity mengukur berapa banyak hasil negatif yang diprediksi dengan benar. Precision mengukur berapa banyak prediksi positif kita yang benar.

Accuracy <- round((10+4)/(10+4+2+2),2)
Sensitivity <- round((10)/(10+2),2)
Specificity <- round((4)/(4+2),2)
Precision <- round((10)/(10+2),2)

performance <- cbind.data.frame(Accuracy, Sensitivity, Specificity, Precision)
performance

Berdasarkan hasil confusionMatrix diatas:

  • Nilai Accuracy 78% yang artinya model bisa mengukur berapa banyak data kita yang diprediksi dengan benar.

  • Nilai Re-call/Sensitivity sebesar 83% yang artinya model bisa mengukur dari semua hasil positif, berapa banyak yang diprediksi dengan benar.

  • Nilai Specificity sebesar 67% yang artinya model bisa mengukur berapa banyak hasil negatif yang diprediksi dengan benar.

  • Nilai Precision sebesar 83% yang artinya model bisa mengukur berapa banyak prediksi positif yang benar.

1.11 Wawasan Bisnis

Kita panggil kembali summary model yang telah dibuat

summary(model2)
#> 
#> Call:
#> glm(formula = target ~ event, family = "binomial", data = target_train)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.8590  -0.8586   0.3125   0.7855   1.5341  
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)   
#> (Intercept) -4.31882    1.53467  -2.814  0.00489 **
#> event        0.29255    0.09945   2.942  0.00326 **
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 57.843  on 41  degrees of freedom
#> Residual deviance: 44.398  on 40  degrees of freedom
#> AIC: 48.398
#> 
#> Number of Fisher Scoring iterations: 4
exp(model2$coefficients) %>% 
  data.frame() 

1.11.1 Interpretasi Persamaan Logistik

Intercept: log of odds dari penjualan yang sesuai target bila nilai tidak ada event promosi (0).

Event: peningakatan log of odds target penjualan berhasil untuk setiap peningkatan 1 kali acara event promosi. Setiap ada tambahan even promosi sebesar satu kali, maka log of odds nya bertambah 0.156

contoh:

target = -5.1323 + 0.3687 * event

Sebagai COntoh:

Cabang ke-1 mengadakan event promosi sebanyak 10 kali, sedangkan Cabang ke-2 kedua mengadakan 11 kali. Hitung masing-masing log of oddsnya, berapa selisihnya?

Cabang1 <- -5.1323 + 0.3687 * 10 
Cabang2 <- -5.1323 + 0.3687 * 11 

Cabang2-Cabang1
#> [1] 0.3687
exp(0.3687)
#> [1] 1.445854

Insight 1: Setiap penambahan kegiata event promosi sebanyak 1 kali, maka akan meningkatkan kemungkinan 1.44 KALI cabang untuk berhasil mencapai target penjualan.

Insight 2: Cabang yang mengadakan 11 kali kegiatan event promosi akan 1.17 KALI lebih mungkin berhasil mencapai target penjualan dibandingkan yang cabang yang mengadakan event promosi sebanyak 10 kali.

Insight 3:Semakin banyak event promosi akan meningkatkan peluang cabang berhasil mencapai target penjualan.

1.11.2 Berapa Banyak Kegiatan Event Ideal?

Jika cabang mengadakan event sebanyak 10 kali berapa peluang penjualan memenuhi target?

# log of odds
library(gtools)
lods <- -5.1323 + 0.3687 * 10
inv.logit(lods)
#> [1] 0.190726

Keberhasilan memenuhi target jika kegiatan event diadakan 10 kali adalah 19,07%. Artinya kegiatan event sebanyak 10 kali belum optimal.

Jika cabang mengadakan event sebanyak 15 kali berapa peluang penjualan memenuhi target?

lods <- -5.1323 + 0.3687 * 15
inv.logit(lods)
#> [1] 0.5982551

Keberhasilan memenuhi target jika kegiatan event diadakan 10 kali adalah 59,82%. Artinya kegiatan event sebanyak 15 kali sudah optimal.

1.12 Rekomendasi Bisnis

Perusahaan dan cabang di setiap kota sebaiknya fokus kepada kegiatan even promosi dibanding saluran promosi lainnya.

Jumlah kegiatan event promosi sebaiknya minimal 15 kali agar peluang keberhasilan memenuhi target penjualan di atas 50 persen.

2 Kasus Bisnis 2

Sebuah perusahaan yang bergerak di bidang jasa pendidikan dan training ingin mengevaluasi promosi melalui email dan broadcast whatsapp. Email promosi dan broadcast whatsapp berisi promosi yang mendidik dan informatif. Diharapkan promosi tersebut membuat calon konsumen mau ikut bergabung mengikuti training. Berdasarkan data yang dimiliki bagian promosi, ada 10 calon konsumen yang telah didata telah dikirimi email dan broadcast whatsapp promosi. Dari ke-10 calon konsumen tersebut ada yang memutuskan ikut dan tidak ikut.

2.1 Dataset

Berikut adalah rinciannya datanya.

email<-c(7,7,3,2,8,2,4,3,7,6,3,2,2,7,7)
whatsapp<-c(6,5,4,4,7,3,5,2,8,7,3,3,3,6,6)
keputusan<-factor(c("ikut","ikut","tidak","tidak","ikut","tidak","tidak","tidak","ikut","ikut","tidak","tidak","tidak","ikut","ikut"))
datapromo <- cbind.data.frame(email, whatsapp, keputusan)
datapromo 

Keterangan Data email = frekuens email yang dikirim whatsapp = frekuensi whatsapp yang dikirim keputusan = Keputusan ikut training atau tidak

2.2 Melakukan Prediksi dengan K-NN

Kemudian perusahaan ingin melihat pengaruh promosi dengan dengan 6 kali mengirim email dan 6 kali mengirim whatsapp. Apakah dengan jumlah promosi sebanyak itu memiliki peluang yang besar untuk ikut training?

Permasalahan ini akan dipecahkan dengan metode K-Nearest Neighboor (K-NN)

promo<-cbind(email,whatsapp)
promo
#>       email whatsapp
#>  [1,]     7        6
#>  [2,]     7        5
#>  [3,]     3        4
#>  [4,]     2        4
#>  [5,]     8        7
#>  [6,]     2        3
#>  [7,]     4        5
#>  [8,]     3        2
#>  [9,]     7        8
#> [10,]     6        7
#> [11,]     3        3
#> [12,]     2        3
#> [13,]     2        3
#> [14,]     7        6
#> [15,]     7        6
promotest<-cbind(6,6)
promotest
#>      [,1] [,2]
#> [1,]    6    6
hasil<-knn(promo,promotest,keputusan,k=3)
hasil
#> [1] ikut
#> Levels: ikut tidak

Kesimpulan: dengan melakukan promosi dengan dengan 6 kali mengirim email dan 6 kali mengirim whatsapp kepada calon konsumen, maka konsumenberpeluang besar akan ikut training.