1. Pendahuluan

Dataset Bank Marketing berisi informasi tentang kampanye pemasaran langsung dari sebuah institusi perbankan di Portugal. Tujuan dari analisis ini adalah untuk memahami karakteristik nasabah dan faktor-faktor yang mempengaruhi keberhasilan kampanye pemasaran deposito berjangka.

2. Persiapan Data

2.1 Load Library yang Diperlukan

library(tidyverse)
library(scales)
library(RColorBrewer)
library(corrplot)

2.2 Import dan Pemeriksaan Data

# Import dataset
bank_data <- read.csv("bank-full.csv", sep=";")

# Melihat struktur data
str(bank_data)
## 'data.frame':    45211 obs. of  17 variables:
##  $ age      : int  58 44 33 47 33 35 28 42 58 43 ...
##  $ job      : chr  "management" "technician" "entrepreneur" "blue-collar" ...
##  $ marital  : chr  "married" "single" "married" "married" ...
##  $ education: chr  "tertiary" "secondary" "secondary" "unknown" ...
##  $ default  : chr  "no" "no" "no" "no" ...
##  $ balance  : int  2143 29 2 1506 1 231 447 2 121 593 ...
##  $ housing  : chr  "yes" "yes" "yes" "yes" ...
##  $ loan     : chr  "no" "no" "yes" "no" ...
##  $ contact  : chr  "unknown" "unknown" "unknown" "unknown" ...
##  $ day      : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ month    : chr  "may" "may" "may" "may" ...
##  $ duration : int  261 151 76 92 198 139 217 380 50 55 ...
##  $ campaign : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ pdays    : int  -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
##  $ previous : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ poutcome : chr  "unknown" "unknown" "unknown" "unknown" ...
##  $ y        : chr  "no" "no" "no" "no" ...
# Melihat ringkasan statistik
summary(bank_data)
##       age            job              marital           education        
##  Min.   :18.00   Length:45211       Length:45211       Length:45211      
##  1st Qu.:33.00   Class :character   Class :character   Class :character  
##  Median :39.00   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :40.94                                                           
##  3rd Qu.:48.00                                                           
##  Max.   :95.00                                                           
##    default             balance         housing              loan          
##  Length:45211       Min.   : -8019   Length:45211       Length:45211      
##  Class :character   1st Qu.:    72   Class :character   Class :character  
##  Mode  :character   Median :   448   Mode  :character   Mode  :character  
##                     Mean   :  1362                                        
##                     3rd Qu.:  1428                                        
##                     Max.   :102127                                        
##    contact               day           month              duration     
##  Length:45211       Min.   : 1.00   Length:45211       Min.   :   0.0  
##  Class :character   1st Qu.: 8.00   Class :character   1st Qu.: 103.0  
##  Mode  :character   Median :16.00   Mode  :character   Median : 180.0  
##                     Mean   :15.81                      Mean   : 258.2  
##                     3rd Qu.:21.00                      3rd Qu.: 319.0  
##                     Max.   :31.00                      Max.   :4918.0  
##     campaign          pdays          previous          poutcome        
##  Min.   : 1.000   Min.   : -1.0   Min.   :  0.0000   Length:45211      
##  1st Qu.: 1.000   1st Qu.: -1.0   1st Qu.:  0.0000   Class :character  
##  Median : 2.000   Median : -1.0   Median :  0.0000   Mode  :character  
##  Mean   : 2.764   Mean   : 40.2   Mean   :  0.5803                     
##  3rd Qu.: 3.000   3rd Qu.: -1.0   3rd Qu.:  0.0000                     
##  Max.   :63.000   Max.   :871.0   Max.   :275.0000                     
##       y            
##  Length:45211      
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

2.3 Data Pre-processing

2.3.1 Penanganan Missing Values

# Memeriksa missing values
colSums(is.na(bank_data))
##       age       job   marital education   default   balance   housing      loan 
##         0         0         0         0         0         0         0         0 
##   contact       day     month  duration  campaign     pdays  previous  poutcome 
##         0         0         0         0         0         0         0         0 
##         y 
##         0
# Mengubah "unknown" menjadi NA
bank_data[bank_data == "unknown"] <- NA

2.3.2 Konversi Tipe Data

# Mengubah variabel kategorik menjadi factor
categorical_vars <- c("job", "marital", "education", "default", "housing", 
                     "loan", "contact", "month", "poutcome", "y")
bank_data[categorical_vars] <- lapply(bank_data[categorical_vars], as.factor)

3. Visualisasi dan Analisis Data

3.1 Distribusi Target Variable (y)

ggplot(bank_data, aes(x = y, fill = y)) +
  geom_bar() +
  scale_fill_brewer(palette = "Set2") +
  labs(title = "Distribusi Hasil Kampanye Marketing",
       subtitle = "Perbandingan antara nasabah yang berlangganan deposito dan tidak",
       x = "Keputusan Berlangganan",
       y = "Jumlah Nasabah") +
  theme_minimal() +
  theme(legend.position = "none")

Insight: Visualisasi ini menunjukkan ketidakseimbangan kelas pada target variable, dimana lebih banyak nasabah yang tidak berlangganan deposito dibandingkan yang berlangganan.

3.2 Analisis Demografis Nasabah

3.2.1 Distribusi Usia dan Status Berlangganan

ggplot(bank_data, aes(x = age, fill = y)) +
  geom_density(alpha = 0.5) +
  scale_fill_brewer(palette = "Set2", 
                    labels = c("Tidak Berlangganan", "Berlangganan")) +
  labs(title = "Distribusi Usia Nasabah",
       subtitle = "Berdasarkan Status Berlangganan Deposito",
       x = "Usia",
       y = "Densitas",
       fill = "Status Berlangganan") +
  theme_minimal()

Insight: Grafik density plot ini memperlihatkan pola distribusi usia nasabah dan bagaimana kecenderungan berlangganan deposito berdasarkan kelompok usia.

3.2.2 Analisis Pekerjaan Nasabah

ggplot(bank_data, aes(x = reorder(job, table(job)[job]), 
                      fill = y)) +
  geom_bar(position = "fill") +
  coord_flip() +
  scale_fill_brewer(palette = "Set2", 
                    labels = c("Tidak Berlangganan", "Berlangganan")) +
  labs(title = "Proporsi Berlangganan Berdasarkan Pekerjaan",
       subtitle = "Persentase nasabah yang berlangganan untuk setiap jenis pekerjaan",
       x = "Jenis Pekerjaan",
       y = "Proporsi",
       fill = "Status Berlangganan") +
  theme_minimal()

Insight: Visualisasi ini menunjukkan proporsi nasabah yang berlangganan deposito untuk setiap jenis pekerjaan, membantu mengidentifikasi segmen pekerjaan yang memiliki tingkat konversi lebih tinggi.

3.3 Analisis Faktor Ekonomi

3.3.1 Pengaruh Balance terhadap Keputusan Berlangganan

ggplot(bank_data, aes(x = y, y = balance, fill = y)) +
  geom_boxplot() +
  scale_fill_brewer(palette = "Set2") +
  labs(title = "Distribusi Balance Berdasarkan Status Berlangganan",
       subtitle = "Perbandingan saldo nasabah yang berlangganan dan tidak",
       x = "Status Berlangganan",
       y = "Balance (Euro)",
       fill = "Status Berlangganan") +
  theme_minimal() +
  scale_y_continuous(labels = scales::comma)

Insight: Box plot ini memperlihatkan hubungan antara saldo nasabah dengan keputusan berlangganan deposito.

3.3.2 Analisis Status Pinjaman

ggplot(bank_data, aes(x = housing, fill = y)) +
  geom_bar(position = "fill") +
  facet_wrap(~loan) +
  scale_fill_brewer(palette = "Set2", 
                    labels = c("Tidak Berlangganan", "Berlangganan")) +
  labs(title = "Proporsi Berlangganan Berdasarkan Status Pinjaman",
       subtitle = "Analisis pinjaman rumah dan personal",
       x = "Pinjaman Rumah",
       y = "Proporsi",
       fill = "Status Berlangganan") +
  theme_minimal()

Insight: Visualisasi ini menunjukkan bagaimana status pinjaman (rumah dan personal) mempengaruhi keputusan nasabah untuk berlangganan deposito.

4. Kesimpulan

Dari hasil analisis dan visualisasi data di atas, kita dapat menyimpulkan beberapa hal penting:

  1. Terdapat ketidakseimbangan yang signifikan antara nasabah yang berlangganan dan tidak berlangganan deposito.
  2. Faktor demografis seperti usia dan pekerjaan memiliki pengaruh terhadap keputusan berlangganan.
  3. Status ekonomi (balance) dan status pinjaman juga mempengaruhi kecenderungan nasabah untuk berlangganan deposito.

Visualisasi yang digunakan telah dipilih dengan mempertimbangkan: - Kesesuaian jenis plot dengan tipe data dan tujuan analisis - Penggunaan warna yang konsisten dan mudah dibedakan - Pemberian label yang informatif dan jelas - Penggunaan tema yang bersih dan profesional