1 Overview

Salah satu bank di Portugal sedang mengadakan campaign melakukan penawaran produk mereka kepada nasabah melalui telphone. Data yang di analisa berisikan informasi historis dari tiap nasabah, agar nantinya dapat diketahui apakah seorang nasabah akan membeli product tersebut atau tidak.

library(dbplyr)

2 Data Preparation

Sebelum melakukan analisa, dilakukan Data Preparation beberapa diantaranya pembacaan dataset, inspeksi data dan beberapa langkah preparation lainnya.

2.1 Get Data

main_bank <- read.table("data_input/bank/bank-full.csv", sep = ";", header = TRUE)

2.2 Inspect Data

Pada inspect data dilakukan untuk mengetahui data seperti apa yang akan dilakukan analisa, kesesuaian tipe data serta pengecekkan missing value.

2.2.1 Show 5th first of Dataset

head(main_bank)

2.2.2 Inspect Column Type

str(main_bank)
## '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" ...

Column Description:

  • age : Umur nasabah
  • job : Jenis pekerjaan nasabah
  • marital : Status pernikahan nasabah
  • education : Pendidikan terakhir nasabah
  • default : Status credit dalam default?
  • balance : Saldo nasabah
  • housing : Status memiliki pinjaman rumah
  • loan : Status pinjaman pribadi
  • contact : Jenis komunikasi
  • day : Tanggal terakhir kali dihubungi
  • month : Bulan terakhir kali dihubungi
  • duration : Durasi terakhir kali dihubungi
  • campaign : Jumlah berapa kali dihubungi
  • pdays : Jumlah hari setelah terakhir kali dihubungi dari campaign sebelumnya
  • previous : Jumlah berapa kali dihubungi sebelum campign ini
  • poutcome : Hasil dari campagin yang dilakukan
  • y : Status berlangganan deposito berjangka

2.2.3 Convert Column Type

Terdapat beberapa jenis tipe kolom yang tidak sesuai seperti job dan marital yang dapat diubah menjadi Factor dan lain sebagainya.

fac_column = c("job", "marital", "education", "default", "housing", "loan", "contact", "month", "poutcome", "y")

main_bank[, fac_column] <- lapply(main_bank[, fac_column], as.factor)

str(main_bank)
## 'data.frame':    45211 obs. of  17 variables:
##  $ age      : int  58 44 33 47 33 35 28 42 58 43 ...
##  $ job      : Factor w/ 12 levels "admin.","blue-collar",..: 5 10 3 2 12 5 5 3 6 10 ...
##  $ marital  : Factor w/ 3 levels "divorced","married",..: 2 3 2 2 3 2 3 1 2 3 ...
##  $ education: Factor w/ 4 levels "primary","secondary",..: 3 2 2 4 4 3 3 3 1 2 ...
##  $ default  : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 2 1 1 ...
##  $ balance  : int  2143 29 2 1506 1 231 447 2 121 593 ...
##  $ housing  : Factor w/ 2 levels "no","yes": 2 2 2 2 1 2 2 2 2 2 ...
##  $ loan     : Factor w/ 2 levels "no","yes": 1 1 2 1 1 1 2 1 1 1 ...
##  $ contact  : Factor w/ 3 levels "cellular","telephone",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ day      : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ month    : Factor w/ 12 levels "apr","aug","dec",..: 9 9 9 9 9 9 9 9 9 9 ...
##  $ 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 : Factor w/ 4 levels "failure","other",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ y        : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...

2.2.4 Missing Value Check

Pengecekkan untuk nilai missing pada tiap kolom

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

Didapatkan bahwa tidak ada nilai missing pada tiap kolom yang ada pada dataset.

3 Data Analysis

Tahap Data Analysis dilakukan untuk mengetahui persebaran data nasabah dari bank Portugal dan menjawab pertanyaan bisnis lainnya.

3.1 Persebaran Jenis Pekerjaan

job_agg <- aggregate(age ~ job, data = main_bank, FUN = length)
names(job_agg)[2] <- "jumlah"
job_agg <- job_agg[order(job_agg$jumlah, decreasing = T), ]
job_agg

berdasarkan agregate table tersebut mayoritas nasabah memiliki jenis pekerjaan blue-collar dan management disusul technician Dan sebanyak 938 Student juga telah menjadi nasabah bank Portugal dengan 288 tidak diketahui jenis pekerjaan nya

3.2 Status Martial dengan Keberhasilan Campaign

Status marital seringkali dapat mempengaruhi seseorang dalam mengambil keputusan, karena biasanya sepasang kekasih harus saling berkomunikasi dahulu dalam membuat keputusan terlebih dengan produk perbankan.

dibanding dengan seseorang yang single mereka lebih memiliki kebebasan dalam pengambilan keputusan.

mar_agg <- aggregate(age ~ marital + poutcome, data = main_bank, FUN = length)
names(mar_agg)[3] <- "jumlah"
mar_agg <- mar_agg[order(mar_agg$jumlah, decreasing = T), ]
mar_agg

Dengan mengabaikan status poutcome unknown, status marital married lebih banyak menolak campaign namun status married juga menjadi status dengan jumlah terbanyak dalam memutuskan untuk membeli product dari campaign yang diadakan bank Portugal dibanding dengan single

3.3 Status Berjangka Tiap Nasabah

setelah mengetahui hubungan marital dengan poutcome sekarang kita lihat apakah mayoritas nasabah telah memiliki status deposito berjangka

mar_agg <- aggregate(age ~ marital + y, data = main_bank, FUN = length)
names(mar_agg)[3] <- "jumlah"
mar_agg <- mar_agg[order(mar_agg$jumlah, decreasing = T), ]
mar_agg

Ternyata mayoritas nasabah tidak memiliki langganan aktif dalam deposito berjangka Status married mendominasi bank Portugal dalam kepemilikan deposito berjangka, hal ini mungkin disebabkan mereka sadar akan pentingnya dalam berinvestasi

3.4 Status Pinjaman Pribadi

mar_agg <- aggregate(age ~ marital + loan, data = main_bank, FUN = length)
names(mar_agg)[3] <- "jumlah"
mar_agg <- mar_agg[order(mar_agg$jumlah, decreasing = T), ]
mar_agg

Didapatkan informasi bahwa seseorang yang telah menikah pada bank Portugal tidak memiliki pinjaman pribadi atau loan namun dilain sisi status loan aktif pada status married menduduki posisi nomor 3 dengan jumlah 4660 nasabah

3.5 Jenis Pekerjaan Terhadap poutcome

job_agg <- aggregate(age ~ job + poutcome, data = main_bank, FUN = length)
names(job_agg)[3] <- "jumlah"
job_agg <- job_agg[order(job_agg$jumlah, decreasing = T), ]
job_agg

sebagian besar nasabah dengan top 5 job menolak atau bahkan tidak diketahui status sukses nya campaign dari bank Portugal

3.6 Persebaran poutcome

pout_agg <- aggregate(age ~ poutcome, data = main_bank, FUN = length)
names(pout_agg)[2] <- "jumlah"
pout_agg <- pout_agg[order(pout_agg$jumlah, decreasing = T), ]
pout_agg

Dari analisa apakah nasabah akan membeli product bank Portugal didapatkan sebanyak 1511 nasabah membelinya dengan jumlah kegagalan 4901 nasabah yang lebih tinggi dan tidak diketahui statusnya 36959 nasabah

4 Conclusion

Dari sedikit eksplorasi diatas bahwa campaign yang dilakukan bank Portugal dapat disimpulkan tidak terlalu signifikan karena perbandingan antara success dengan failure yang cukup berbeda drastis. hal tersebut dipengaruhi oleh status marital dan pekerjaan yang menunjukkan bahwa mereka lebih banyak menolak dari tawaran bank Portugal