Background

Sebuah perusahaan retail waralaba harus mengerti dan mengetahui segmen pelanggan mereka agar perusahaan dapat lebih mudah menjual produk mereka berdasarkan apa yang diinginkan kebiasaan, penghasilan masing-masing pelanggan. Sebagai contoh, daripada perusahaan menghabiskan uang untuk produk baru, lebih baik perusahaan menganalisa terlebih dahulu barang apa yang pelanggan sering beli dan perusahaan bisa menyetok barang sesuai dengan segmen pelanggan. Sebuah perusahaan harus bisa membuat sebuah strategi yang benar agar tidak merugikan dikarenakan ketidak tahuan mereka tentang segmen pelanggan dan barang yang ada tidak terjual karena pelanggan tidak membutuhkannya.

Project Idea

Membuat sebuah segmen pelanggan berdasarkan karakteristik yang ada agar perusahaan tidak salah membuat sebuah rencana penjualan yang dikarenakan perusahaan tidak tau segmen pelanggan mereka seperti apa. Oleh karena itu, pada project ini dibuatlah sebuah cluster/segmentasi pelanggan untuk mengetahui rekomendasi untuk meningkatkan pembelian barang2 tertentu oleh pelanggan pada kunjugan selanjutnya.

Problem Scope

Project ini menggunakan sebuah data transaksi dari Kaggle. Adapun isi dari dataset tersebut sebagai berikut:

-ID: sebagai identifier

-Year_Birth: tahun kelahiran pelanggan

-Education: qualifikasi edukasi pelanggan

-Marital_Status: status pelanggan

-Income: jumlah pendapatan tahunan pelanggan

-Kidhome: jumlah anak yang dimiliki oleh pelanggan

-Teenhome: jumlah remaja yang dimiliki oleh pelanggan

-Dt_Customer: tanggal pelanggan menjadi member di perusahaan

-Recency: selisih hari belanja terakhir pelanggan

-MntWines: jumlah yang dihabiskan ke produk wine

-MntFruits: jumlah yang dihabiskan ke produk buah

-MntMeatProducts: jumlah yang dihabiskan ke produk daging

-MntFishProducts: jumlah yang dihabiskan ke produk ikan

-MntSweetProducts: jumlah yang dihabiskan ke produk manis

Machine learning dibutuhkan untuk mengidentifikasi segmen pelanggan mana yang paling banyak belanja dengan menambahkan variabel customer_segment dan variabel lain sebagai faktor.

Model akan dibuat dengan memanfaatkan K-Means dan RFM Analysist

Output

Output project berupa dashboard yang menampilkan segmentasi pelanggan berdasarkan barang yang sering dibeli dan karakteristiknya.

Business Impact: Identifikasi dibutuhkan agar pemilik perusahaan tau strategi bagaimana caranya semua barang yang mereka punya terjual. Melakukan segmentasi juga berguna agar stok barang yang akan dijual oleh perusahaan tidak menumpuk dan membantu pemilik perusahaan mengetahui tentang kebiasaan atau pasar pelanggan yang mereka punya.

Exploratory Data Analysis

library(tidyverse)
segmen <- read.csv2("data/marketing_campaign.csv", sep = "\t")
head(segmen)
##     ID Year_Birth  Education Marital_Status Income Kidhome Teenhome Dt_Customer
## 1 5524       1957 Graduation         Single  58138       0        0  04-09-2012
## 2 2174       1954 Graduation         Single  46344       1        1  08-03-2014
## 3 4141       1965 Graduation       Together  71613       0        0  21-08-2013
## 4 6182       1984 Graduation       Together  26646       1        0  10-02-2014
## 5 5324       1981        PhD        Married  58293       1        0  19-01-2014
## 6 7446       1967     Master       Together  62513       0        1  09-09-2013
##   Recency MntWines MntFruits MntMeatProducts MntFishProducts MntSweetProducts
## 1      58      635        88             546             172               88
## 2      38       11         1               6               2                1
## 3      26      426        49             127             111               21
## 4      26       11         4              20              10                3
## 5      94      173        43             118              46               27
## 6      16      520        42              98               0               42
##   MntGoldProds NumDealsPurchases NumWebPurchases NumCatalogPurchases
## 1           88                 3               8                  10
## 2            6                 2               1                   1
## 3           42                 1               8                   2
## 4            5                 2               2                   0
## 5           15                 5               5                   3
## 6           14                 2               6                   4
##   NumStorePurchases NumWebVisitsMonth AcceptedCmp3 AcceptedCmp4 AcceptedCmp5
## 1                 4                 7            0            0            0
## 2                 2                 5            0            0            0
## 3                10                 4            0            0            0
## 4                 4                 6            0            0            0
## 5                 6                 5            0            0            0
## 6                10                 6            0            0            0
##   AcceptedCmp1 AcceptedCmp2 Complain Z_CostContact Z_Revenue Response
## 1            0            0        0             3        11        1
## 2            0            0        0             3        11        0
## 3            0            0        0             3        11        0
## 4            0            0        0             3        11        0
## 5            0            0        0             3        11        0
## 6            0            0        0             3        11        0
glimpse(segmen)
## Rows: 2,240
## Columns: 29
## $ ID                  <int> 5524, 2174, 4141, 6182, 5324, 7446, 965, 6177, 485~
## $ Year_Birth          <int> 1957, 1954, 1965, 1984, 1981, 1967, 1971, 1985, 19~
## $ Education           <chr> "Graduation", "Graduation", "Graduation", "Graduat~
## $ Marital_Status      <chr> "Single", "Single", "Together", "Together", "Marri~
## $ Income              <int> 58138, 46344, 71613, 26646, 58293, 62513, 55635, 3~
## $ Kidhome             <int> 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1,~
## $ Teenhome            <int> 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1,~
## $ Dt_Customer         <chr> "04-09-2012", "08-03-2014", "21-08-2013", "10-02-2~
## $ Recency             <int> 58, 38, 26, 26, 94, 16, 34, 32, 19, 68, 11, 59, 82~
## $ MntWines            <int> 635, 11, 426, 11, 173, 520, 235, 76, 14, 28, 5, 6,~
## $ MntFruits           <int> 88, 1, 49, 4, 43, 42, 65, 10, 0, 0, 5, 16, 61, 2, ~
## $ MntMeatProducts     <int> 546, 6, 127, 20, 118, 98, 164, 56, 24, 6, 6, 11, 4~
## $ MntFishProducts     <int> 172, 2, 111, 10, 46, 0, 50, 3, 3, 1, 0, 11, 225, 3~
## $ MntSweetProducts    <int> 88, 1, 21, 3, 27, 42, 49, 1, 3, 1, 2, 1, 112, 5, 1~
## $ MntGoldProds        <int> 88, 6, 42, 5, 15, 14, 27, 23, 2, 13, 1, 16, 30, 14~
## $ NumDealsPurchases   <int> 3, 2, 1, 2, 5, 2, 4, 2, 1, 1, 1, 1, 1, 3, 1, 1, 3,~
## $ NumWebPurchases     <int> 8, 1, 8, 2, 5, 6, 7, 4, 3, 1, 1, 2, 3, 6, 1, 7, 3,~
## $ NumCatalogPurchases <int> 10, 1, 2, 0, 3, 4, 3, 0, 0, 0, 0, 0, 4, 1, 0, 6, 0~
## $ NumStorePurchases   <int> 4, 2, 10, 4, 6, 10, 7, 4, 2, 0, 2, 3, 8, 5, 3, 12,~
## $ NumWebVisitsMonth   <int> 7, 5, 4, 6, 5, 6, 6, 8, 9, 20, 7, 8, 2, 6, 8, 3, 8~
## $ AcceptedCmp3        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,~
## $ AcceptedCmp4        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ AcceptedCmp5        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,~
## $ AcceptedCmp1        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,~
## $ AcceptedCmp2        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ Complain            <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,~
## $ Z_CostContact       <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,~
## $ Z_Revenue           <int> 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11~
## $ Response            <int> 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0,~

Pada data terdapat 2.240 baris dan 29 kolom, selanjutnya cek missing value (NA)

colSums(is.na(segmen))
##                  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

Pada data segmen terdapat missing value pada kolom Income.

year <- segmen$Year_Birth
hist(year, breaks = 20)