1. Latar Belakang
Di dalam dunia usaha terutama yang berkaitan dengan data konsumen, penting dilakukan sebuah analisa menganai prilaku konsumen dengan tujuan untuk mengetahui insight prilaku konsumen sehingga dapat mempercepat pertumbuhan jumlah konsumen. Data yag digunakan adalah data dari sebuah bank di portugal, dimana data tersebut di dapatkan untuk melakukan apakah konsumen akan melakukan peminjaman atau tidak. Data berasal dari https://archive.ics.uci.edu/ml/datasets/bank+marketing.
1.1 Tujuan
Dengan menggunakan data tersebut kita akan melakukan importing, cleaning, dan analisa mengenai prilaku konsumen ketika di telepon oleh pihak bank.
1.2 Manfaat
Manfaat melakukan analisa tentang data konsumen di bank portugal adalah sebagai berikut:
Mendapatkan gambaran mengenai prilaku konsumen
Mengevaluasi kinerja perusahaan
Membantu memahami prilaku konsumen
2. Pengolahan Data
2.1 Import Data
Setelah data di-download, selanjutnya akan di import ke dalam script
df <-read.csv2("bank.csv")2.2 Melihat 10 data pertama
head(df, 10)2.2 Melihat 10 data terakhir
tail(df, 10)Menurut sumber berikut adalah penjelasan tiap kolom pada data bank
1 - age (numeric)
2 - job : type of job (categorical: “admin.”,“unknown”,“unemployed”,“management”,“housemaid”,“entrepreneur”,“student”,“blue-collar”,“self-employed”,“retired”,“technician”,“services”)
3 - marital : marital status (categorical: “married”,“divorced”,“single”; note: “divorced” means divorced or widowed)
4 - education (categorical: “unknown”,“secondary”,“primary”,“tertiary”)
5 - default: has credit in default? (binary: “yes”,“no”)
6 - balance: average yearly balance, in euros (numeric)
7 - housing: has housing loan? (binary: “yes”,“no”)
8 - loan: has personal loan? (binary: “yes”,“no”), related with the last contact of the current campaign:
9 - contact: contact communication type (categorical: “unknown”,“telephone”,“cellular”)
10 - day: last contact day of the month (numeric)
11 - month: last contact month of year (categorical: “jan”, “feb”, “mar”, …, “nov”, “dec”)
12 - duration: last contact duration, in seconds (numeric)
13 - campaign: number of contacts performed during this campaign and for this client (numeric, includes last contact)
14 - pdays: number of days that passed by after the client was last contacted from a previous campaign (numeric, -1 means client was not previously contacted)
15 - previous: number of contacts performed before this campaign and for this client (numeric)
16 - poutcome: outcome of the previous marketing campaign (categorical: “unknown”,“other”,“failure”,“success”)
17 - y - has the client subscribed a term deposit? (binary: “yes”,“no”)
2.3 Merubah tipe data yang sesuai fungsinya
names <- c('job' ,'marital', "education", "default", "housing", "loan", "contact", "month", "poutcome", "y")
df[,names] <- lapply(df[,names] , factor)
str(df)## 'data.frame': 4521 obs. of 17 variables:
## $ age : int 30 33 35 30 59 35 36 39 41 43 ...
## $ job : Factor w/ 12 levels "admin.","blue-collar",..: 11 8 5 5 2 5 7 10 3 8 ...
## $ marital : Factor w/ 3 levels "divorced","married",..: 2 2 3 2 2 3 2 2 2 2 ...
## $ education: Factor w/ 4 levels "primary","secondary",..: 1 2 3 3 2 3 3 2 3 1 ...
## $ default : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
## $ balance : int 1787 4789 1350 1476 0 747 307 147 221 -88 ...
## $ housing : Factor w/ 2 levels "no","yes": 1 2 2 2 2 1 2 2 2 2 ...
## $ loan : Factor w/ 2 levels "no","yes": 1 2 1 2 1 1 1 1 1 2 ...
## $ contact : Factor w/ 3 levels "cellular","telephone",..: 1 1 1 3 3 1 1 1 3 1 ...
## $ day : int 19 11 16 3 5 23 14 6 14 17 ...
## $ month : Factor w/ 12 levels "apr","aug","dec",..: 11 9 1 7 9 4 9 9 9 1 ...
## $ duration : int 79 220 185 199 226 141 341 151 57 313 ...
## $ campaign : int 1 1 1 4 1 2 1 2 2 1 ...
## $ pdays : int -1 339 330 -1 -1 176 330 -1 -1 147 ...
## $ previous : int 0 4 1 0 0 3 2 0 0 2 ...
## $ poutcome : Factor w/ 4 levels "failure","other",..: 4 1 1 4 4 1 2 4 4 1 ...
## $ y : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
2.4 Akan dilihat apakah ada data yang kosong
is.null(df) ## [1] FALSE
Data aman tidak ada data yang kosong
2.5 Melihat dimensi data
dim(df)## [1] 4521 17
Terdapat 4521 baris dan 17 kolom
2.6 Kesimpulan Pengolahan Data
Dari Langkah yang sudah dilakukan dapat bahwa terdapat 4521 data dengan 17 kolom dimana tidak terdapat susunan tertentu pada data baik menurun maupun naik pada tiap kolom
3 Analisa Data
3.1 Summary Data
summary(df)## age job marital education default
## Min. :19.00 management :969 divorced: 528 primary : 678 no :4445
## 1st Qu.:33.00 blue-collar:946 married :2797 secondary:2306 yes: 76
## Median :39.00 technician :768 single :1196 tertiary :1350
## Mean :41.17 admin. :478 unknown : 187
## 3rd Qu.:49.00 services :417
## Max. :87.00 retired :230
## (Other) :713
## balance housing loan contact day
## Min. :-3313 no :1962 no :3830 cellular :2896 Min. : 1.00
## 1st Qu.: 69 yes:2559 yes: 691 telephone: 301 1st Qu.: 9.00
## Median : 444 unknown :1324 Median :16.00
## Mean : 1423 Mean :15.92
## 3rd Qu.: 1480 3rd Qu.:21.00
## Max. :71188 Max. :31.00
##
## month duration campaign pdays
## may :1398 Min. : 4 Min. : 1.000 Min. : -1.00
## jul : 706 1st Qu.: 104 1st Qu.: 1.000 1st Qu.: -1.00
## aug : 633 Median : 185 Median : 2.000 Median : -1.00
## jun : 531 Mean : 264 Mean : 2.794 Mean : 39.77
## nov : 389 3rd Qu.: 329 3rd Qu.: 3.000 3rd Qu.: -1.00
## apr : 293 Max. :3025 Max. :50.000 Max. :871.00
## (Other): 571
## previous poutcome y
## Min. : 0.0000 failure: 490 no :4000
## 1st Qu.: 0.0000 other : 197 yes: 521
## Median : 0.0000 success: 129
## Mean : 0.5426 unknown:3705
## 3rd Qu.: 0.0000
## Max. :25.0000
##
Dari data didapatkan summary sebagai berikut:
Minimal umur konsumen adalah 19 tahun dan maksimal umur yaitu 87 tahun, dengan umur rata-rata 41 tahun
Konsumen terbanyak berasal dari bagian pekerja management, blue-collar, dan technicians
Status pernikahan dari konsumen paling banyak adalah dari yang maried, seingle, kemudian divorced
Pendidikan kosumen paling banyak dari secondary atau SMP
Rata rata cash tiap tahun konsumen adalah 1423 euro
Dari semua konsumen jumlah pemilik rumah adalah terbanyak yaitu 2559 orang dan yang tidak mempunyai rumah baik tinggal di rumah orang tua atau kontrakan adalah 1962
dari kolom load terdapat kesimpulan bahwa kebanyakan konsumen belum/tidak memiliki pinjaman
Kontak yang paling banyak digunakan oleh konsumen adalah seluler
3.2 Exploratory Data Analysis
Merubah nilai mata uang dari euro ke rupiah dengan rate 1 euro = Rp 17,045
df$balance = df$balance * 17045.31
dfBerapa rata - rata umur ketika marketing berhasil?
sub_1 <- df[df$poutcome == "success", ]
mean(sub_1$age)## [1] 44.17054
Answer: Rata rata umur marketing yang berhasil 44 tahun
Berapa rata rata umur ketika marketing gagal?
sub_2 <- df[df$poutcome == "failure", ]
mean(sub_2$age)## [1] 41.5551
Answer: Rata rata umur marketing yang gagakl 41 tahun
Berapa rata - rata balance pada awal tahun yaitu januari dan februari
awal_tahun <- c("jan", "feb")
sub_3 <- df[df$month %in% awal_tahun, ]
aggregate(balance ~ month, sub_3, mean)Answer: Rata rata balance pada bulan januari adalah Rp 16,642,442 dan bulan februari adalah Rp 22,483,455
Berapa rata - rata balance yang terjadi pada akhir tahun yaitu november dan desember
akhir_tahun <- c("nov", "dec")
sub_4 <- (df[df$month %in% akhir_tahun, ])
aggregate(balance ~ month, sub_4, mean)Answer: Rata rata balance pada bulan november adalah Rp 44,371,571 dan bulan desember adalah Rp 60,803,178
Mengapa terdapat balance yang berada pada posisi minus? Apakah mereka mempunyai hutang dan memiliki rumah?
sub_5 <- (df[df$balance < 0, ])
agg_sub5 <- aggregate(balance ~ housing + loan, sub_5, mean)
agg_sub5[order(agg_sub5$balance, decreasing = T),]*Answer: Bila dilihat melalui rata rata balance yang minus diketahui juga rata rata balance minus paling besar dimiliki oleh orang dengan pinjaman dan memiliki rumah, salah satu penyebab hal ini adalah pembiayaan perawatan maupun karena cicilan rumah sehingga mengakibatkan balance menjadi negatif karena harus berhutang dengan bank dan belum mampu membayar
Bagaimana dengan balance yang negatif tetapi tidak berhutang dengan bank? kira kira apa penyebabnya?
sub_6 <- (df[df$loan == "no" & df$balance <0, ])
print ("jumlah yang tidak meminjam dengan balance minus")## [1] "jumlah yang tidak meminjam dengan balance minus"
print (nrow(sub_6))## [1] 263
sub_6a <- (df[df$loan == "no" & df$balance >=0, ])
print ("jumlah yang tidak meminjam dengan balance positif")## [1] "jumlah yang tidak meminjam dengan balance positif"
print (nrow(sub_6a))## [1] 3567
print ("proporsi peminjam dengan balance negatid tetapi tidak hutang dengan bank")## [1] "proporsi peminjam dengan balance negatid tetapi tidak hutang dengan bank"
print (nrow(sub_6)/nrow(sub_6a))## [1] 0.07373143
Answer: Berdasarkan hasil aggregasi hanya terdapat 0.07% dari jumlah data yang tidak meminjam pada bank memiliki akun balanace yang minus. Karena data tidak menyediakan penyebab kenapa peminjam memiliki balance akun yang negatif hal ini bisa disebabkan oleh nasabah yang meminjam di bank lain atau harus membayar hutang/cicilan
Berapa persentase keberhasilan marketing?
prop.table(table(df$poutcome))##
## failure other success unknown
## 0.10838310 0.04357443 0.02853351 0.81950896
Answer: terlihat bahwa persentase sukses hanya 0.028 % dan persentase gagal 0.108 %
Berapa persentase hasil marketing (poutcome) pada bidang education?
table(df$education, df$poutcome)##
## failure other success unknown
## primary 61 22 15 580
## secondary 253 102 60 1891
## tertiary 157 65 44 1084
## unknown 19 8 10 150
akan disajikan dalam bentuk persentase
prop.table(table(df$education, df$poutcome), margin = 2)##
## failure other success unknown
## primary 0.12448980 0.11167513 0.11627907 0.15654521
## secondary 0.51632653 0.51776650 0.46511628 0.51039136
## tertiary 0.32040816 0.32994924 0.34108527 0.29257760
## unknown 0.03877551 0.04060914 0.07751938 0.04048583
Answer: dapat dilihat bahwa marketing paling sukses dilakukan untuk konsumen dengan pendidikan secondary tetapi secondary juga merupakan jumlah marketing yang paling banyak gagal
akan coba di lakukan tabulasi data
xtabs(formula = balance ~ job + poutcome, data = df)## poutcome
## job failure other success unknown
## admin. 1105626988 417507823 668994327 7802899740
## blue-collar 2072164246 482382273 441882616 14501655434
## entrepreneur 209316407 71624393 66544890 4363514133
## housemaid 817101025 31465642 81766352 3047803700
## management 4581711147 1632207750 602875569 22367401232
## retired 1224773705 170759916 622324268 7074349100
## self-employed 204901672 437092884 46448470 3654889461
## services 1107416745 408371537 184225710 6146794466
## student 334889206 491689012 112141094 1271733534
## technician 1950392551 439871270 1375982650 13657554638
## unemployed 112601318 162697484 65914214 2035687283
## unknown 15528277 37601954 17352126 902208258
agar lebih mudah dipahami akan di sajikan dalam bentuk persentase
prop.table(xtabs(formula = balance ~ job + poutcome, data = df), margin = 2)## poutcome
## job failure other success unknown
## admin. 0.080488710 0.087284986 0.156071801 0.089867731
## blue-collar 0.150851805 0.100847763 0.103088192 0.167018790
## entrepreneur 0.015238057 0.014973933 0.015524468 0.050255562
## housemaid 0.059484264 0.006578267 0.019075531 0.035102233
## management 0.333544697 0.341232481 0.140646747 0.257610333
## retired 0.089162490 0.035699395 0.145183995 0.081476851
## self-employed 0.014916668 0.091379476 0.010836110 0.042094174
## services 0.080619003 0.085374936 0.042978598 0.070793998
## student 0.024379651 0.102793447 0.026161750 0.014646838
## technician 0.141986929 0.091960331 0.321007341 0.157297093
## unemployed 0.008197281 0.034013848 0.015377335 0.023445463
## unknown 0.001130445 0.007861137 0.004048132 0.010390933
diketahui persentase sukses paling besar yaitu 0.32% pada pekerjaan technicians dengan jumlah akun sebesar Rp 1,375,982,650 Akan di lakukan visualisasi antar data akun balance dengan poutcome dan education dengan menghilangkan poutcome “unknown” dan education “unknown”
plot(xtabs(formula = balance ~ education + poutcome, data = df[df$poutcome != "unknown" & df$education != "unknown", ]))Berapa rata rata balance akun dari marketing dan age?
agg_1 <- aggregate(balance ~ poutcome + age, data=df, FUN = mean)
(agg_1[order(agg_1$balance, decreasing = T), ])Answer: didapapatkan jumlah balance setiap hasil marketing, jumlah akun, dan age. Di ketahui balace dengan rata rata paling banyak adalah dari oarng yang berumur 68 tahun tetapi tidak diketahui hasil maketingnya hal ini mungkin dikarenakan karena mereka sudah pensiun dan lebih menyukai menyimpan uang mereka di bank
Berapa rata rata lama telpon dari marketing?
agg_2 <- aggregate(duration ~ poutcome, data=df, FUN = mean)
agg_2$minutes <- agg_2$duration/60
agg_2[order(agg_2$duration, decreasing = T), ]Answer: didapatkan rata rata lama durasi dari sukses adalah paling lama yaitu 5.6 menit atau sekitar 338.6357 sekon hal ini berbanding terbalik dengan durasi marketing yang gagal yaitu 4.26 menit atau sekitar 254.3837 sekon. Hal ini merupakan kunci untuk marketing yang sukses yaitu lama telepon
Berapa standar deviasi dari balance nasabah?
sd(df$balance)## [1] 51300215
answer: Rp 51,300,215
Mengapa banyak sekali pdays yang berkumpul di angka -1 atau belum pernah di kontak oleh bank?
as.data.frame(prop.table(table(df$pdays)))*Answer: Sebanyak 81% pdays adalah -1, dimana artinya konsumen yang di telpon oleh pihak bank adalah konsumen baru, artinya pihak bank mencoba menggunakan srategi untuk menawarkan produk bagi nasabah yang belum pernah membeli product bank
Kesimpulan
Dari data bank di portugal, terdapat 4521 nasabah dan 17 varibel terkait prilaku nasabah. Diketahui bahwa standar devisiasi jumlah uang di akun nasabah sangat jauh yaitu RP 51,300,215 dengan nilai paling rendah -56,471,112 dan paling tinggi 1,213,421,528 dan memiliki persentase keberhasilan marketing sebesar 0.028%. Berdasarkan perhitungan salah satu faktor penyebab keberhasilan adalah durasi telpon sehingga dengan meingkatkan engagement dan durasi telpon maka nasabah akan lebih tertarik membeli produk bank