1 Intro

Data berikut merupakan data dari sebuah bank yang berisi data dari 10.000 customer berikut dengan umur, gaji, status pernikahan, credit card limit, kategori credit card, dll.

2 Setup

Set up chunk di awal untuk mengatur format chunk pada markdown

options(scipen = 9999)
rm(list=ls())

Setup library yang akan digunakan

library(lubridate)
library(ggplot2)
library(dplyr)
library(tidyverse)

#Data Preprocessing ##Input data dan Struktur data Impor data dari dataset credit card customer

bank <- read.csv("BankChurners.csv")

Inspect data

dim(bank)
## [1] 10127    23
head(bank)
anyNA(bank)
## [1] FALSE
str(bank)
## 'data.frame':    10127 obs. of  23 variables:
##  $ CLIENTNUM                                                                                                                         : int  768805383 818770008 713982108 769911858 709106358 713061558 810347208 818906208 710930508 719661558 ...
##  $ Attrition_Flag                                                                                                                    : chr  "Existing Customer" "Existing Customer" "Existing Customer" "Existing Customer" ...
##  $ Customer_Age                                                                                                                      : int  45 49 51 40 40 44 51 32 37 48 ...
##  $ Gender                                                                                                                            : chr  "M" "F" "M" "F" ...
##  $ Dependent_count                                                                                                                   : int  3 5 3 4 3 2 4 0 3 2 ...
##  $ Education_Level                                                                                                                   : chr  "High School" "Graduate" "Graduate" "High School" ...
##  $ Marital_Status                                                                                                                    : chr  "Married" "Single" "Married" "Unknown" ...
##  $ Income_Category                                                                                                                   : chr  "$60K - $80K" "Less than $40K" "$80K - $120K" "Less than $40K" ...
##  $ Card_Category                                                                                                                     : chr  "Blue" "Blue" "Blue" "Blue" ...
##  $ Months_on_book                                                                                                                    : int  39 44 36 34 21 36 46 27 36 36 ...
##  $ Total_Relationship_Count                                                                                                          : int  5 6 4 3 5 3 6 2 5 6 ...
##  $ Months_Inactive_12_mon                                                                                                            : int  1 1 1 4 1 1 1 2 2 3 ...
##  $ Contacts_Count_12_mon                                                                                                             : int  3 2 0 1 0 2 3 2 0 3 ...
##  $ Credit_Limit                                                                                                                      : num  12691 8256 3418 3313 4716 ...
##  $ Total_Revolving_Bal                                                                                                               : int  777 864 0 2517 0 1247 2264 1396 2517 1677 ...
##  $ Avg_Open_To_Buy                                                                                                                   : num  11914 7392 3418 796 4716 ...
##  $ Total_Amt_Chng_Q4_Q1                                                                                                              : num  1.33 1.54 2.59 1.4 2.17 ...
##  $ Total_Trans_Amt                                                                                                                   : int  1144 1291 1887 1171 816 1088 1330 1538 1350 1441 ...
##  $ Total_Trans_Ct                                                                                                                    : int  42 33 20 20 28 24 31 36 24 32 ...
##  $ Total_Ct_Chng_Q4_Q1                                                                                                               : num  1.62 3.71 2.33 2.33 2.5 ...
##  $ Avg_Utilization_Ratio                                                                                                             : num  0.061 0.105 0 0.76 0 0.311 0.066 0.048 0.113 0.144 ...
##  $ Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_1: num  0.0000934 0.0000569 0.0000211 0.0001337 0.0000217 ...
##  $ Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_2: num  1 1 1 1 1 ...

Dari inspect diatas dapat kita lihat data memiliki 10.127 row, 23 column dan tidak ada missing value. Lalu kita lihat struktur datanya.

2.1 Subsetting

Kita tidak akan menggunakan semua kolom, jadi kita akan memilih data yang akan digunakan untuk visualisasi

credit <- bank[,2:9]

Setelah di subset, data yang akan dipakai ada 8 kolom dari sebelumnya 23 kolom

2.2 Modifikasi kolom

pada kolom ‘Gender’ informasi F dan M kurang bagus untuk visualisasi sehingga perlu dimodifikasi menjadi data yang lebih informatif

credit$Gender <- sapply(X =as.character(credit$Gender),FUN = switch,
                               "F" = "Female",
                               "M" = "Male")

2.3 Ubah tipe data chr menjadi factor

Ada beberapa kolom yang bisa diubah menjadi factor/category karena banyak terjadi perulangan. Kita ubah tipe data kolom tersebut menggunakan ‘as.factor()’

credit[,c("Attrition_Flag","Gender","Education_Level",
          "Marital_Status","Income_Category","Card_Category")] <- 
  lapply(credit[,c("Attrition_Flag","Gender","Education_Level",
                   "Marital_Status","Income_Category","Card_Category")],as.factor)

3 Data Processing dan Plotting

3.1 Melihat Card Category berdasar Education level

Kelompokkan Card Category dan hitung keseluruhan pengguna dari masing masing education Level

levelcard <- credit %>%
  group_by(Card_Category) %>%
  count(Education_Level)

Lalu visualisasikan dengan bar chart

  ggplot(levelcard, aes(reorder(Card_Category, n),n ))+
  geom_col(aes(fill = Education_Level),position = "dodge")+
  labs(title =  "Education Level per Card Category",
       x = "Card Category" , y = "Total", fill="Education Level") 

3.2 Persebaran Umur pengguna Blue Card

Dari chart diatas dapat dilihat bahwa pengguna Blue Card mendominasi customer bank, maka kita coba visualisasikan plot persebaran umur untuk pengguna blue card.

Pertama, kita subset data pengguna yang menggunakan blue card

bluec <- credit %>% 
  filter(Card_Category == "Blue")

Lalu visualisasikan menjadi density plot

ggplot(bluec,aes(x=Customer_Age))+geom_density(aes(fill="Customer Age"),show.legend = FALSE)+
  labs(
    title = "Persebaran Umur pengguna Blue Card",
    x="Customer Age"
  )

Dapat dilihat dari chart diatas, pengguna blue card didominasi dari kalangan berusia 40-50 tahun

3.3 Hubungan antara Marital Status dan Income Category

maritalinc <- credit %>% 
  group_by(Marital_Status) %>% 
  count(Income_Category) %>% 
  arrange(desc(n))

ggplot(maritalinc, aes(reorder(Marital_Status, n),n ))+
  geom_col(aes(fill = Income_Category),position = "dodge")+
  labs(title =  "Income Category count per Marital Status",
       x = "Marital Status" , y = "Total", fill="Income Category") 

Pada semua kategori marital status, penghasilan kurang dari $40K mendominasi dan dapat dilihat bahwa data pengguna credit bank didominasi oleh pengguna dengan marital status married dengan penghasilan kurang dari $40K