1. Pemahaman Masalah (Business Understanding)

Perusahaan melakukan campaign marketing untuk meningkatkan penjualan dan menarik pelanggan agar membeli produk yang ditawarkan. Namun, tidak semua pelanggan memberikan respons positif terhadap campaign tersebut. Ada pelanggan yang tertarik dan merespons promosi, tetapi ada juga yang tidak memberikan respons sama sekali.

Masalah yang dihadapi perusahaan adalah sulitnya menentukan pelanggan mana yang berpotensi merespons campaign marketing. Jika promosi diberikan kepada semua pelanggan tanpa analisis, perusahaan dapat mengeluarkan biaya marketing yang besar tetapi hasilnya kurang efektif.

Oleh karena itu, diperlukan analisis data untuk memprediksi respons pelanggan terhadap campaign marketing. Dengan analisis ini, perusahaan dapat mengetahui karakteristik pelanggan yang lebih berpotensi memberikan respons positif sehingga strategi promosi dapat dilakukan lebih tepat sasaran.

Metode yang digunakan dalam penelitian ini adalah klasifikasi menggunakan Logistic Regression karena target data berupa dua kategori, yaitu:

1 = pelanggan merespons campaign 0 = pelanggan tidak merespons campaign

2. Pemahaman Data (Data Understanding)

Dataset yang digunakan adalah marketing_campaign.csv yang berisi data pelanggan dan aktivitas pembelian mereka. Dataset ini memiliki sekitar 2240 baris data dan beberapa variabel yang berkaitan dengan informasi pelanggan, pola pembelian, serta respons terhadap campaign marketing.

Beberapa variabel penting dalam dataset antara lain:

Income : pendapatan pelanggan.

Education : tingkat pendidikan pelanggan.

Marital_Status : status pernikahan pelanggan.

Recency : jarak waktu sejak pembelian terakhir pelanggan.

MntWines : jumlah pembelian produk wine.

MntMeatProducts : jumlah pembelian produk daging.

NumWebPurchases : jumlah pembelian melalui website.

NumStorePurchases : jumlah pembelian langsung di toko.

NumCatalogPurchases : jumlah pembelian melalui katalog.

Response : target data yang menunjukkan apakah pelanggan merespons campaign atau tidak.

Dari hasil pemahaman data, diketahui bahwa dataset memiliki kombinasi data numerik dan kategorikal. Selain itu, terdapat beberapa missing value pada variabel Income sehingga perlu dilakukan preprocessing sebelum model dibangun.

Target utama dalam analisis ini adalah variabel Response, karena penelitian bertujuan untuk memprediksi kemungkinan pelanggan merespons campaign marketing berdasarkan karakteristik dan perilaku pembelian mereka.

# Import library
library(dplyr)
library(caret)
library(ggplot2)

# Membaca dataset
marketing <- read.csv2(
  "marketing_campaign.csv",
  header = TRUE,
  stringsAsFactors = FALSE
)

# Melihat struktur data
str(marketing)
## 'data.frame':    2240 obs. of  29 variables:
##  $ ID                 : int  5524 2174 4141 6182 5324 7446 965 6177 4855 5899 ...
##  $ Year_Birth         : int  1957 1954 1965 1984 1981 1967 1971 1985 1974 1950 ...
##  $ Education          : chr  "Graduation" "Graduation" "Graduation" "Graduation" ...
##  $ Marital_Status     : chr  "Single" "Single" "Together" "Together" ...
##  $ Income             : int  58138 46344 71613 26646 58293 62513 55635 33454 30351 5648 ...
##  $ Kidhome            : int  0 1 0 1 1 0 0 1 1 1 ...
##  $ Teenhome           : int  0 1 0 0 0 1 1 0 0 1 ...
##  $ Dt_Customer        : chr  "04/09/2012" "08/03/2014" "21/08/2013" "10/02/2014" ...
##  $ Recency            : int  58 38 26 26 94 16 34 32 19 68 ...
##  $ MntWines           : int  635 11 426 11 173 520 235 76 14 28 ...
##  $ MntFruits          : int  88 1 49 4 43 42 65 10 0 0 ...
##  $ MntMeatProducts    : int  546 6 127 20 118 98 164 56 24 6 ...
##  $ MntFishProducts    : int  172 2 111 10 46 0 50 3 3 1 ...
##  $ MntSweetProducts   : int  88 1 21 3 27 42 49 1 3 1 ...
##  $ MntGoldProds       : int  88 6 42 5 15 14 27 23 2 13 ...
##  $ NumDealsPurchases  : int  3 2 1 2 5 2 4 2 1 1 ...
##  $ NumWebPurchases    : int  8 1 8 2 5 6 7 4 3 1 ...
##  $ NumCatalogPurchases: int  10 1 2 0 3 4 3 0 0 0 ...
##  $ NumStorePurchases  : int  4 2 10 4 6 10 7 4 2 0 ...
##  $ NumWebVisitsMonth  : int  7 5 4 6 5 6 6 8 9 20 ...
##  $ AcceptedCmp3       : int  0 0 0 0 0 0 0 0 0 1 ...
##  $ AcceptedCmp4       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ AcceptedCmp5       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ AcceptedCmp1       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ AcceptedCmp2       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Complain           : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Z_CostContact      : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ Z_Revenue          : int  11 11 11 11 11 11 11 11 11 11 ...
##  $ Response           : int  1 0 0 0 0 0 0 0 1 0 ...
# Melihat ringkasan data
summary(marketing)
##        ID          Year_Birth    Education         Marital_Status    
##  Min.   :    0   Min.   :1893   Length:2240        Length:2240       
##  1st Qu.: 2828   1st Qu.:1959   Class :character   Class :character  
##  Median : 5458   Median :1970   Mode  :character   Mode  :character  
##  Mean   : 5592   Mean   :1969                                        
##  3rd Qu.: 8428   3rd Qu.:1977                                        
##  Max.   :11191   Max.   :1996                                        
##                                                                      
##      Income          Kidhome          Teenhome      Dt_Customer       
##  Min.   :  1730   Min.   :0.0000   Min.   :0.0000   Length:2240       
##  1st Qu.: 35303   1st Qu.:0.0000   1st Qu.:0.0000   Class :character  
##  Median : 51382   Median :0.0000   Median :0.0000   Mode  :character  
##  Mean   : 52247   Mean   :0.4442   Mean   :0.5062                     
##  3rd Qu.: 68522   3rd Qu.:1.0000   3rd Qu.:1.0000                     
##  Max.   :666666   Max.   :2.0000   Max.   :2.0000                     
##  NA's   :24                                                           
##     Recency         MntWines         MntFruits     MntMeatProducts 
##  Min.   : 0.00   Min.   :   0.00   Min.   :  0.0   Min.   :   0.0  
##  1st Qu.:24.00   1st Qu.:  23.75   1st Qu.:  1.0   1st Qu.:  16.0  
##  Median :49.00   Median : 173.50   Median :  8.0   Median :  67.0  
##  Mean   :49.11   Mean   : 303.94   Mean   : 26.3   Mean   : 166.9  
##  3rd Qu.:74.00   3rd Qu.: 504.25   3rd Qu.: 33.0   3rd Qu.: 232.0  
##  Max.   :99.00   Max.   :1493.00   Max.   :199.0   Max.   :1725.0  
##                                                                    
##  MntFishProducts  MntSweetProducts  MntGoldProds    NumDealsPurchases
##  Min.   :  0.00   Min.   :  0.00   Min.   :  0.00   Min.   : 0.000   
##  1st Qu.:  3.00   1st Qu.:  1.00   1st Qu.:  9.00   1st Qu.: 1.000   
##  Median : 12.00   Median :  8.00   Median : 24.00   Median : 2.000   
##  Mean   : 37.53   Mean   : 27.06   Mean   : 44.02   Mean   : 2.325   
##  3rd Qu.: 50.00   3rd Qu.: 33.00   3rd Qu.: 56.00   3rd Qu.: 3.000   
##  Max.   :259.00   Max.   :263.00   Max.   :362.00   Max.   :15.000   
##                                                                      
##  NumWebPurchases  NumCatalogPurchases NumStorePurchases NumWebVisitsMonth
##  Min.   : 0.000   Min.   : 0.000      Min.   : 0.00     Min.   : 0.000   
##  1st Qu.: 2.000   1st Qu.: 0.000      1st Qu.: 3.00     1st Qu.: 3.000   
##  Median : 4.000   Median : 2.000      Median : 5.00     Median : 6.000   
##  Mean   : 4.085   Mean   : 2.662      Mean   : 5.79     Mean   : 5.317   
##  3rd Qu.: 6.000   3rd Qu.: 4.000      3rd Qu.: 8.00     3rd Qu.: 7.000   
##  Max.   :27.000   Max.   :28.000      Max.   :13.00     Max.   :20.000   
##                                                                          
##   AcceptedCmp3      AcceptedCmp4      AcceptedCmp5      AcceptedCmp1    
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   Min.   :0.00000  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:0.00000  
##  Median :0.00000   Median :0.00000   Median :0.00000   Median :0.00000  
##  Mean   :0.07277   Mean   :0.07455   Mean   :0.07277   Mean   :0.06429  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:0.00000  
##  Max.   :1.00000   Max.   :1.00000   Max.   :1.00000   Max.   :1.00000  
##                                                                         
##   AcceptedCmp2        Complain        Z_CostContact   Z_Revenue 
##  Min.   :0.00000   Min.   :0.000000   Min.   :3     Min.   :11  
##  1st Qu.:0.00000   1st Qu.:0.000000   1st Qu.:3     1st Qu.:11  
##  Median :0.00000   Median :0.000000   Median :3     Median :11  
##  Mean   :0.01339   Mean   :0.009375   Mean   :3     Mean   :11  
##  3rd Qu.:0.00000   3rd Qu.:0.000000   3rd Qu.:3     3rd Qu.:11  
##  Max.   :1.00000   Max.   :1.000000   Max.   :3     Max.   :11  
##                                                                 
##     Response     
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :0.0000  
##  Mean   :0.1491  
##  3rd Qu.:0.0000  
##  Max.   :1.0000  
## 
# Mengecek missing value
colSums(is.na(marketing))
##                  ID          Year_Birth           Education      Marital_Status 
##                   0                   0                   0                   0 
##              Income             Kidhome            Teenhome         Dt_Customer 
##                  24                   0                   0                   0 
##             Recency            MntWines           MntFruits     MntMeatProducts 
##                   0                   0                   0                   0 
##     MntFishProducts    MntSweetProducts        MntGoldProds   NumDealsPurchases 
##                   0                   0                   0                   0 
##     NumWebPurchases NumCatalogPurchases   NumStorePurchases   NumWebVisitsMonth 
##                   0                   0                   0                   0 
##        AcceptedCmp3        AcceptedCmp4        AcceptedCmp5        AcceptedCmp1 
##                   0                   0                   0                   0 
##        AcceptedCmp2            Complain       Z_CostContact           Z_Revenue 
##                   0                   0                   0                   0 
##            Response 
##                   0
# Melihat nama kolom
colnames(marketing)
##  [1] "ID"                  "Year_Birth"          "Education"          
##  [4] "Marital_Status"      "Income"              "Kidhome"            
##  [7] "Teenhome"            "Dt_Customer"         "Recency"            
## [10] "MntWines"            "MntFruits"           "MntMeatProducts"    
## [13] "MntFishProducts"     "MntSweetProducts"    "MntGoldProds"       
## [16] "NumDealsPurchases"   "NumWebPurchases"     "NumCatalogPurchases"
## [19] "NumStorePurchases"   "NumWebVisitsMonth"   "AcceptedCmp3"       
## [22] "AcceptedCmp4"        "AcceptedCmp5"        "AcceptedCmp1"       
## [25] "AcceptedCmp2"        "Complain"            "Z_CostContact"      
## [28] "Z_Revenue"           "Response"
# Membersihkan spasi pada nama kolom
colnames(marketing) <- trimws(colnames(marketing))

# Mengecek ulang
colnames(marketing)
##  [1] "ID"                  "Year_Birth"          "Education"          
##  [4] "Marital_Status"      "Income"              "Kidhome"            
##  [7] "Teenhome"            "Dt_Customer"         "Recency"            
## [10] "MntWines"            "MntFruits"           "MntMeatProducts"    
## [13] "MntFishProducts"     "MntSweetProducts"    "MntGoldProds"       
## [16] "NumDealsPurchases"   "NumWebPurchases"     "NumCatalogPurchases"
## [19] "NumStorePurchases"   "NumWebVisitsMonth"   "AcceptedCmp3"       
## [22] "AcceptedCmp4"        "AcceptedCmp5"        "AcceptedCmp1"       
## [25] "AcceptedCmp2"        "Complain"            "Z_CostContact"      
## [28] "Z_Revenue"           "Response"

3. Data Preprocessing

# Menghapus missing value
marketing <- marketing[!is.na(marketing$Income), ]

# Mengubah data kategorikal menjadi factor
marketing$Education <- as.factor(marketing$Education)
marketing$Marital_Status <- as.factor(marketing$Marital_Status)
marketing$Response <- as.factor(marketing$Response)

Mengubah data kategorikal menjadi factor

marketing\(Education <- as.factor(marketing\)Education) marketing\(Marital_Status <- as.factor(marketing\)Marital_Status) marketing\(Response <- as.factor(marketing\)Response)


## 1. Menghapus Missing Value pada Variabel Income
Proses ini dilakukan untuk menghapus data yang memiliki nilai kosong (missing value) pada kolom Income. Missing value dapat memengaruhi hasil analisis dan menyebabkan model tidak bekerja secara optimal. Setelah proses ini, hanya data pelanggan yang memiliki nilai income lengkap yang digunakan dalam analisis.

## 2. Menghapus Kolom ID
Kolom ID dihapus karena hanya berfungsi sebagai identitas unik pelanggan dan tidak memiliki pengaruh terhadap proses prediksi atau klasifikasi. Menghapus variabel yang tidak relevan dapat membantu model bekerja lebih efisien.

## 3. Mengubah Data Kategorikal Menjadi Factor
Variabel Education, Marital_Status, dan Response diubah menjadi tipe data factor karena variabel tersebut termasuk data kategorikal. Proses ini penting agar R dapat mengenali bahwa data tersebut merupakan kategori, bukan angka biasa.

Education berisi kategori tingkat pendidikan pelanggan.

Marital_Status berisi kategori status pernikahan pelanggan.

Response merupakan target klasifikasi yang menunjukkan apakah pelanggan merespons campaign atau tidak.

Dengan preprocessing ini, dataset menjadi lebih bersih dan siap digunakan pada tahap pembangunan model Logistic Regression.

# 4. Pembangunan Model

``` r
# Variabel yang digunakan
model_data <- marketing %>%
  select(Income,
         Recency,
         MntWines,
         MntMeatProducts,
         NumWebPurchases,
         NumStorePurchases,
         NumCatalogPurchases,
         Response)

1. Memilih Variabel Yang Akan Diteliti

Disini, kita menggunakan 8 variabel yaitu Income, Recency, MntWines, MntMeatProducts, NumWebPurchases, NumStorePurchases, NumCatalogPurchases dan Response.

set.seed(123)

trainIndex <- createDataPartition(model_data$Response,
                                  p = 0.8,
                                  list = FALSE)

trainData <- model_data[trainIndex, ]
testData <- model_data[-trainIndex, ]

2.Membuat Data Train dan Test Data

Pada tahap ini dilakukan pembagian data menjadi data training dan data testing. Tujuannya supaya model bisa belajar dari sebagian data terlebih dahulu, lalu diuji menggunakan data lain untuk melihat seberapa baik model dalam melakukan prediksi. Kode set.seed(123) digunakan agar hasil pembagian data tetap sama setiap kali program dijalankan, sehingga hasil analisis lebih konsisten.

Selanjutnya, fungsi createDataPartition() digunakan untuk membagi data berdasarkan variabel target yaitu Response. Pada kode tersebut, p = 0.8 berarti 80% data digunakan sebagai data training dan 20% sisanya digunakan sebagai data testing. Data training disimpan pada variabel trainData dan digunakan untuk melatih model Logistic Regression. Sedangkan data testing disimpan pada variabel testData dan digunakan untuk menguji performa model setelah proses training selesai. Dengan cara ini, model dapat dievaluasi secara lebih objektif karena diuji menggunakan data yang belum pernah dipelajari sebelumnya.

model_logistic <- glm(Response ~ .,
                      data = trainData,
                      family = "binomial")

# Melihat hasil model
summary(model_logistic)
## 
## Call:
## glm(formula = Response ~ ., family = "binomial", data = trainData)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)         -5.601e-01  2.742e-01  -2.042  0.04112 *  
## Income              -1.694e-05  6.536e-06  -2.592  0.00955 ** 
## Recency             -2.262e-02  2.700e-03  -8.378  < 2e-16 ***
## MntWines             2.038e-03  3.043e-04   6.698 2.12e-11 ***
## MntMeatProducts      2.214e-03  4.540e-04   4.876 1.08e-06 ***
## NumWebPurchases      1.170e-01  3.085e-02   3.792  0.00015 ***
## NumStorePurchases   -2.077e-01  3.219e-02  -6.450 1.12e-10 ***
## NumCatalogPurchases  7.221e-02  3.611e-02   2.000  0.04554 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1502.9  on 1773  degrees of freedom
## Residual deviance: 1250.2  on 1766  degrees of freedom
## AIC: 1266.2
## 
## Number of Fisher Scoring iterations: 5

3. Membangun Model Regresi Logistik

Pada tahap ini dilakukan proses pembangunan model menggunakan metode Logistic Regression. Kode glm() digunakan untuk membangun model klasifikasi dengan variabel target yaitu Response. Pada bagian Response ~ ., tanda titik (.) menunjukkan bahwa seluruh variabel pada dataset trainData digunakan sebagai variabel prediktor untuk memprediksi nilai Response.

Parameter data = trainData menunjukkan bahwa model dilatih menggunakan data training yang sebelumnya sudah dibagi dari dataset utama. Sedangkan family = “binomial” digunakan karena target yang diprediksi berupa klasifikasi biner, yaitu pelanggan merespons campaign atau tidak merespons campaign.

Hasil model kemudian disimpan ke dalam variabel model_logistic. Setelah itu, fungsi summary(model_logistic) digunakan untuk melihat ringkasan hasil model Logistic Regression. Output yang dihasilkan menampilkan informasi seperti nilai koefisien tiap variabel, tingkat signifikansi variabel, nilai p-value, serta pengaruh masing-masing variabel terhadap target Response.

Dari hasil tersebut, dapat diketahui variabel mana yang paling berpengaruh dalam memprediksi respons pelanggan terhadap campaign marketing.

# 8. Prediksi Data Testing
# -----------------------------------------------------

pred_prob <- predict(model_logistic,
                     newdata = testData,
                     type = "response")

# Mengubah probabilitas menjadi kelas 0 dan 1
pred_class <- ifelse(pred_prob > 0.5, 1, 0)

pred_class <- as.factor(pred_class)

4. Prediksi Data Training

Pada tahap ini dilakukan proses prediksi menggunakan model Logistic Regression yang sudah dibuat sebelumnya. Fungsi predict() digunakan untuk memprediksi data testing dengan model model_logistic. Pada bagian newdata = testData, artinya data yang digunakan untuk prediksi adalah data testing. Sedangkan type = “response” digunakan supaya output yang dihasilkan berupa nilai probabilitas dari 0 sampai 1.

Hasil prediksi tersebut disimpan ke dalam variabel pred_prob. Nilai probabilitas ini menunjukkan kemungkinan pelanggan akan merespons campaign marketing. Semakin besar nilainya, maka semakin besar kemungkinan pelanggan memberikan respons positif.

Selanjutnya, fungsi ifelse() digunakan untuk mengubah nilai probabilitas menjadi klasifikasi biner, yaitu 0 dan 1. Jika nilai probabilitas lebih dari 0.5 maka akan diberi nilai 1, yang berarti pelanggan diprediksi merespons campaign. Sedangkan jika nilainya kurang dari atau sama dengan 0.5 maka diberi nilai 0, yang berarti pelanggan diprediksi tidak merespons campaign.

Kemudian hasil prediksi tersebut diubah menjadi tipe data factor menggunakan as.factor() agar format datanya sesuai dengan variabel target pada proses evaluasi model. Dengan tahap ini, model sudah bisa digunakan untuk memprediksi respons pelanggan berdasarkan data testing.

5. Evalusasi dan Interpretasi

# 9. Evaluasi Model
# -----------------------------------------------------

# Confusion Matrix
confusionMatrix(pred_class, testData$Response)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 367  46
##          1   9  20
##                                           
##                Accuracy : 0.8756          
##                  95% CI : (0.8411, 0.9049)
##     No Information Rate : 0.8507          
##     P-Value [Acc > NIR] : 0.07809         
##                                           
##                   Kappa : 0.363           
##                                           
##  Mcnemar's Test P-Value : 1.208e-06       
##                                           
##             Sensitivity : 0.9761          
##             Specificity : 0.3030          
##          Pos Pred Value : 0.8886          
##          Neg Pred Value : 0.6897          
##              Prevalence : 0.8507          
##          Detection Rate : 0.8303          
##    Detection Prevalence : 0.9344          
##       Balanced Accuracy : 0.6395          
##                                           
##        'Positive' Class : 0               
## 

1. Evaluasi Model

Pada tahap evaluasi, digunakan fungsi confusionMatrix(pred_class, testData$Response) untuk melihat performa model Logistic Regression dalam melakukan prediksi terhadap data testing. Confusion matrix digunakan untuk membandingkan hasil prediksi model dengan data asli sehingga dapat diketahui tingkat ketepatan model.

Dari hasil evaluasi dapat dilihat beberapa metrik seperti accuracy, precision, recall, dan specificity. Nilai accuracy menunjukkan seberapa besar kemampuan model dalam memprediksi data dengan benar. Jika nilai accuracy cukup tinggi, maka model dapat dikatakan mampu melakukan klasifikasi pelanggan dengan baik.

Selain itu, precision menunjukkan seberapa akurat model dalam memprediksi pelanggan yang benar-benar memberikan respons terhadap campaign. Sedangkan recall menunjukkan kemampuan model dalam mendeteksi seluruh pelanggan yang benar-benar merespons campaign. Semakin tinggi nilai precision dan recall, maka performa model semakin baik.

Berdasarkan hasil confusion matrix, model Logistic Regression sudah cukup baik dalam membedakan pelanggan yang merespons dan tidak merespons campaign marketing.

2. Interpretasi Hasil Logistic Regression

Pada proses pembangunan model digunakan metode Logistic Regression dengan fungsi glm() dan family = “binomial” karena target yang diprediksi berupa klasifikasi biner, yaitu pelanggan merespons atau tidak merespons campaign.

Hasil dari summary(model_logistic) menunjukkan nilai koefisien, p-value, dan tingkat signifikansi masing-masing variabel. Variabel dengan nilai p-value kecil (biasanya kurang dari 0.05) dianggap memiliki pengaruh signifikan terhadap variabel target Response.

Dari hasil model dapat diketahui bahwa beberapa variabel seperti income, jumlah pembelian produk, dan aktivitas pembelian pelanggan memiliki pengaruh terhadap kemungkinan pelanggan merespons campaign marketing. Koefisien bernilai positif menunjukkan bahwa variabel tersebut meningkatkan kemungkinan pelanggan memberikan respons, sedangkan koefisien negatif menunjukkan pengaruh sebaliknya.

Secara keseluruhan, model Logistic Regression mampu membantu perusahaan dalam memahami pola perilaku pelanggan dan memprediksi pelanggan yang berpotensi merespons campaign marketing. Dengan hasil ini, perusahaan dapat membuat strategi promosi yang lebih tepat sasaran dan efektif.

6. Kesimpulan

Berdasarkan hasil analisis menggunakan tahapan CRISP-DM dan metode Logistic Regression, dapat disimpulkan bahwa model berhasil digunakan untuk memprediksi respons pelanggan terhadap campaign marketing. Proses analisis dimulai dari pemahaman masalah, pemahaman data, preprocessing, pembangunan model, hingga evaluasi model.

Hasil analisis menunjukkan bahwa beberapa faktor seperti income, frekuensi pembelian, dan aktivitas belanja pelanggan memiliki pengaruh terhadap kemungkinan pelanggan memberikan respons terhadap campaign. Selain itu, hasil evaluasi menggunakan confusion matrix menunjukkan bahwa model memiliki performa yang cukup baik dalam melakukan klasifikasi pelanggan.

Dengan adanya model Logistic Regression ini, perusahaan dapat mengetahui pelanggan yang lebih berpotensi merespons campaign marketing sehingga strategi promosi dapat dilakukan lebih tepat sasaran, efektif, dan efisien.