LBB: Programming For Data Science

Musthofa Syarifudin

2021-03-29

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:

  1. Mendapatkan gambaran mengenai prilaku konsumen

  2. Mengevaluasi kinerja perusahaan

  3. 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:

  1. Minimal umur konsumen adalah 19 tahun dan maksimal umur yaitu 87 tahun, dengan umur rata-rata 41 tahun

  2. Konsumen terbanyak berasal dari bagian pekerja management, blue-collar, dan technicians

  3. Status pernikahan dari konsumen paling banyak adalah dari yang maried, seingle, kemudian divorced

  4. Pendidikan kosumen paling banyak dari secondary atau SMP

  5. Rata rata cash tiap tahun konsumen adalah 1423 euro

  6. 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

  7. dari kolom load terdapat kesimpulan bahwa kebanyakan konsumen belum/tidak memiliki pinjaman

  8. 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
df

Berapa 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