Pendahuluan

Latar Belakang

Marketing campaign merupakan suatu cara yang dilakukan suatu perusahaan atau entitas bisnis dalam mempromosikan produk melalui berbagai media yang berbeda. Ada berbagai macam tujuan dilakukannya marketing campaing, misalnya untuk membangun brand image, untuk memperkenalkan produk baru, untuk meningkatkan penjualan produk yang sudah ada di pasar, untuk meningkatkan brand awareness, atau bahkan mengurangi dampak berita negatif yang tersebar. Keberhasilan dari marketing campaign dapat dilihat dari berbagai faktor, seperti : media yang digunakan, produk yang ditawarkan, dan target dari marketing campaign tersebut. Dalam menentukan target pasar, perusahaan perlu mengenal karakteristik customer supaya marketing campaign yang dibuat tepat sasaran.

Penentuan target customer bisa dilakukan dengan melakukan customer segmentation. Customer segmentation adalah strategi pemasaran yang mengelompokan target pasar berdasarkan karakteristik yang sama untuk dikelola secara efektif dan tepat agar mencapai tujuan bisnis yang telah ditetapkan. Pengelompokan pelanggan yang dilakukan dengan tepat akan memudahkan perusahaan dalam memasarkan produk secara efisien dan efektif, baik secara biaya maupun waktu.Dalam kasus ini, customer segmentation akan membantuh superstore dalam melakukan marketing campaing.

Superstore merupakan sebuah perusahaan retail yang sedang membuat rencana untuk melakukan marketing campaing akhir tahun. Superstore ingin marketing campaing yang mereka buat tepat sasaran, sehingga menghasilkan output yang lebih baik. Selain itu Superstore juga menginginkan marketing tersebut efektif dan efesian, dalam artian marketing campaing yang dilakukan tidak memakan waktu dan biaya yang terlalu besar. Oleh karena itu saya akan membuat sebuah machine learning untuk mengklafikasikan customer-customer superstore kedalam beberapa cluster untuk memudahkan superstore dalam melakukan aktivitas marketing campaing yang efektif dan efisien.

Business Impact

Customer Segmentation tentunya akan membawa banyak impact postifi bagi Superstore. Impact-impact yang Superstore bisa dapatkan adalah sebagai berikut:

  • Memudahkan superstore dalam memahami karakteristik customernya
  • Meningkatkan efektitivitas dan efisiensi dalam melakukan marketing campaign, baik dari segi waktu maupun biaya yang dikeluarkan
  • Meningkatkan keberhasilan marketing campaign yang dilakukan oleh superstore.

Target dan Manfaat

  • Bagi perusahaan : kegiatan pemasaran lebih efektif dan efisien
  • Bagi pelanggan : mengetahui infromasi-informasi yang sesuai dengan kebutuhan pelanggan
  • Bagi karyawan : karyawan jadi memiliki tujuan yang lebih jelas dalam menawarkan produk dan jasa perusahaan, sehingga kerja karyawan menjadi lebih produktif
  • Bagi pemagang saham : target pasar yang tepat sasaran dapat meningkatkan keuntungan bagi perusahaan.

Tujuan dan Output Project

  • Unsupervised machine learning yagn akurat dalam melakukan clustering
  • Dashboard visualisasi yang memudahkan Superstore dalam memberikan karakteristik calon customer

Pengumpulan Data

Library

library(dplyr)
library(caret)
library(GGally)
library(MLmetrics)
library(rsample)
library(lmtest)
library(car)
library(ggplot2)
library(lubridate)

Penjelasan Singkat

marketing <- read.csv("superstore_data.csv")
glimpse(marketing)
## Rows: 2,240
## Columns: 22
## $ Id                  <int> 1826, 1, 10476, 1386, 5371, 7348, 4073, 1991, 4047…
## $ Year_Birth          <int> 1970, 1961, 1958, 1967, 1989, 1958, 1954, 1967, 19…
## $ Education           <chr> "Graduation", "Graduation", "Graduation", "Graduat…
## $ Marital_Status      <chr> "Divorced", "Single", "Married", "Together", "Sing…
## $ Income              <int> 84835, 57091, 67267, 32474, 21474, 71691, 63564, 4…
## $ Kidhome             <int> 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1,…
## $ Teenhome            <int> 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,…
## $ Dt_Customer         <chr> "6/16/2014", "6/15/2014", "5/13/2014", "11/5/2014"…
## $ Recency             <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ MntWines            <int> 189, 464, 134, 10, 6, 336, 769, 78, 384, 384, 450,…
## $ MntFruits           <int> 104, 5, 11, 0, 16, 130, 80, 0, 0, 0, 26, 4, 82, 10…
## $ MntMeatProducts     <int> 379, 64, 59, 1, 24, 411, 252, 11, 102, 102, 535, 6…
## $ MntFishProducts     <int> 111, 7, 15, 0, 11, 240, 15, 0, 21, 21, 73, 0, 80, …
## $ MntSweetProducts    <int> 189, 0, 2, 0, 0, 32, 34, 0, 32, 32, 98, 13, 20, 16…
## $ MntGoldProds        <int> 218, 37, 30, 0, 34, 43, 65, 7, 5, 5, 26, 4, 102, 3…
## $ NumDealsPurchases   <int> 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 1, 2, 1, 1, 0, 4, 4,…
## $ NumWebPurchases     <int> 4, 7, 3, 1, 3, 4, 10, 2, 6, 6, 5, 3, 3, 1, 25, 2, …
## $ NumCatalogPurchases <int> 4, 3, 2, 0, 1, 7, 10, 1, 2, 2, 6, 1, 6, 1, 0, 1, 1…
## $ NumStorePurchases   <int> 6, 7, 5, 2, 2, 5, 7, 3, 9, 9, 10, 6, 6, 2, 0, 5, 5…
## $ NumWebVisitsMonth   <int> 1, 5, 2, 7, 7, 2, 6, 5, 4, 4, 1, 4, 1, 6, 1, 4, 4,…
## $ Response            <int> 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,…
## $ Complain            <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…

Objek marketing terdiri dari 2.240 baris dan 22 kolom. Kolom-kolomnya adalah sebagai berikut:

  • Response (target) : 1 jika pelanggan menerima tawaran di kampanye terakhir, 0 sebaliknya
  • ID : ID unik dari setiap pelanggan
  • Year_Birth : Usia pelanggan
  • Complain : 1 jika pelanggan melakukan komplain dalam 2 tahun terakhir
  • DtCustomer : tanggal pendaftaran pelanggan dengan perusahaan
  • Education : tingkat pendidikan pelanggan
  • Marital_Status : status perkawinan pelanggan
  • Kidhome : jumlah anak kecil di rumah pelanggan
  • Teenhome : jumlah remaja dalam rumah tangga pelanggan
  • Income : pendapatan rumah tangga tahunan pelanggan
  • MntFishProducts : jumlah yang dibelanjakan untuk produk ikan dalam 2 tahun terakhir
  • MntMeatProducts : jumlah yang dihabiskan untuk produk daging dalam 2 tahun terakhir
  • MntFruits : jumlah yang dibelanjakan untuk produk buah-buahan dalam 2 tahun terakhir
  • MntSweetProducts : jumlah yang dibelanjakan untuk produk manis dalam 2 tahun terakhir
  • MntWines : jumlah yang dibelanjakan untuk produk anggur dalam 2 tahun terakhir
  • MntGoldProds : jumlah yang dibelanjakan untuk produk emas dalam 2 tahun terakhir
  • NumDealsPurchases : jumlah pembelian yang dilakukan dengan diskon
  • NumCatalogPurchases : jumlah pembelian yang dilakukan menggunakan katalog (membeli barang untuk dikirim melalui pos)
  • NumStorePurchases : jumlah pembelian yang dilakukan langsung di toko
  • NumWebPurchases : jumlah pembelian yang dilakukan melalui situs web perusahaan
  • NumWebVisitsMonth : jumlah kunjungan ke situs web perusahaan dalam sebulan terakhir
  • Recency : jumlah hari sejak pembelian terakhir

Sumber data

Data diambil dengan menggunakan teknik pengumpulan data sekunder, yaitu dengan data customer superstore yang sudah ada. Dataset yang akan saya gunakan bersumber dari Kaggle dengan judul “Superstore Marketing Campaing Dataset”. Berikut lampiran link dari dataset tersebut https://www.kaggle.com/datasets/ahsan81/superstore-marketing-campaign-dataset

Kesesuaian data dengan kebutuhan bisnis

Dataset “Superstore Marketing Campaing Dataset” memiliki kolom-kolom yang yang menjelaskan karaktersik customer sehingga mampu mengklafikasikan customer kedalam cluster-cluster tertentu. Oleh karen aitu dataset tersebut sudah cukup sesuai dengan kebutuhan Superstore.

Data Preperation

Check Missing Values

anyNA(marketing)
## [1] TRUE
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 
##            Response            Complain 
##                   0                   0

Ubah Tipe Data, seleksi kolom, dan handle missing values

marketing_clean <- marketing %>% 
  mutate(Education = as.factor(Education),
                       Marital_Status = as.factor(Marital_Status),
                       Dt_Customer = mdy(Dt_Customer),
                       Response = as.factor(Response),
                       Complain = as.factor(Complain)) %>% 
  select(-Id) %>% 
  filter(Income > 0)

glimpse(marketing_clean)
## Rows: 2,216
## Columns: 21
## $ Year_Birth          <int> 1970, 1961, 1958, 1967, 1989, 1958, 1954, 1967, 19…
## $ Education           <fct> Graduation, Graduation, Graduation, Graduation, Gr…
## $ Marital_Status      <fct> Divorced, Single, Married, Together, Single, Singl…
## $ Income              <int> 84835, 57091, 67267, 32474, 21474, 71691, 63564, 4…
## $ Kidhome             <int> 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1,…
## $ Teenhome            <int> 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1,…
## $ Dt_Customer         <date> 2014-06-16, 2014-06-15, 2014-05-13, 2014-11-05, 2…
## $ Recency             <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ MntWines            <int> 189, 464, 134, 10, 6, 336, 769, 78, 384, 384, 450,…
## $ MntFruits           <int> 104, 5, 11, 0, 16, 130, 80, 0, 0, 0, 26, 4, 82, 10…
## $ MntMeatProducts     <int> 379, 64, 59, 1, 24, 411, 252, 11, 102, 102, 535, 6…
## $ MntFishProducts     <int> 111, 7, 15, 0, 11, 240, 15, 0, 21, 21, 73, 0, 80, …
## $ MntSweetProducts    <int> 189, 0, 2, 0, 0, 32, 34, 0, 32, 32, 98, 13, 20, 16…
## $ MntGoldProds        <int> 218, 37, 30, 0, 34, 43, 65, 7, 5, 5, 26, 4, 102, 3…
## $ NumDealsPurchases   <int> 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 1, 2, 1, 1, 0, 4, 4,…
## $ NumWebPurchases     <int> 4, 7, 3, 1, 3, 4, 10, 2, 6, 6, 5, 3, 3, 1, 25, 2, …
## $ NumCatalogPurchases <int> 4, 3, 2, 0, 1, 7, 10, 1, 2, 2, 6, 1, 6, 1, 0, 1, 1…
## $ NumStorePurchases   <int> 6, 7, 5, 2, 2, 5, 7, 3, 9, 9, 10, 6, 6, 2, 0, 5, 5…
## $ NumWebVisitsMonth   <int> 1, 5, 2, 7, 7, 2, 6, 5, 4, 4, 1, 4, 1, 6, 1, 4, 4,…
## $ Response            <fct> 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,…
## $ Complain            <fct> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…

EDA

dim(marketing_clean)
## [1] 2216   21
summary(marketing_clean)
##    Year_Birth        Education     Marital_Status     Income      
##  Min.   :1893   2n Cycle  : 200   Married :857    Min.   :  1730  
##  1st Qu.:1959   Basic     :  54   Together:573    1st Qu.: 35303  
##  Median :1970   Graduation:1116   Single  :471    Median : 51382  
##  Mean   :1969   Master    : 365   Divorced:232    Mean   : 52247  
##  3rd Qu.:1977   PhD       : 481   Widow   : 76    3rd Qu.: 68522  
##  Max.   :1996                     Alone   :  3    Max.   :666666  
##                                   (Other) :  4                    
##     Kidhome          Teenhome       Dt_Customer            Recency     
##  Min.   :0.0000   Min.   :0.0000   Min.   :2012-01-08   Min.   : 0.00  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:2013-01-19   1st Qu.:24.00  
##  Median :0.0000   Median :0.0000   Median :2013-07-11   Median :49.00  
##  Mean   :0.4418   Mean   :0.5054   Mean   :2013-07-11   Mean   :49.01  
##  3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:2013-12-31   3rd Qu.:74.00  
##  Max.   :2.0000   Max.   :2.0000   Max.   :2014-12-06   Max.   :99.00  
##                                                                        
##     MntWines        MntFruits      MntMeatProducts  MntFishProducts 
##  Min.   :   0.0   Min.   :  0.00   Min.   :   0.0   Min.   :  0.00  
##  1st Qu.:  24.0   1st Qu.:  2.00   1st Qu.:  16.0   1st Qu.:  3.00  
##  Median : 174.5   Median :  8.00   Median :  68.0   Median : 12.00  
##  Mean   : 305.1   Mean   : 26.36   Mean   : 167.0   Mean   : 37.64  
##  3rd Qu.: 505.0   3rd Qu.: 33.00   3rd Qu.: 232.2   3rd Qu.: 50.00  
##  Max.   :1493.0   Max.   :199.00   Max.   :1725.0   Max.   :259.00  
##                                                                     
##  MntSweetProducts  MntGoldProds    NumDealsPurchases NumWebPurchases 
##  Min.   :  0.00   Min.   :  0.00   Min.   : 0.000    Min.   : 0.000  
##  1st Qu.:  1.00   1st Qu.:  9.00   1st Qu.: 1.000    1st Qu.: 2.000  
##  Median :  8.00   Median : 24.50   Median : 2.000    Median : 4.000  
##  Mean   : 27.03   Mean   : 43.97   Mean   : 2.324    Mean   : 4.085  
##  3rd Qu.: 33.00   3rd Qu.: 56.00   3rd Qu.: 3.000    3rd Qu.: 6.000  
##  Max.   :262.00   Max.   :321.00   Max.   :15.000    Max.   :27.000  
##                                                                      
##  NumCatalogPurchases NumStorePurchases NumWebVisitsMonth Response Complain
##  Min.   : 0.000      Min.   : 0.000    Min.   : 0.000    0:1883   0:2195  
##  1st Qu.: 0.000      1st Qu.: 3.000    1st Qu.: 3.000    1: 333   1:  21  
##  Median : 2.000      Median : 5.000    Median : 6.000                     
##  Mean   : 2.671      Mean   : 5.801    Mean   : 5.319                     
##  3rd Qu.: 4.000      3rd Qu.: 8.000    3rd Qu.: 7.000                     
##  Max.   :28.000      Max.   :13.000    Max.   :20.000                     
## 
hist(marketing_clean$Income,100)

boxplot(marketing_clean$Income)

ggplot(marketing_clean,aes(x=Education,y=Income,fill=Education))+
  geom_boxplot(outlier.shape=5,outlier.size=1)