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.
Customer Segmentation tentunya akan membawa banyak impact postifi bagi Superstore. Impact-impact yang Superstore bisa dapatkan adalah sebagai berikut:
library(dplyr)
library(caret)
library(GGally)
library(MLmetrics)
library(rsample)
library(lmtest)
library(car)
library(ggplot2)
library(lubridate)
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:
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
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.
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,…
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)