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)Sebelum melakukan analisa, dilakukan Data Preparation beberapa diantaranya pembacaan dataset, inspeksi data dan beberapa langkah preparation lainnya.
main_bank <- read.table("data_input/bank/bank-full.csv", sep = ";", header = TRUE)Pada inspect data dilakukan untuk mengetahui data seperti apa yang akan dilakukan analisa, kesesuaian tipe data serta pengecekkan missing value.
head(main_bank)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 nasabahjob : Jenis pekerjaan nasabahmarital : Status pernikahan nasabaheducation : Pendidikan terakhir nasabahdefault : Status credit dalam default?balance : Saldo nasabahhousing : Status memiliki pinjaman rumahloan : Status pinjaman pribadicontact : Jenis komunikasiday : Tanggal terakhir kali dihubungimonth : Bulan terakhir kali dihubungiduration : Durasi terakhir kali dihubungicampaign : Jumlah berapa kali dihubungipdays : Jumlah hari setelah terakhir kali dihubungi
dari campaign sebelumnyaprevious : Jumlah berapa kali dihubungi sebelum
campign inipoutcome : Hasil dari campagin yang
dilakukany : Status berlangganan deposito berjangkaTerdapat beberapa jenis tipe kolom yang tidak sesuai seperti
jobdanmaritalyang dapat diubah menjadiFactordan 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 ...
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.
Tahap Data Analysis dilakukan untuk mengetahui persebaran data nasabah dari bank Portugal dan menjawab pertanyaan bisnis lainnya.
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_aggberdasarkan agregate table tersebut mayoritas nasabah memiliki jenis pekerjaan
blue-collardanmanagementdisusultechnicianDan sebanyak 938Studentjuga telah menjadi nasabah bank Portugal dengan 288 tidak diketahui jenis pekerjaan nya
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_aggDengan mengabaikan status poutcome unknown, status marital
marriedlebih banyak menolak campaign namun statusmarriedjuga menjadi status dengan jumlah terbanyak dalam memutuskan untuk membeli product dari campaign yang diadakan bank Portugal dibanding dengan single
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_aggTernyata mayoritas nasabah tidak memiliki langganan aktif dalam deposito berjangka Status
marriedmendominasi bank Portugal dalam kepemilikan deposito berjangka, hal ini mungkin disebabkan mereka sadar akan pentingnya dalam berinvestasi
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_aggDidapatkan informasi bahwa seseorang yang telah menikah pada bank Portugal tidak memiliki pinjaman pribadi atau
loannamun dilain sisi statusloanaktif pada statusmarriedmenduduki posisi nomor 3 dengan jumlah 4660 nasabah
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_aggsebagian besar nasabah dengan top 5 job menolak atau bahkan tidak diketahui status sukses nya campaign dari bank Portugal
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_aggDari 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
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