ZATWIERDZENIE KREDYTU MIESZKANIOWEGO
ZATWIERDZENIE KREDYTU MIESZKANIOWEGO
Projekt zespoĆowy z przedmiotu Analiza Danych
Projekt zespoĆowy z przedmiotu Analiza Danych
Wprowadzenie
Kim jesteĆmy?
JesteĆmy firma, zajmujÄ cÄ siÄ udzielaniem kredytĂłw mieszkaniowych.DziaĆamy na obszarach miejskich, pĂłĆmiejskich oraz wiejskich. Nasz klient najpierw ubiega siÄ o kredyt mieszkaniowy, a nastÄpnie weryfikujemy, czy kwalifikuje siÄ do jego otrzymania.
Nasze zadanie
Chcemy zautomatyzowaÄ proces przyznawania kredytĂłw (w czasie rzeczywistym) w oparciu o dane klienta. W pierwszym etapie starania siÄ o kredyt, klient wypeĆnia wniosek online, jeĆli speĆni wstÄpne wymagania, umawiamy siÄ z nim na spotkanie, w celu weryfikacji danych i rozmowy o kredycie. Zadaniem naszego dziaĆu (Automatyzacji ProcesĂłw i UsprawnieĆ) jest zbudowanie modelu, ktĂłry w oparciu o dane ankietowe, zbada czy nasz klient ma zdolnoĆci kredytowÄ .
Dane jakimi dysponujemy
Posiadamy nastÄpujÄ ce dane na temat naszych klientĂłw:
pĆeÄ,
stan cywilny,
wyksztaĆcenie,
liczbÄ osĂłb na utrzymaniu,
dochĂłd,
kwotÄ poĆŒyczki,
historiÄ kredytowÄ
czy kredyt zostaĆ udzielony (zmienna objaĆniana)
Cel
Zbadanie jakie warunki muszÄ byÄ speĆnione, aby kredyt zostaĆ udzielony
Zakres analizy
OkreĆlenie problemu
Postawienie hipotez
Przygotowanie systemu i zaĆadowanie danych
Zrozumienie danych
EDA
Przeprowadzanie analizy jednowymiarowej,
Przeprowadzenie analizy dwuwymiarowej
1. OkreĆlenie problemu
W oparciu o zebrane dane, chcemy usprawniÄ proces udzielania kredytĂłw, ktĂłry obecnie jest nieefektywny i pochĆania wiÄkszoĆÄ czasu pracy naszych konsultantĂłw, ze wzglÄdu na indywidualne rozpatrywanie sprawy kaĆŒdego potencjalnego klienta z osobna. DziÄki wprowadzeniu Modeleu Trustworthy AI w skoringu kredytowym, usprawnimy proces weryfikacji, W ciÄ gu 3 minut potencalny klient, bÄdzie wiedziaĆ czy ma zdolnoĆÄ kredytowÄ , aby zaciÄ gnÄ Ä kredyt w naszym banku.
DziÄki tym dziaĆaniom uporamy siÄ z problemami firmy.
SkrĂłcimy czas potrzebny na wstÄpne stwierdzenie czy dany klient speĆnia wszelkie niezbÄdne wymagania, aby dostaÄ kredyt.
Nasze decyzje bÄdÄ poparte o wczeĆniejsze decyzje, tym samym bÄdzie istniaĆo mniejsze ryzyko bĆÄdnej oceny kielnta.
Staniemy siÄ bardziej efektywni, rzetelni i konkurencyjni.
Usprawnimy system przepĆywu informacji i dziaĆanie firmy.
OsiÄ gniemy lepsze wyniki oraz bÄdziemy mogli zredukowaÄ liczbÄ etatĂłw.
2. Postawienie hipotezy
GĆĂłwnym czynnikiem decydujÄ cym o tym, czy kredyt zostanie przyznany jest wysokoĆÄ dochodĂłw aplikanta.
3. Przygotowanie systemu i zaĆadowanie danych
Przygotowanie systemu do pracy z danymi
ZaĆadownanie bibliotek, z ktĂłrych bÄdziemy korzystaÄ w dalej czÄĆci projektu. Dostosowanie globalnych ustawieĆ.
knitr::opts_chunk$set(echo = TRUE)
options(scipen = 999, digits=6)
if(!require('DMwR')) install.packages("https://cran.r-project.org/src/contrib/Archive/DMwR/DMwR_0.4.1.tar.gz", repos=NULL, type="source", dependencies=TRUE)
library(tidyverse)
library(ggplot2)
library(rmdformats)
library(validate)
library(validatetools)
library(dcmodify)
library(errorlocate)
library(deductive)
library(VIM)
library(simputation)
library(lumberjack)
library(ISLR)
library(dlookr)
library(xts)
library(quantmod)
library(ROCR)
library(DMwR)
library(Information)
library(scorecard)
library(naniar)
library(visdat)
library(shapeR)
library(arsenal)
library(e1071)
library(haven)
library(papeR)
library(dplyr)
library(tidyverse)
library(ggplot2)
library(kableExtra)
library(classInt)
library(pastecs)
library(desctable)
library(frequency)
library(corrplot)
library(ggpubr)
library(RColorBrewer)
library(wesanderson)
library(cowplot)
library(hrbrthemes)
library(scales)
library(formattable)
library('MASS')
library(rcompanion)
library(lsr)
library(vcd)
library(DescTools)
library(waffle)
library(cleanrmd)
library(thematic)
library(shiny)
library(showtext)
library(ragg)
library(distill)
library(rmdformats)
library(prettydoc)
library(hrbrthemes)
library(tint)
library(gapminder)
library(yaml)
library(rpart)
library(tidyverse)
library(pander)
library(modelr)
library(broom)
library(caret)
library(ggplot2)
library(ROCR)
library(psych)
library(qwraps2)
library(ggpubr)
library(rstatix)
library(kableExtra)
library(datarium)
library("correlation")
library(polycor)
library(corrgram)
library(knitr)
library(flextable)
library(ggstatsplot)
library(dplyr)ZaĆadowanie danych, na podstawie ktĂłrych zostanie przeprowadzona analiza. SÄ to nastÄpujÄ ce pliki: Hipoteczny1.csv, Hipoteczny2.csv, ktĂłre zawierajÄ dane klientĂłw, ubiegajÄ cych siÄ o kredyt.
Organizacja pracy z danymi (wstÄpne czyszczenie i przeglÄ d danych)
W celu usprawnienia pracy, dane bÄdÄ przechowywane w formie tabeli âtabbleâ.
Dane1 z pliku Hipoteczny1.csv, w przeciwieĆstwie do danych2 z pliku Hipoteczny2.csv nie zawierajÄ informacji, czy kredyt zostaĆ przyznany (Loan_Status). W zwiÄ zku z tym dane2 wykorzystamy do przeprowadzenia analizy, sprawdzimy co decyduje o zdolnoĆci kredytowej klientĂłw. ZaĆ dane1 potraktujemy jako wnioski naszych klientĂłw czekajÄ cych na odpowiedĆș i w oparciu o przeprowadzonÄ analizÄ stwierdziemy, ktĂłrzy z nich dostanÄ pozytywnÄ odpowiedĆș na wniosek kredytowy.
dane
dane1
| Loan_ID | Gender | Married | Dependents | Education | Self_Employed | ApplicantIncome | CoapplicantIncome | LoanAmount | Loan_Amount_Term | Credit_History | Property_Area |
|---|---|---|---|---|---|---|---|---|---|---|---|
| LP001015 | Male | Yes | 0 | Graduate | No | 5720 | 0 | 110 | 360 | 1 | Urban |
| LP001022 | Male | Yes | 1 | Graduate | No | 3076 | 1500 | 126 | 360 | 1 | Urban |
| LP001031 | Male | Yes | 2 | Graduate | No | 5000 | 1800 | 208 | 360 | 1 | Urban |
| LP001035 | Male | Yes | 2 | Graduate | No | 2340 | 2546 | 100 | 360 | NA | Urban |
| LP001051 | Male | No | 0 | Not Graduate | No | 3276 | 0 | 78 | 360 | 1 | Urban |
| LP001054 | Male | Yes | 0 | Not Graduate | Yes | 2165 | 3422 | 152 | 360 | 1 | Urban |
| LP001055 | Female | No | 1 | Not Graduate | No | 2226 | 0 | 59 | 360 | 1 | Semiurban |
dane2
| Loan_ID | Gender | Married | Dependents | Education | Self_Employed | ApplicantIncome | CoapplicantIncome | LoanAmount | Loan_Amount_Term | Credit_History | Property_Area | Loan_Status |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LP001002 | Male | No | 0 | Graduate | No | 5849 | 0 | NA | 360 | 1 | Urban | Y |
| LP001003 | Male | Yes | 1 | Graduate | No | 4583 | 1508 | 128 | 360 | 1 | Rural | N |
| LP001005 | Male | Yes | 0 | Graduate | Yes | 3000 | 0 | 66 | 360 | 1 | Urban | Y |
| LP001006 | Male | Yes | 0 | Not Graduate | No | 2583 | 2358 | 120 | 360 | 1 | Urban | Y |
| LP001008 | Male | No | 0 | Graduate | No | 6000 | 0 | 141 | 360 | 1 | Urban | Y |
| LP001011 | Male | Yes | 2 | Graduate | Yes | 5417 | 4196 | 267 | 360 | 1 | Urban | Y |
| LP001013 | Male | Yes | 0 | Not Graduate | No | 2333 | 1516 | 95 | 360 | 1 | Urban | Y |
Na samym poczÄ tku porzÄ dkujemy dane rosnÄ co wedĆug âLoan_IDâ
#dane2
dane2$Loan_ID <- str_replace(dane2$Loan_ID,"LP","LP ")
dane2 <- separate(dane2, col = "Loan_ID", c("Loan","ID"),sep = " ")
dane2$ID <- as.numeric(dane2$ID)
dane2 <- dane2 %>%
arrange(desc("Loan_ID"))
dane2 <- unite(dane2,"Loan_ID", "Loan", "ID", sep=" ")
dane2$Loan_ID <- str_replace(dane2$Loan_ID,"LP ","LP")
#dane1
dane1$Loan_ID <- str_replace(dane1$Loan_ID,"LP","LP ")
dane1 <- separate(dane1, col = "Loan_ID", c("Loan","ID"),sep = " ")
dane1$ID <- as.numeric(dane1$ID)
dane1 <- dane1 %>%
arrange(desc("Loan_ID"))
dane1 <- unite(dane1,"Loan_ID", "Loan", "ID", sep=" ")
dane1$Loan_ID <- str_replace(dane1$Loan_ID,"LP ","LP")NastÄpnie zamieniamy puste miejsca na NA
Kolejno zmieniamy klasÄ danych, aby Ćatwiej siÄ z nimi pracowaĆo.
#dane1
dane1$ApplicantIncome <- as.numeric(dane1$ApplicantIncome)
dane1$CoapplicantIncome <- as.numeric(dane1$CoapplicantIncome)
dane1$Dependents <- as.factor(dane1$Dependents)
dane1$Property_Area <- as.factor(dane1$Property_Area)
dane1$Gender <- as.factor(dane1$Gender)
#dane2
dane2$ApplicantIncome <- as.numeric(dane2$ApplicantIncome)
dane2$CoapplicantIncome <- as.numeric(dane2$CoapplicantIncome)
dane2$Dependents <- as.factor(dane2$Dependents)
dane2$Property_Area <- as.factor(dane2$Property_Area)
dane2$Gender <- as.factor(dane2$Gender)
dane2$Loan_Status <- as.factor(dane2$Loan_Status)Widzimy, ĆŒe w niektĂłrych nazach zmiennych brakuje â â, w celu lepszego wyglÄ du danych i efektywniejsze pracy, poprawiamy nazwy tych zmiennych
#dane1
dane1 <- dane1 %>%
rename(Applicant_Income=ApplicantIncome)
dane1 <- dane1 %>%
rename(Coapplicant_Income=CoapplicantIncome)
dane1 <- dane1 %>%
rename(Loan_Amount=LoanAmount)
dane1 <- dane1 %>%
rename(Loan_ID=Loan_ID)
#dane2
dane2 <- dane2 %>%
rename(Applicant_Income=ApplicantIncome)
dane2 <- dane2 %>%
rename(Coapplicant_Income=CoapplicantIncome)
dane2 <- dane2 %>%
rename(Loan_Amount=LoanAmount)
dane2 <- dane2 %>%
rename(Loan_ID=Loan_ID) Dane zostaĆy zorganizowane.
Walidacja danych
NaleĆŒy sprawdziÄ poprawnoĆÄ danych2, do tego celu przeprowadzimy walidacjÄ danych. Nasze dane powinny speĆniaÄ nastÄpujÄ ce warunki:
JeĆli wnioskodawca jest w zwiÄ zku maĆĆŒeĆskim, to wĂłwczas tylko wtedy wspĂłĆwnioskodaca moĆŒe wykazywaÄ dochody. (âCoapplicant Incomeâ >=0, gdy âMarriedâ= TRUE)
Status maĆĆŒeĆstwa moĆŒe przyjmowaÄ jedynie wartoĆci âtakâ lub ânieâ
PĆeÄ powinna przyjmowaÄ wartoĆÄ âkobietaâ lub âmÄĆŒczyznaâ
Liczba osĂłb na utrzymaniu przyjmuje wartoĆci â0â, â1â, â2â, â3+â
Edukacja wartoĆÄ âpo studiachâ, ânie ukuoĆczyĆ studiĂłwâ.
PrzychĂłd aplikanta musi byÄ wiÄkszy od 0, poniewaĆŒ w przeciwnym razie nie powinien on ubiegaÄ siÄ o kredy (nie bÄdzie miaĆ jak go spĆaciÄ).
PrzychĂłd wspĂłĆwnioskodacy moĆŒe przymowaÄ wartoĆÄ 0 w przypadku, gdy wspĂłĆwnioskodawca nie wykazuje ĆŒadnych dochodĂłw lub aplikant jest sam. WiÄksze w przypadku gdy wspĂłĆwnioskodaca wykazuje jakieĆ dochody.
Kwota kredytu oraz termin muszÄ byÄ wiÄksze od 0, ĆŒeby zaistniaĆo zdarzenie.
Historia kredytowa powinna przyjmowaÄ wartoĆÄ â1â jeĆli aplikant braĆ juĆŒ wczeĆniej kredyt, a â0â jeĆli jeszcze nie.
Aplikant moĆŒe pochodziÄ z miasta, ze wsi lub z terenĂłw podmiejskich.
rules <- validator(if(Married=="Yes") Coapplicant_Income >= 0,
Married %in% c("Yes", "No"),
Gender %in% c("Female", "Male"),
Dependents %in% c("0","1","2","3+"),
Education %in% c("Graduate","Not Graduate"),
Self_Employed %in% c("Yes","No"),
Applicant_Income > 0,
Coapplicant_Income >= 0,
Loan_Amount>0,
Loan_Amount_Term>0,
Credit_History %in% c("1", "0"),
Property_Area %in% c("Urban", "Semiurban", "Rural"))
#dane2
summary(confront(dane2, rules)) %>%
formattable(align ="c")| name | items | passes | fails | nNA | error | warning | expression |
|---|---|---|---|---|---|---|---|
| V01 | 614 | 614 | 0 | 0 | FALSE | FALSE | Married != âYesâ | (Coapplicant_Income - 0 >= -0.00000001) |
| V02 | 614 | 611 | 0 | 3 | FALSE | FALSE | Married %vin% c(âYesâ, âNoâ) |
| V03 | 614 | 601 | 0 | 13 | FALSE | FALSE | Gender %vin% c(âFemaleâ, âMaleâ) |
| V04 | 614 | 599 | 0 | 15 | FALSE | FALSE | Dependents %vin% c(â0â, â1â, â2â, â3+â) |
| V05 | 614 | 614 | 0 | 0 | FALSE | FALSE | Education %vin% c(âGraduateâ, âNot Graduateâ) |
| V06 | 614 | 582 | 0 | 32 | FALSE | FALSE | Self_Employed %vin% c(âYesâ, âNoâ) |
| V07 | 614 | 614 | 0 | 0 | FALSE | FALSE | Applicant_Income > 0 |
| V08 | 614 | 614 | 0 | 0 | FALSE | FALSE | Coapplicant_Income - 0 >= -0.00000001 |
| V09 | 614 | 592 | 0 | 22 | FALSE | FALSE | Loan_Amount > 0 |
| V10 | 614 | 600 | 0 | 14 | FALSE | FALSE | Loan_Amount_Term > 0 |
| V11 | 614 | 564 | 0 | 50 | FALSE | FALSE | Credit_History %vin% c(â1â, â0â) |
| V12 | 614 | 614 | 0 | 0 | FALSE | FALSE | Property_Area %vin% c(âUrbanâ, âSemiurbanâ, âRuralâ) |
Analiza walidacji: Nasze dane nie zawierajÄ bĆÄdĂłw logicznych.
Identyfikacja rozkĆadu danych, eliminacja danych odstajÄ cych
W tym podrozdziale przyjrzymy siÄ zmiennym ekstremalnym, odstajÄ cym i wyeliminujemy obserwacje wpĆywowe, ĆŒeby nie zakĆĂłcaĆy pĂłĆșniejszej analizy. Identyfikacja bÄdzie miaĆa zastosowanie w przypadku zmiennych iloĆciowych: Applicant_Income, Coapplicant_Income, Loan_Amount
Dane odstajÄ ce
PrzyglÄ damy siÄ rozkĆadowi danych, pod wzglÄdem obserwacji odstajÄ cych i widzimy, ĆŒe dane majÄ one duĆŒy rozstÄp. Dla wszystkich zmiennych istniejÄ obserwacje ekstremalne, ktĂłre znieksztaĆcajÄ rozkĆad prawostronnie.
box1.1 <- dane2 %>%
ggplot(aes(x = Applicant_Income)) +
geom_boxplot(fill='#A3b5c0', color="gray20", notch = TRUE, alpha=0.7) +
ggtitle("Aplicant Income")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))
box1.2 <- dane2 %>%
filter(Coapplicant_Income>0)%>% #czÄĆÄ wspĂłĆwnioskodacĂłw nie wykazuje ĆŒadnych dochodĂłw, co zaburzaĆoby rozkĆad zmiennych
ggplot(aes(x = Coapplicant_Income)) +
geom_boxplot(fill='#A3b5c0', color="gray20", notch = TRUE, alpha=0.7) +
ggtitle("Coapplicant Income")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))
box1.3 <- dane2 %>%
ggplot(aes(x = Loan_Amount)) +
geom_boxplot(fill='#A3b5c0', color="gray20", notch = TRUE, alpha=0.7) +
ggtitle("Loan Amount")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))
plot_grid(box1.1,box1.2,box1.3, nrow = 3)Dlatego najpierw usuwamy obserwacje, ktĂłre sÄ ekstremalne.
Dla zmiennej Applicant Income powyĆŒej 20100
Dla zmiennej Coapplicant Income powyĆŒej 10000
Dla zmiennnej Loan Amount powyĆŒej 370
dane2 <- dane2 %>%
filter(Applicant_Income<20100)
dane2 <- dane2 %>%
filter(Coapplicant_Income<10000)
dane2 <- dane2 %>%
filter(Loan_Amount<370)NastÄpnie pozostaĆe obserwacje wyeliminujemy metodÄ kwartyli. W tym celu stworzymy funkcjÄ, krĂłra usunie obserwacje, ktĂłre przekraczajÄ dwukrotnoĆÄ rozstÄpu w odniesieniu do dolnej i gĂłrnej granicy.
detect_outlier <- function(x) {
na.omit(x)
lower_bound <- quantile(x, 0.25)
upper_bound <- quantile(x, 0.75)
na.rm = TRUE
I = upper_bound - lower_bound
which(x < lower_bound-I*2 | x > upper_bound+I*2)
}Zastosowanie funkcji.
#dane2
d2.1 <- detect_outlier(dane2$Applicant_Income)
d2.2 <- detect_outlier(dane2$Coapplicant_Income)
d2.3 <- detect_outlier(na.omit(dane2$Loan_Amount))
d2 <- c(d2.1, d2.2, d2.3)
d2
dane2 <- dane2[-c(33, 52, 64, 99, 107, 127, 133, 135, 175, 183, 237, 241, 254, 302, 344, 393, 432, 440, 443, 447, 456, 471, 492, 493, 528, 549, 11, 36, 114, 124, 166, 236, 409, 20, 33, 52, 64, 124, 241, 243, 302, 326, 354, 476, 495, 547),]RozkĆad po usuniÄciu obserwacji zakĆĂłcajÄ cych, zostaĆ przedstawiony poniĆŒej. DziÄki wyeliminowaniu danych odstajÄ cych, uporaliĆmy siÄ z problemem obserwacji znieksztaĆcajÄ cych rozkĆad. Ponadto dziÄki temu, pĂłĆșniejsza analiza bÄdzie bardziej rzetelna.
box3.1 <- dane2 %>%
ggplot(aes(x = Applicant_Income)) +
geom_boxplot(fill='#A3b5c0', color="gray20", notch = TRUE, alpha=0.7) +
ggtitle("Aplicant Income")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))
box3.2 <- dane2 %>%
filter(Coapplicant_Income>0)%>%
ggplot(aes(x = Coapplicant_Income)) +
geom_boxplot(fill='#A3b5c0', color="gray20", notch = TRUE, alpha=0.7) +
ggtitle("Coapplicant Income")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))
box3.3 <- dane2 %>%
ggplot(aes(x = Loan_Amount)) +
geom_boxplot(fill='#A3b5c0', color="gray20", notch = TRUE, alpha=0.7) +
ggtitle("Loan Amount")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))
plot_grid(box3.1,box3.2,box3.3, nrow = 3)Braki w danych
Mamy 109 brakujÄ cych obserwacji. Braki wystÄpujÄ w 6/13 zmiennych.
NajwiÄcej brakujÄ cych obserwacji zawiera zmienna Credit_History. NastÄpnie Self_Employed.
Reszta obserwacji, w ktĂłrych sÄ braki: Gender, Dependents, Loan_Amount_Term
Jest ich za duĆŒo, aby usunÄ Ä, dlatego naleĆŒy uzupeĆniÄ je w jak najbardziej rzetelny sposĂłb, zbliĆŒony do rzeczywistoĆci i usunÄ Ä tylko te obserwacji, w ktĂłrych wystÄpuje wiÄcej niĆŒ jedno NA
Tabela przedstawiajÄ ca braki
`IloĆÄ obserwacji` <- c(sum(is.na(dane2$Married)),sum(is.na(dane2$Gender)), sum(is.na(dane2$Dependents)), sum(is.na(dane2$Loan_Amount_Term)), sum(is.na(dane2$Self_Employed)), sum(is.na(dane2$Credit_History)))
`Miejsce wystÄ
pienia` <- c("Married","Gender","Dependents","Loan_Amount_Term","Self_Employed", "Credit_History")
braki1 <-data.frame(`Miejsce wystÄ
pienia`,`IloĆÄ obserwacji`)
braki1 %>% formattable(align="c")| Miejsce.wystÄ pienia | IloĆÄ.obserwacji |
|---|---|
| Married | 2 |
| Gender | 9 |
| Dependents | 13 |
| Loan_Amount_Term | 14 |
| Self_Employed | 28 |
| Credit_History | 43 |
SzczegĂłĆowe przedstawienie brakĂłw
| Loan_ID | Gender | Married | Dependents | Education | Self_Employed | Applicant_Income | Coapplicant_Income | Loan_Amount | Loan_Amount_Term | Credit_History | Property_Area | Loan_Status |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LP1027 | Male | Yes | 2 | Graduate | NA | 2500 | 1840 | 109 | 360 | 1 | Urban | Y |
| LP1034 | Male | No | 1 | Not Graduate | No | 3596 | 0 | 100 | 240 | NA | Urban | Y |
| LP1041 | Male | Yes | 0 | Graduate | NA | 2600 | 3500 | 115 | NA | 1 | Urban | Y |
| LP1050 | NA | Yes | 2 | Not Graduate | No | 3365 | 1917 | 112 | 360 | 0 | Rural | N |
| LP1052 | Male | Yes | 1 | Graduate | NA | 3717 | 2925 | 151 | 360 | NA | Semiurban | N |
| LP1087 | Female | No | 2 | Graduate | NA | 3750 | 2083 | 120 | 360 | 1 | Semiurban | Y |
| LP1091 | Male | Yes | 1 | Graduate | NA | 4166 | 3369 | 201 | 360 | NA | Urban | N |
| LP1109 | Male | Yes | 0 | Graduate | No | 1828 | 1330 | 100 | NA | 0 | Urban | N |
| LP1123 | Male | Yes | 0 | Graduate | No | 2400 | 0 | 75 | 360 | NA | Urban | Y |
| LP1136 | Male | Yes | 0 | Not Graduate | Yes | 4695 | 0 | 96 | NA | 1 | Urban | Y |
| LP1137 | Female | No | 0 | Graduate | No | 3410 | 0 | 88 | NA | 1 | Urban | Y |
| LP1250 | Male | Yes | 3+ | Not Graduate | No | 4755 | 0 | 95 | NA | 0 | Semiurban | N |
| LP1264 | Male | Yes | 3+ | Not Graduate | Yes | 3333 | 2166 | 130 | 360 | NA | Semiurban | Y |
| LP1273 | Male | Yes | 0 | Graduate | No | 6000 | 2250 | 265 | 360 | NA | Semiurban | N |
| LP1280 | Male | Yes | 2 | Not Graduate | No | 3333 | 2000 | 99 | 360 | NA | Semiurban | Y |
| LP1357 | Male | NA | NA | Graduate | No | 3816 | 754 | 160 | 360 | 1 | Urban | Y |
| LP1370 | Male | No | 0 | Not Graduate | NA | 7333 | 0 | 120 | 360 | 1 | Rural | N |
| LP1387 | Female | Yes | 0 | Graduate | NA | 2929 | 2333 | 139 | 360 | 1 | Semiurban | Y |
| LP1391 | Male | Yes | 0 | Not Graduate | No | 3572 | 4114 | 152 | NA | 0 | Rural | N |
| LP1398 | Male | No | 0 | Graduate | NA | 5050 | 0 | 118 | 360 | 1 | Semiurban | Y |
Imputacja brakujÄ cych danych
Zmienna âGenderâ
DanÄ âGenderâ zostawimy z brakami, poniewaĆŒ w pĂłĆșniejszej analizje, ta zmienna nie bÄdzie miaĆa istotnego wpĆywu na wynik analizy.
Zmienna âMarriedâ
Podczas przeprowadzania walidacji, ustaliliĆmy, ĆŒe tylko dla osobĂłw, w zwiÄ zkach maĆĆŒeĆskich, moĆŒe byÄ wykazany przychĂłd wspĂłĆwnioskodawcy. Zatem naleĆŒy sprawdziÄ, czy dla brakujÄ cych obserwacji, wartoĆÄ âCoapplicant_Incomeâ >0, jeĆli tak osoba jest w zwiÄ zku maĆĆŒeĆskim. JeĆli âCoapplicant_Incomeâ=0, nie wiemy, czy dana osoba jest w zwiÄ zku maĆĆŒeĆskim, pozostawimy te pola puste.
Jest jeden brak, ktĂłry moĆŒemy uzupeĆniÄ, DrugÄ obserwacjÄ zdecydowaliĆmy siÄ usunÄ Ä, poniewaĆŒ, te obserwacje majÄ wiÄcej niĆŒ jedno âNAâ
dane2[is.na(dane2$Married)& dane2$Coapplicant_Income > 0,"Married"] <- "Yes"
dane2[is.na(dane2$Married),] %>% formattable(align="c")
dane2 <- dane2[-195,]
which(is.na(dane2$Married))Usuwanie brakĂłw, gdzie wystÄpuje wiÄcej niĆŒ jedno NA
Usuwamy, te obserwacje, dla ktĂłrych mamy wiÄcej niĆŒ brak w jednej zmiennej
#Credit History
which(is.na(dane2$Credit_History) & (is.na(dane2$Dependents) | is.na(dane2$Gender) | is.na(dane2$Education) | is.na(dane2$Self_Employed)| is.na(dane2$Coapplicant_Income)|is.na(dane2$Loan_Amount)|is.na(dane2$Applicant_Income)|is.na(dane2$Loan_Amount_Term)))
dane2 <- dane2[-c(21, 27, 202, 355, 397),]
#Dependends
which(is.na(dane2$Dependents) & (is.na(dane2$Gender) | is.na(dane2$Education) | is.na(dane2$Self_Employed)| is.na(dane2$Coapplicant_Income)|is.na(dane2$Loan_Amount)|is.na(dane2$Applicant_Income)|is.na(dane2$Loan_Amount_Term)))
dane2 <- dane2[-c(285),]PodglÄ d brakujÄ cych obserwacji po dokonaniu czyszczenia danych
DziÄki czyszczeniu pozbyliĆmy siÄ brakĂłw w zmiennej âMarriedâ oraz zredukowaliĆmy licznÄ poozostaĆych brakĂłw
Tabela z podsumowaniem brakĂłw
`IloĆÄ obserwacji` <- c(sum(is.na(dane2$Married)),sum(is.na(dane2$Gender)), sum(is.na(dane2$Dependents)), sum(is.na(dane2$Loan_Amount_Term)), sum(is.na(dane2$Self_Employed)), sum(is.na(dane2$Credit_History)))
`Miejsce wystÄ
pienia` <- c("Married","Gender","Dependents","Loan_Amount_Term","Self_Employed", "Credit_History")
braki1 <-data.frame(`Miejsce wystÄ
pienia`,`IloĆÄ obserwacji`)
braki1 %>% formattable(align="c")| Miejsce.wystÄ pienia | IloĆÄ.obserwacji |
|---|---|
| Married | 0 |
| Gender | 8 |
| Dependents | 11 |
| Loan_Amount_Term | 13 |
| Self_Employed | 24 |
| Credit_History | 38 |
4. Zrozumienie danych
Zmienne jakoĆciowe
Loan Status
Loan Status jest naszÄ zmiennÄ objaĆnianÄ . Widzimy, ĆŒe 66% wnioskĂłw zostaĆo rozpatrzonych pozytwynie.
dane2 %>%
dplyr::select(Loan_Status) %>%
drop_na() %>%
group_by(Loan_Status)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(155+393))) %>%
ggplot(aes(x = "", y = n, fill = Loan_Status))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8", "#b4bdba","thistle3"), labels=c("Yes","No")) +
ggtitle("Loan Status")+
xlab("") +
labs(fill="Loan Status")+
coord_flip() +
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Gender
Klientami naszego banku sÄ najczÄĆciej mÄĆŒczyĆșni. StanowiÄ oni ponad 80% wszystkich klientĂłw
dane2 %>%
dplyr::select(Gender) %>%
drop_na() %>%
group_by(Gender)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(99+411))) %>%
ggplot(aes(x = "", y = n, fill = Gender))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8", "gray20")) +
ggtitle("Gender")+
xlab("") +
coord_flip() +
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Married
NajczÄĆciej osoby, ktĂłre ubiegajÄ siÄ o kredyt sÄ w zwiÄ zkach maĆĆŒeĆskich. SÄ to osoby ustabilizowane, StanowiÄ oni ponad 64% wszystkich klientĂłw
dane2 %>%
dplyr::select(Married) %>%
drop_na() %>%
group_by(Married)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(183+335))) %>%
ggplot(aes(x = "", y = n, fill = Married))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8", "gray20")) +
ggtitle("Married")+
xlab("") +
coord_flip() +
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Dependents
Prawie 60% klientĂłw nie miaĆa nikogo na utrzymaniu. 15.58% wnioskujÄ cych miaĆo tylko jednÄ osobÄ, 17.36% dwie osoby. Najmniej licznÄ grupÄ stanowili klienci, ktĂłrzy miali 3. lub wiÄcej osĂłb, ktĂłre musieli utrzymywaÄ.
dane2 %>%
dplyr::select(Dependents) %>%
drop_na() %>%
group_by(Dependents)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(301+79+88+39))) %>%
ggplot(aes(x = "", y = n, fill = Dependents))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8", "#b4bdba","mistyrose3")) +
ggtitle("Dependents")+
xlab("") +
coord_flip() +
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Education
WyraĆșnÄ wiÄkszoĆÄ wĆrĂłd aplikantĂłw stanowiĆy osoby, ktĂłre ukoĆczyĆy studia, stanowili oni 76% wszystkich klientĂłw.
dane2 %>%
dplyr::select(Education) %>%
drop_na() %>%
group_by(Education)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(394+124))) %>%
ggplot(aes(x = "", y = n, fill = Education))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8", "#b4bdba","mistyrose3")) +
ggtitle("Education")+
xlab("") +
coord_flip() +
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Self Employed
WiÄkszoĆÄ osĂłb wnioskujÄ cych o kredyt w naszym banku, nie prowadzi wĆasnego biznesu. Osoby samozatrudnione stanowiÄ zaledwie 11,94% wszystkich klientĂłw.
dane2$Credit_History <- as.factor(dane2$Credit_History)
dane2 %>%
dplyr::select(Self_Employed) %>%
drop_na() %>%
group_by(Self_Employed)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(435+59))) %>%
ggplot(aes(x = "", y = n, fill = Self_Employed))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8", "#b4bdba","mistyrose3")) +
ggtitle("Self Employed")+
xlab("") +
labs(fill="Self Employed")+
coord_flip() +
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Loan Amount Term
NajczÄĆciej wybieranym okresem, na ktĂłry klienci chcÄ zaciÄ gnÄ Ä kredyt jest okres 360, ktĂłry stanowi ponad 85% wszystkich okresĂłw na jakie zawierana jest poĆŒyczka. DrugÄ najczÄĆciej wybieranÄ opcjÄ jest 180 dni, ponad 7% klientĂłw, wybiera tÄ opcjÄ.
Tabela
dane2 %>%
dplyr::select(Loan_Amount_Term) %>%
drop_na() %>%
group_by(Loan_Amount_Term)%>%
count() %>%
mutate(`UdziaĆ procentowy`= percent(n/505))%>%
formattable()| Loan_Amount_Term | n | UdziaĆ procentowy |
|---|---|---|
| 12 | 1 | 0.20% |
| 36 | 2 | 0.40% |
| 60 | 2 | 0.40% |
| 84 | 4 | 0.79% |
| 120 | 3 | 0.59% |
| 180 | 36 | 7.13% |
| 240 | 3 | 0.59% |
| 300 | 10 | 1.98% |
| 360 | 431 | 85.35% |
| 480 | 13 | 2.57% |
Prezentacja rozkĆadu
wafel <- dane2 %>%
dplyr::select(Loan_Amount_Term) %>%
drop_na() %>%
group_by(Loan_Amount_Term)%>%
count()
wafel <- c(`term 12-120`= 12, `term 80`= 36, `term 240`=3, `term 300`= 10, `term 360`= 431, `term 480`= 13)
waffle(wafel, rows=15,colors = c("#eee2d4", "mistyrose3", "lightsteelblue2","#959595","#ced0ce","pink3"))Credit History
Ponad 84% klientĂłw ma historiÄ kredytowÄ .
dane2 %>%
dplyr::select(Credit_History) %>%
drop_na() %>%
group_by(Credit_History)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(404+76))) %>%
ggplot(aes(x = "", y = n, fill = Credit_History))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8", "#b4bdba","thistle3"), labels=c("No","Yes")) +
ggtitle("Credit History")+
xlab("") +
labs(fill = "Credit History")+
coord_flip() +
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Property Area
ProporcjÄ pomiÄdzy miejscem zamieszkania aplikantĂłw sÄ w miarÄ zbliĆŒonÄ. NajwiÄkszy udziaĆ stanowiÄ klienci z obszarĂłw podmiejskich (41,46%). NastÄpnie 33,75% stanowiÄ wnioskodawcy z obszarĂłw miejskich, i zaledwie 1% mniejszy od nich udziaĆ majÄ klienci z obszarĂłw wiejskich.
dane2 %>%
dplyr::select(Property_Area) %>%
drop_na() %>%
group_by(Property_Area)%>%
count() %>%
mutate(`udziaĆ procentowy`=percent(n/(404+76))) %>%
ggplot(aes(x = "", y = n, fill = Property_Area))+
geom_col(colour = "gray20", alpha=0.7, width = .3) +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8","thistle3")) +
ggtitle("Property Area")+
xlab("") +
coord_flip() +
labs(fill="Property Area")+
geom_text(aes(label=`udziaĆ procentowy`), position=position_stack(vjust = 0.49), vjust=1, size=4, color="gray20")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Zmienne iloĆciowe
Applicant Income
dane2 %>%
dplyr::select(Applicant_Income) %>%
ggplot(aes(x = Applicant_Income)) +
geom_density(fill="#A3b5c0", alpha=0.4) +
geom_vline(aes(xintercept = mean(Applicant_Income, na.rm = T)),
colour = "pink3", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = median(Applicant_Income, na.rm = T)),
colour = "royalblue3", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = quantile(Applicant_Income, probs = 0.25, na.rm = T)),
colour = "darkseagreen4", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = quantile(Applicant_Income, probs = 0.75, na.rm = T)),
colour = "gold3", linetype ="longdash", size = .7)+
ggtitle("Applicant Income")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Oznaczenia na wykresie: Ćrednia- rĂłĆŒowy, mediana- niebieski, Q1-zielony, Q3-ĆŒĂłĆty
statystyka <- c("Min", "Max", "Q1","Mediana","Q3" ,"Ćrednia", "Odch. std.", "SkoĆnoĆÄ","Kurtoza")
wartosc <- c(min(dane2$Applicant_Income),max(dane2$Applicant_Income), quantile(dane2$Applicant_Income, 0.25), round(median(dane2$Applicant_Income,0.5),2), quantile(dane2$Applicant_Income, 0.75), round(mean(dane2$Applicant_Income),2), round(sd(dane2$Applicant_Income),2), round(skew(dane2$Applicant_Income),2), round(kurtosi(dane2$Applicant_Income),2))
raport <- data.frame(statystyka,wartosc)
raport %>% formattable()| statystyka | wartosc |
|---|---|
| Min | 150.00 |
| Max | 10513.00 |
| Q1 | 2765.00 |
| Mediana | 3597.50 |
| Q3 | 4929.00 |
| Ćrednia | 4103.83 |
| Odch. std. | 1928.70 |
| SkoĆnoĆÄ | 1.18 |
| Kurtoza | 1.24 |
Obserwacja:
Ćrednio aplikanci zarabiajÄ 4104.
Aplikant, ktĂłry zarabiaĆ najmniej, wykazywaĆ dochĂłd w wysokoĆci 150,
NajwyĆŒszy dochĂłd klienta wyniĂłsĆ 10513
25% aplikantĂłw miaĆa mniejszy dochĂłd niĆŒ 2764
75% klientĂłw miaĆa dochĂłd wyĆŒszy niĆŒ 4931
50% klientĂłw miaĆa niĆŒszy niĆŒ dochĂłd niĆŒ 3597 (tym samym druga poĆowa aplikantĂłw miaĆa dochĂłd wyĆŒszy niĆŒ 3597)
Ćrednio o 1928.7 dochody klientĂłw odchylajÄ siÄ od Ćredniego dochodu. To oznacza, ĆŒe bardzo rozbieĆŒne sÄ dochody naszych aplikantĂłw.
Coapplicant Income
dane2 %>%
dplyr::select(Coapplicant_Income) %>%
filter(Coapplicant_Income>0) %>%
ggplot(aes(x = Coapplicant_Income)) +
geom_density(fill="#A3b5c0", alpha=0.4) +
geom_vline(aes(xintercept = mean(Coapplicant_Income, na.rm = T)),
colour = "pink3", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = median(Coapplicant_Income, na.rm = T)),
colour = "royalblue3", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = quantile(Coapplicant_Income, probs = 0.25, na.rm = T)),
colour = "darkseagreen4", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = quantile(Coapplicant_Income, probs = 0.75, na.rm = T)),
colour = "gold3", linetype ="longdash", size = .7)+
ggtitle("Coapplicant Income")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Oznaczenia na wykresie: Ćrednia- rĂłĆŒowy, mediana- niebieski, Q1-zielony, Q3-ĆŒĂłĆty
statystyka <- c("Min", "Max", "Q1","Mediana","Q3" ,"Ćrednia", "Odch. std.", "SkoĆnoĆÄ","Kurtoza")
wartosci <- dane2 %>%
transmute(Coapplicant_Income) %>%
filter(Coapplicant_Income>0)
wartosci <- c(min(wartosci$Coapplicant_Income),max(wartosci$Coapplicant_Income), quantile(wartosci$Coapplicant_Income, 0.25), round(median(wartosci$Coapplicant_Income,0.5),2), quantile(wartosci$Coapplicant_Income, 0.75), round(mean(wartosci$Coapplicant_Income),2), round(sd(wartosci$Coapplicant_Income),2), round(skew(wartosci$Coapplicant_Income),2), round(kurtosi(wartosci$Coapplicant_Income),2))
raport <- data.frame(statystyka,wartosci)
raport %>% formattable()| statystyka | wartosci |
|---|---|
| Min | 16.12 |
| Max | 6666.00 |
| Q1 | 1625.00 |
| Mediana | 2079.00 |
| Q3 | 2857.00 |
| Ćrednia | 2333.43 |
| Odch. std. | 1164.50 |
| SkoĆnoĆÄ | 1.09 |
| Kurtoza | 1.23 |
Obserwacja: Pod uwagÄ sÄ brani jedynie wspĂłĆwnioskodawcy, ktĂłrzy wykazujÄ przychody.
Ćrednio aplikanci zarabiajÄ 4104.
DochĂłd wspĂłĆwnioskodawcy, o najmniejszej wartoĆci byĆ rĂłwny 16.12,
NajwyĆŒszy dochĂłd wspĂłĆwnioskodawcy wyniĂłsĆ 6666,
25% wspĂłĆwnioskodawcĂłw miaĆa mniejszy dochĂłd niĆŒ 1625
75% wspĂłĆwnioskodawcĂłw miaĆa dochĂłd wyĆŒszy niĆŒ 2857
50% wspĂłĆwnioskodawcĂłw miaĆa niĆŒszy niĆŒ dochĂłd niĆŒ 2079 (tym samym druga poĆowa miaĆa dochĂłd wyĆŒszy niĆŒ 3597)
Ćrednio o 1164.5 dochody wspĂłĆwnioskodawcĂłw odchylaĆ siÄ od ich Ćredniego dochodu.
Loan Amount
dane2 %>%
dplyr::select(Loan_Amount) %>%
ggplot(aes(x = Loan_Amount)) +
geom_density(fill="#A3b5c0", alpha=0.4) +
geom_vline(aes(xintercept = mean(Loan_Amount, na.rm = T)),
colour = "pink3", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = median(Loan_Amount, na.rm = T)),
colour = "royalblue3", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = quantile(Loan_Amount, probs = 0.25, na.rm = T)),
colour = "darkseagreen4", linetype ="longdash", size = .7)+
geom_vline(aes(xintercept = quantile(Loan_Amount, probs = 0.75, na.rm = T)),
colour = "gold3", linetype ="longdash", size = .7)+
ggtitle("Loan Amount")+
xlab("") +
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Oznaczenia na wykresie: Ćrednia- rĂłĆŒowy, mediana- niebieski, Q1-zielony, Q3-ĆŒĂłĆty
statystyka <- c("Min", "Max", "Q1","Mediana","Q3" ,"Ćrednia", "Odch. std.", "SkoĆnoĆÄ","Kurtoza")
wartosc <- c(min(dane2$Loan_Amount),max(dane2$Loan_Amount), quantile(dane2$Loan_Amount, 0.25), round(median(dane2$Loan_Amount,0.5),2), quantile(dane2$Loan_Amount, 0.75), round(mean(dane2$Loan_Amount),2), round(sd(dane2$Loan_Amount),2), round(skew(dane2$Loan_Amount),2), round(kurtosi(dane2$Loan_Amount),2))
raport <- data.frame(statystyka,wartosc)
raport %>% formattable()| statystyka | wartosc |
|---|---|
| Min | 9.00 |
| Max | 280.00 |
| Q1 | 99.00 |
| Mediana | 122.00 |
| Q3 | 155.00 |
| Ćrednia | 127.63 |
| Odch. std. | 47.40 |
| SkoĆnoĆÄ | 0.59 |
| Kurtoza | 0.66 |
Obserwacja:
Ćrednio aplikanci wnioskujÄ o kredyt w wysokoĆci 127.63,
NajniĆŒszy wniosek o kredyt byĆ rĂłwny 9,
NajwyĆŒszy dochĂłd klienta wyniĂłsĆ 280,
25% wnioskĂłw byĆa na kwotÄ niĆŒszÄ niĆŒ 99,
75% wnioskĂłw byĆa na kwotÄ wyĆŒszÄ niĆŒ 155,
50% wnioskĂłw byĆa na kwotÄ niĆŒszÄ niĆŒ 122 (tym samym druga poĆowa na kwotÄ wyĆŒszy niĆŒ 122),
Ćrednio o 47.4 kwoty na wniioskach poĆŒyczkowych odchylajÄ siÄ od Ćredniej kwoty, na ktĂłrÄ zaciÄ gane sÄ zobowiÄ zania.
Korelacja
Korelacja to miara kierunku i siĆy zwiÄ zku miÄdzy dwiema zmiennymi. Jej wartoĆÄ zawiera siÄ w przedziale od -1 do 1. Korelacja bliska zeru sugeruje brak istotnej zaleĆŒnoĆci liniowej miÄdzy zmiennymi - ale nie oznacza, ĆŒe nie ma miÄdzy nimi innych zwiÄ zkĂłw. Gdy wartoĆÄ korelacji jest bliska 1, to obydwie zmienne rosnÄ lub malejÄ razem, a gdy jest bliska -1, to wzrostom wartoĆci jednej ze zmiennych towarzyszÄ spadki wartoĆci drugiej.
Gdy badamy wiÄcej niz dwie zmienne, moĆŒemy przedstawiÄ ich wspĂłĆczynniki korelacji w postaci jednej macierzy. W naszym przypadku uĆŒyliĆmy funkcji hetcor, aby zbadaÄ wspĂłĆczynniki korelacji liniowej Pearsona miÄdzy zmiennymi numerycznymi (âLoan Amountâ, âApplicant Incomeâ, âCoapplicant Incomeâ, i âLoan Amount Termâ), wspĂłĆczynniki korelacji polichorycznej miÄdzy zmiennymi czynnikowymi (âLoan Statusâ, âGenderâ, âCredit Historyâ, âProperty Areaâ i âDependentsâ) oraz wspĂłĆczynniki korelacji wieloseryjnej miÄdzy zmiennymi czynnikowymi a numerycznymi.
Korelacje miÄdzy decyzjÄ o przyznaniu kredytu a innymi zmiennymi
Z macierzy korelacji dowiadujemy siÄ, ĆŒe zmienna najsilniej skorelowanÄ z decyzjÄ o przyznaniu kredytu jest posiadanie historii kredytowej - wspĂłĆczynnik korelacji wynosi w tym przypadku aĆŒ 0,87.
SĆabszÄ , ale wciÄ ĆŒ istotnÄ korelacjÄ pozytywnÄ wykazujÄ pĆeÄ mÄska, dochĂłd wspĂłĆmaĆĆŒonka i iloĆc posiadanych dzieci - tu wspĂłĆczynniki wynoszÄ odpowiednio 0,16, 0,09 oraz 0,06.
W przypadku poĆoĆŒenia nieruchomoĆci moĆŒna zwrĂłcic uwagÄ na delikatnÄ korelacjÄ pozytywnÄ decyzji o przyznaniu kredytu z terenami miejskimi raczej niĆŒ wiejskimi - wspĂłĆczynnik korelacji polichorycznej wyniĂłsĆ dla tej pary zmiennych 0,04.
Co ciekawe, wspĂłĆczynniki korelacji pomiÄdzy decyzjÄ o przyznaniu kredytu a dochodem klienta, okresem kredytowania i wysokoĆciÄ poĆŒyczki sÄ bliskie zeru, co sugeruje brak bezpoĆredniego zwiÄ zku miÄdzy zmiennymi.
Korelacje miÄdzy pozostaĆymi zmiennymi
InteresujÄ ce sÄ rĂłwnieĆŒ zaleĆŒnoĆci miÄdzy zmiennymi wpĆywajÄ cymi na zdolnoĆÄ kredytowÄ :
WystÄpuje wyraĆșna, pozytywna korelacja miÄdzy wysokoĆcia poĆŒyczki o ktĂłra wnioskuje klient a jego dochodem - wspĂłĆczynnik wynosi aĆŒ 0,53. moĆŒe to wyjaĆniÄ brak wyraĆșnej korelacji miÄdzy tymi zmiennymi a decyzjÄ banku - klienci o niĆŒszym dochodzie wydajÄ siÄ rezygnowac z ubiegania siÄ o wyĆŒszÄ poĆŒyczkÄ juĆŒ na etapie skĆadania wniosku, wiÄc decyzja banku pozornie nie jest skorelowana z ich dochodem i wysokoĆcia poĆŒyczki o jakÄ wnioskujÄ - choÄ moĆŒna przypuszczaÄ, ĆŒe taka korelacja by wystÄ piĆa gdyby nie tego typu âsamoograniczanie siÄâ klientĂłw.
DoĆÄ znaczÄ ca jest tez korelacja miÄdzy mÄskÄ pĆciÄ klientĂłw a iloĆciÄ dzieci i dochodem wspĂłĆmaĆĆŒonka (wspĂłĆczynniki na poziomie odpowiednio 0,4 i 0,32) - sugeruje to, ĆŒe w przypadku maĆĆŒeĆstw korzystajÄ cych z kredytu hipotecznego maĆĆŒonkiem, ktĂłry bierze kredyt jest czÄĆciej mÄ ĆŒ niĆŒ ĆŒona.
MÄĆŒczyĆșni wydaja siÄ teĆŒ skĆonni do zaciÄ gania wiÄkszych kredytĂłw oraz akceptowania krĂłtszego okresu kredytowania - wspĂłĆczynniki korelacji miÄdzy pĆciÄ mÄskÄ a wysokoĆcia poĆŒyczki i okresem jej spĆaty wynoszÄ odpowiednio 0,16 i -0,15.
Mozna zaobserwowac ujemna korelacje na poziomie -0,26 pomiÄdzy dochodem klienta a dochodem jego wspĂłĆmaĆĆŒonka. MoĆŒna wiec przypuszczaÄ, ĆŒe wĆrĂłd maĆĆŒeĆstw wystÄpujÄ cych z wnioskiem o kredyt hipoteczny wystÄpujÄ rĂłĆŒnice w dochodzie obydwu maĆĆŒonkĂłw.
DochĂłd wspĂłĆmaĆĆŒonka jest dodatnio skorelowany z wysokoĆcia poĆŒyczki o jaka klient wnioskuje. WspĂłĆczynnik tej korelacji wynosi jednak 0,26, jest wiÄc okoĆo dwukrotnie niĆŒszy niĆŒ w przypadku dochodu samego klienta.
Klienci starajÄ cy sie o kredyt hipoteczny na nieruchomoĆc poĆozona na terenie wiejskim charakteryzujÄ siÄ niĆŒszym dochodem - zarĂłwno wĆasnym jak i wspĂłĆmaĆĆŒonka wspĂłĆczynniki wynoszÄ odpowiednio -0,05 i -0,07) - oraz wnioskujÄ o niĆŒsze kredyty z krĂłtszym terminem zapadalnoĆci (wspĂłĆczynniki korelacji na poziomie -0,1 i -0,08). Sugeruje to, ĆŒe wĆrĂłd klientĂłw wystÄpujÄ nierĂłwnoĆci dochodowe i majÄ tkowe uzaleĆŒnione od miejsca zamieszkania.
Wraz z liczbÄ posiadanych dzieci roĆnie dochĂłd klienta, ale spada dochĂłd jego wspĂłĆmaĆĆŒonka - wspĂłĆczynniki korelacji wynoszÄ tu odpowiednio 0,14 i -0,05. MoĆŒe to sugerowaÄ, ĆŒe niekiedy w tej sytuacji jedno z maĆĆŒonkĂłw w wiÄkszym stopniu skupia sie na wychowaniu dzieci i jego dochĂłd spada.
Co wiÄcej, liczba posiadanych dzieci jest dodatnio skorelowane z wysokoĆciÄ kredytu o jaki wnioskuje klient i negatywnie skorelowana z terminem kredytowania - wspĂłĆczynniki korelacji wynoszÄ odpowiednio 0,15 oraz -0,1. MoĆŒe to sugerowaÄ, ĆŒe klienci mogÄ cy sobie pozwoliÄ na wyĆŒsze kredyty i krĂłtsze okresy kredytowania mogÄ rĂłwnieĆŒ utrzymaÄ wiÄcej dzieci.
dane_do_macierzy <- data.frame(dane2$Loan_Status, dane2$Loan_Amount, dane2$Applicant_Income, dane2$Coapplicant_Income, dane2$Loan_Amount_Term, dane2$Dependents, dane2$Gender, dane2$Credit_History, dane2$Property_Area)
as.tibble(dane_do_macierzy)
etykiety <- c("Loan Status", "Loan Amount", "Applicant Income", "Coapplicant Income", "Loan Amount Term", "Dependents", "Gender", "Credit History", "Property Area")
macierz_korelacji <- polycor::hetcor(dane_do_macierzy)
print(macierz_korelacji)
wspolczynniki_korelacji <- macierz_korelacji$correlations
korelogram <- corrgram(wspolczynniki_korelacji,
order = FALSE,
labels = etykiety,
diag.panel = panel.histogram,
upper.panel=panel.pie,
col.regions = colorRampPalette(c("#A3b5c0","#eee2d4", "yellow4", "gray92","#959595","blue4","pink3"))
)5. EDA, czyli Eksploracyjna Analiza Danych
EDA to zestaw interaktywnych i wizualnych technik analizy zbioru danych bez bardziej precyzyjnego wskazania celu eksploracji.
EDA pozwala na:
zgĆÄbienie zbioru danych,
sprawdzenie zaleĆŒnoĆci miÄdzy atrybutami,
opracowanie wstÄpnych wnioskĂłw dotyczÄ cych prawidĆowoĆci w zbiorze przykĆadĂłw.
Analiza jednowymiarowa
Celem tej czÄĆci projektu jest prezentacja w postaci wykresĂłw zaleĆŒnoĆci miÄdzy decyzjÄ kredytowÄ a poszczegĂłlnymi zmiennymi jakoĆciowymi i iloĆciowymi. Sprawdzimy jak poszczegĂłlne zmienne objaĆniajÄ ce wpĆywaja na zmienna objaĆnianÄ .
Zmienne jakoĆciowe
Sprawdzimy jak dane cechy wpĆywajÄ na podejmowanie decyzji kredytowej.
Gender
Zmienna âGenderâ nie ma znaczÄ cego wpĆywu na ksztaĆtowanie siÄ zdolnoĆci kredytowej. ZauwaĆŒalna jest nieznaczna rĂłĆŒnica pomiÄdzy liczbÄ udzielanych kredytĂłw na korzyĆÄ mÄĆŒczyzn.
dane2 %>%
dplyr::select(Gender,Loan_Status) %>%
filter(Gender==c("Female", "Male")) %>%
group_by(Gender) %>%
count(Loan_Status) %>%
ggplot(aes(x = Gender, y = n, fill = Loan_Status)) +
geom_col(position = "fill",colour = "gray20", alpha=0.7, width = .7) +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
ggtitle("Gender")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Dependents
Co ciekawe, najczÄĆciej odmawiane sÄ kredyty osobom, ktĂłre majÄ tylko 1 osobÄ na utzymaniu. Dla braku osĂłb na utrzymanej, 2 osĂłb oraz 3 i wiÄcej zdolnoĆÄ kredytowa jest podobna.
dane2 %>%
dplyr:: select(Dependents,Loan_Status) %>%
filter(Dependents==c("0", "1", "2","3+")) %>%
group_by(Dependents) %>%
count(Loan_Status) %>%
ggplot(aes(x = Dependents, y = n, fill = Loan_Status)) +
geom_col(position = "fill",colour = "gray20", alpha=0.7, width = .7) +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
ggtitle("Dependents")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Education
Osobom, ktĂłre ukoĆczyĆy szkoĆÄ czÄĆciej sÄ udzielane poĆŒyczki, niĆŒ osobom, ktĂłre jej nie ukoĆczyĆy. MoĆŒe to wynikaÄ z faktu, ĆŒe zazwyczaj osoby po szkole majÄ lepiej pĆatnÄ pracÄ.
dane2 %>%
dplyr::select(Education,Loan_Status) %>%
filter(Education==c("Graduate", "Not Graduate")) %>%
group_by(Education) %>%
count(Loan_Status) %>%
ggplot(aes(x = Education, y = n, fill = Loan_Status)) +
geom_col(position = "fill",colour = "gray20", alpha=0.7, width = .7) +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
ggtitle("Education")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Self Employed
WskaĆșnik dla obu grup ksztaĆtuje siÄ na podobnym poziomie.
dane2 %>%
dplyr::select(Self_Employed,Loan_Status) %>%
filter(Self_Employed==c("Yes", "No")) %>%
group_by(Self_Employed) %>%
count(Loan_Status) %>%
ggplot(aes(x = Self_Employed, y = n, fill = Loan_Status)) +
geom_col(position = "fill",colour = "gray20", alpha=0.7, width = .7) +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Credit Hisory
Widoczna jest znaczÄ ca rĂłĆŒniaca. Tylko niecaĆe 10% osĂłb bez zdolnoĆci kredytowej, dostaje pozytywnÄ odpowiedĆș w sprawie kredytu. JeĆli ktoĆ ma historiÄ kredytowÄ jego szansa na pozytywne rozpatrzenie winosku wynosi ok 80%.
dane2 %>%
dplyr::select(Credit_History,Loan_Status) %>%
filter(Credit_History==c("1", "0")) %>%
group_by(Credit_History) %>%
count(Loan_Status) %>%
ggplot(aes(x = Credit_History, y = n, fill = Loan_Status)) +
geom_col(position = "fill",colour = "gray20", alpha=0.7, width = .7) +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
ggtitle("Credit History")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Proparty Area
RĂłĆŒnice sÄ niewielkie. NajwiÄcekszy odsetek osĂłb, ktĂłrym zostaje udzielony kredyt, pochodzÄ z obszarĂłw pĂłĆmiejskich, zaĆ najmniejszy osoby z obszarĂłw wiejskich.
dane2 %>%
dplyr::select(Property_Area,Loan_Status) %>%
group_by(Property_Area) %>%
count(Loan_Status) %>%
ggplot(aes(x = Property_Area, y = n, fill = Loan_Status)) +
geom_col(position = "fill",colour = "gray20", alpha=0.7, width = .7) +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
ggtitle("Property Area")+
theme_minimal()+
theme(plot.title = element_text(hjust = 0.5))Zmienna IloĆciowe
Aplicant Income
WysokoĆÄ dochodu nie wpĆywa w istotnym stopniu na decyzjÄ o tym czy kredyt zostanie przyznany. DochĂłd osoby aplikujÄ cej ksztaĆtuje siÄ podobnie zarĂłwno dla decyzji pozytywnych jak i negatywnych.
ggplot(dane2, aes(x=Applicant_Income, fill=Loan_Status)) +
geom_histogram( color="gray20",alpha=.5, position = 'identity') +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
theme_minimal()+
theme(text=element_text(size = 12), plot.title = element_text(hjust = 0.5))Coaplicant Income
Sytuacja prezentuje siÄ w ten sam sposĂłb dla zmiennej Coapplicant Income.
ggplot(dane2, aes(x=Coapplicant_Income, fill=Loan_Status)) +
geom_histogram( color="gray20", alpha=0.5, position = 'identity') +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
theme_minimal()+
theme(text=element_text(size = 12), plot.title = element_text(hjust = 0.5))Loan Amount Term
NajwiÄcej kredytĂłw jest branych na okres roku. Czas nie wpĆywa w stopniu istotnym na decyzjÄ o udzieleniu kredytu.
ggplot(dane2, aes(x=Loan_Amount_Term, fill=Loan_Status)) +
geom_histogram( color="gray20", alpha=0.5, position = 'identity') +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
theme_minimal()+
theme(text=element_text(size = 12), plot.title = element_text(hjust = 0.5))Loan_Amount
WysokoĆÄ poĆŒyczki nie jest czynnikiem decydujÄ cym o tym czy kredyt zostanie przyznany. Proporcje rozkĆadajÄ siÄ w podobny sposĂłb.
ggplot(dane2, aes(x=Loan_Amount, fill=Loan_Status)) +
geom_histogram( color="gray20", alpha=0.5, position = 'identity') +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
xlab("Loan Status")+
theme_minimal()+
theme(text=element_text(size = 12), plot.title = element_text(hjust = 0.5))Analiza wielowymiarowa
Widzimy, ĆŒe osoby bez historii kredytowej praktycznie nie majÄ szansy aby dostanÄ kredytu w naszym banku (wyk1). JeĆli, klient ma historiÄ kredytowÄ (wyk2) i kwota na jakÄ chce zaciÄ gnÄ Ä kredyt nie przekracza 0,04 ze stosunku Loan_Amount/(Applicant_Income+Coapplicant_Income) to ma duĆŒe szansÄ na pozytynÄ odpowiedĆș. JeĆli stosunek wykracza ponad 0.04, jest zdyskwalifikowany z moĆŒliwoĆci zaciÄ gniÄcia kredytu, nawet jeĆli posiada historiÄ kredytowÄ .
dane2 %>%
drop_na(Credit_History) %>%
ggplot( aes(x=Loan_Amount/(Applicant_Income+Coapplicant_Income), fill=Loan_Status)) +
geom_histogram(color="gray20", alpha=0.5, position = 'identity') +
scale_fill_manual(values=c("#A3b5c0","#e5e0d8"), labels=c("No", "Yes"))+
labs(fill="Loan Status")+
facet_grid(~Credit_History)+
theme_minimal()+
theme(text=element_text(size = 12), plot.title = element_text(hjust = 0.5))Weryfikacja zdolnoĆci kredytowej klientĂłw oczekujÄ cych
Sprawdzamy powiÄ zanie pomiÄdzy zmiennÄ objaĆnianÄ , a zmiennymi objaĆniajÄ cymi. Tak naprawdÄ istotna statystycznie jest jedynie zmienna Credit_History. Model logitowy w tym przypadku byĆby nieefetywny. NaleĆŒy wiÄc znaleĆșÄ inne rozwiÄ zanie, w oparciu o ktĂłre bÄdÄ podejmowane decyzje kredytowe.
summary(glm(Loan_Status ~ Gender + Applicant_Income + Married + Dependents + Education + Self_Employed + Coapplicant_Income + Loan_Amount + Loan_Amount_Term + Credit_History + Property_Area , data = dane2, family = "binomial")) ##
## Call:
## glm(formula = Loan_Status ~ Gender + Applicant_Income + Married +
## Dependents + Education + Self_Employed + Coapplicant_Income +
## Loan_Amount + Loan_Amount_Term + Credit_History + Property_Area,
## family = "binomial", data = dane2)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.5586101 1.0396236 -3.42 0.00062 ***
## GenderMale 0.6389214 0.3555258 1.80 0.07232 .
## Applicant_Income 0.0000830 0.0000964 0.86 0.38928
## MarriedYes 0.3037559 0.3282168 0.93 0.35472
## Dependents1 -0.2707238 0.3802473 -0.71 0.47648
## Dependents2 0.1662815 0.4096429 0.41 0.68480
## Dependents3+ 0.4637033 0.5539328 0.84 0.40253
## EducationNot Graduate -0.4626491 0.3203789 -1.44 0.14872
## Self_EmployedYes -0.4417265 0.4054680 -1.09 0.27597
## Coapplicant_Income 0.0001620 0.0001238 1.31 0.19089
## Loan_Amount -0.0049203 0.0038161 -1.29 0.19728
## Loan_Amount_Term 0.0005754 0.0020558 0.28 0.77957
## Credit_History1 3.9666548 0.5058218 7.84 0.0000000000000044 ***
## Property_AreaSemiurban 0.9594574 0.3341797 2.87 0.00409 **
## Property_AreaUrban 0.0666799 0.3306927 0.20 0.84020
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 518.38 on 424 degrees of freedom
## Residual deviance: 368.35 on 410 degrees of freedom
## (93 obserwacje zostaĆy skasowane z uwagi na braki w nich zawarte)
## AIC: 398.3
##
## Number of Fisher Scoring iterations: 5
Jako dziaĆ usprawnieĆ procesĂłw decyzyjnych, w oparciu o przeprowadzonÄ analizÄ danych postanowiliĆmy, ĆŒe kredyty bÄdÄ przyznawane jeĆli klient zdÄ bÄdzie okreĆlonÄ iloĆÄ punktĂłw. MoĆŒemy jednoznacznie stwierdziÄ, ĆŒe dotychczasowe decyzje o przyznawaniu kredytĂłw byĆy randomowe, co negatywnie wpĆywaĆo na reputacjÄ i ekektywnoĆÄ dziaĆania naszego banku. PozbÄdziemy siÄ przypadkowowych decyzji. DziÄki opracowaniu modelu, wykluczymy przypadkowe decyzje kredytowe. Klientami naszego banku, bÄdÄ klienci, ktĂłrzy bÄdÄ w stanie regulowaÄ zobowiÄ zanie.
Uzasadnienie punktacji:
Z wczeĆniejszej analizy wywnioskowaliĆmy, ĆŒe w oparciu o Credit_History, w gĆĂłwnej mierze wczeĆniej zostaĆy podejmowane decyzje o udzieleniu kredytu. PodejmujÄ c przyszĆe decyzje kredytowe historia kredytowa rĂłwnieĆŒ bÄdzie znaczÄ cym czynnikiem.
NajczÄĆciej osoby z obszarĂłw podmiejskich otrzymywaĆy kredyty, rĂłwnieĆŒ tÄ zmiennÄ postanowiliĆmy uwzglÄdniÄ
Osoby w zwiÄ zku maĆĆŒeĆskim otrzymajÄ dodatkowe 0.35 pkt. SÄ to osoby ustabilizowane.
Jako najwaĆŒniejszy skĆadnik w ocenie punktowej potraktujemy stosunek poĆŒyczki do caĆkowitych dochodĂłw.
Punkty za przychĂłd aplikanta, bÄdÄ przyznawane zgodnie z wczeĆniej poznym rozkĆadem, tzn. 0 pkt jeĆli dochody sÄ mniejsze niĆŒ Q1, 0.8 jeĆli dochody sÄ mniejsze niĆŒ mediana, 1.6 jeĆli sÄ wiÄksze niĆŒ mediana i mniejsze niĆŒ Q3, i 1.6 pkt jeĆli sÄ wiÄksze niĆŒ Q3
Liczba osĂłb na utrzymaniu jest obciÄ ĆŒenieniem dla osoby spĆacajÄ cej kredyt, dlatego jeĆli nie ma nikogo na utrzymaniu otrzyma 1 pkt, jeĆli zaĆ ma 3+ osĂłb otrzyma 0 pkt.
Punkty za przychĂłd wspĂłĆwnioskodawcy, bÄdÄ przyznawane na podstawie wczeĆniejszego pozanego rozkĆadu tzn. 0 pkt jeĆli dochody coapplicanta sÄ mniejsze niĆŒ Q1, 068 jeĆli dochody sÄ mniejsze niĆŒ mediana, 0.8 jeĆli sÄ wiÄksze niĆŒ mediana i mniejsze niĆŒ Q3, i 1.6 pkt jeĆli sÄ wiÄksze niĆŒ Q3.
Maksymalna liczba punktĂłw do zdobycia to 11.05.
prĂłba <- prĂłba %>%
dplyr:: mutate(pktCH = case_when(
Credit_History =="1" ~ 3.5,
Credit_History != "1" ~ 0 ))
prĂłba <- prĂłba %>%
dplyr:: mutate(pktSemi = case_when(
Property_Area =="Semiurban" ~ 0.3,
Property_Area != "Semiurban" ~ 0 ))
prĂłba <- prĂłba %>%
dplyr:: mutate(pktGen = case_when(
Gender =="Male" ~ 0.2,
Gender != "Male" ~ 0 ))
prĂłba <- prĂłba %>%
dplyr:: mutate(pktMar = case_when(
Married =="Yes" ~ 0.35,
Married != "Yes" ~ 0 ))
prĂłba <- prĂłba %>%
mutate("SKZ"=Loan_Amount/(Applicant_Income+Coapplicant_Income)) %>%
mutate(pktSKZ= case_when( SKZ > 0.00 & SKZ <0.03 ~ 3,
SKZ > 0.03 & SKZ <0.035 ~ 2.5,
SKZ > 0.35 ~ -8 ))
prĂłba <- prĂłba %>%
dplyr:: mutate(pktINC= case_when( Applicant_Income >= 0 & Applicant_Income < 2764 ~ 0,
Applicant_Income >= 2764 & Applicant_Income < 4104 ~ 0.8,
Applicant_Income >= 4104 & Applicant_Income < 4931 ~ 1.6,
Applicant_Income >= 4931 ~ 2))
prĂłba <- prĂłba %>%
mutate(pktDEP= case_when( Dependents =="0" ~ 0.7,
Dependents =="1" ~ 0.4,
Dependents =="2" ~ 0.2,
Dependents =="3+" ~ 0))
prĂłba <- prĂłba %>%
mutate(pktCOAPP= case_when( Coapplicant_Income == 0 ~ 0,
Coapplicant_Income > 0 & Coapplicant_Income < 1625 ~ 0.2,
Coapplicant_Income >= 1625 & Coapplicant_Income < 2079 ~ 0.4,
Coapplicant_Income >= 2079 & Coapplicant_Income < 2857 ~ 0.6,
Coapplicant_Income >= 2857 ~ 1))
prĂłba <- prĂłba %>%
mutate(wynik = pktCH + pktSemi + pktGen + pktSKZ+ pktMar+ pktINC+ pktDEP+ pktCOAPP)
prĂłba %>%
dplyr:: select(wynik, Loan_Status) %>%
group_by(Loan_Status) %>%
drop_na() %>%
dplyr::summarise(mean(wynik), min(wynik), max(wynik)) %>%
formattable(align ="c")| Loan_Status | mean(wynik) | min(wynik) | max(wynik) |
|---|---|---|---|
| N | 7.15833 | 3.45 | 11.05 |
| Y | 8.78349 | 4.80 | 11.05 |
prĂłba <- prĂłba %>%
transmute(Loan_ID, Gender, Applicant_Income , Married , Dependents , Education , Self_Employed , Coapplicant_Income , Loan_Amount , Loan_Amount_Term , Credit_History , Property_Area, Loan_Status, wynik)
prĂłba %>%
dplyr:: select(wynik, Loan_Status) %>%
group_by(Loan_Status) %>%
drop_na() %>%
ggplot(aes(wynik, colour=Loan_Status, group=Loan_Status, fill=Loan_Status)) +
geom_density(color="gray20", alpha=0.5, position = 'identity') +
scale_fill_manual(values = c("#A3b5c0", "#e5e0d8")) +
theme_minimal()+
theme(text=element_text(size = 12), plot.title = element_text(hjust = 0.5))Wyniki sÄ bardzo ciekawe, poniewaĆŒ jedna czÄĆÄ decyzji o negatywnych, zostaĆa sĆusznie odrzucona (od 0 do 7 pkt), ale pĂłĆșniej widzimy, ĆŒe z jakiegoĆ powodu spora czÄĆÄ osĂłb, ktĂłra zdobyĆa znaczÄ cÄ iloĆÄ punktĂłw, miaĆa niesĆusznie odrzucone wnioski (lub z nieznanych nam powodĂłw, wykraczajÄ cych poza zakres dostÄpnych danych- np. te osoby mogĆy byÄ karane, co na starcie skreĆla je z moĆŒliwoĆci otrzymania kredytu, jednak nie zostaĆy nam dostarczone tego typu informacje, przez co obniĆŒona jest efektywnoĆÄ naszej analizy). JeĆli nasz dziaĆ uzyska informacje na ten temat, zaktualizuje obecnie przyjÄty model podejmowania decyzji. Co do wnioskĂłw rozpatrzonych pozytywnie, nie ma nieĆcisĆoĆci. Widzimy, ĆŒe w tej grupie sÄ tylko aplikanci, ktĂłrzy zdobyli powyĆŒej 7 pkt, i tym samym dostawali kredyt.
Decyzje o przyznaniu kredytu klientĂłw oczekujÄ cych
ETAP 1
Weryfikacja, czy dane zostaĆy uzupeĆnione poprawnie, czy podstawowe zaĆoĆŒnienia sÄ speĆnione. DwĂłch klientĂłw nie wykazuje ĆŒadnych dochodĂłw, co teĆŒ na wstÄpnie dyskwalifikuje ich z dalszej weryfikacji zdolnoĆci kredytowej
| name | items | passes | fails | nNA | error | warning | expression |
|---|---|---|---|---|---|---|---|
| V01 | 367 | 367 | 0 | 0 | FALSE | FALSE | Married != âYesâ | (Coapplicant_Income - 0 >= -0.00000001) |
| V02 | 367 | 367 | 0 | 0 | FALSE | FALSE | Married %vin% c(âYesâ, âNoâ) |
| V03 | 367 | 356 | 0 | 11 | FALSE | FALSE | Gender %vin% c(âFemaleâ, âMaleâ) |
| V04 | 367 | 357 | 0 | 10 | FALSE | FALSE | Dependents %vin% c(â0â, â1â, â2â, â3+â) |
| V05 | 367 | 367 | 0 | 0 | FALSE | FALSE | Education %vin% c(âGraduateâ, âNot Graduateâ) |
| V06 | 367 | 344 | 0 | 23 | FALSE | FALSE | Self_Employed %vin% c(âYesâ, âNoâ) |
| V07 | 367 | 365 | 2 | 0 | FALSE | FALSE | Applicant_Income > 0 |
| V08 | 367 | 367 | 0 | 0 | FALSE | FALSE | Coapplicant_Income - 0 >= -0.00000001 |
| V09 | 367 | 362 | 0 | 5 | FALSE | FALSE | Loan_Amount > 0 |
| V10 | 367 | 361 | 0 | 6 | FALSE | FALSE | Loan_Amount_Term > 0 |
| V11 | 367 | 338 | 0 | 29 | FALSE | FALSE | Credit_History %vin% c(â1â, â0â) |
| V12 | 367 | 367 | 0 | 0 | FALSE | FALSE | Property_Area %vin% c(âUrbanâ, âSemiurbanâ, âRuralâ) |
ETAP 2
Zastosowanie punktacji do weryfikacji czy klient ma zdolnoĆÄ kredytowÄ
dane1 <- dane1 %>%
dplyr:: mutate(pktCH = case_when(
Credit_History =="1" ~ 3.5,
Credit_History != "1" ~ 0 ))
dane1 <- dane1 %>%
dplyr:: mutate(pktSemi = case_when(
Property_Area =="Semiurban" ~ 0.3,
Property_Area != "Semiurban" ~ 0 ))
dane1 <- dane1 %>%
dplyr:: mutate(pktGen = case_when(
Gender =="Male" ~ 0.2,
Gender != "Male" ~ 0 ))
dane1 <- dane1 %>%
dplyr:: mutate(pktMar = case_when(
Married =="Yes" ~ 0.35,
Married != "Yes" ~ 0 ))
dane1 <- dane1 %>%
mutate("SKZ"=Loan_Amount/(Applicant_Income+Coapplicant_Income)) %>%
mutate(pktSKZ= case_when( SKZ > 0.00 & SKZ <0.03 ~ 3,
SKZ > 0.03 & SKZ <0.035 ~ 2.5,
SKZ > 0.35 ~ -8 ))
dane1 <- dane1 %>%
dplyr:: mutate(pktINC= case_when( Applicant_Income >= 0 & Applicant_Income < 2764 ~ 0,
Applicant_Income >= 2764 & Applicant_Income < 4104 ~ 0.8,
Applicant_Income >= 4104 & Applicant_Income < 4931 ~ 1.6,
Applicant_Income >= 4931 ~ 2))
dane1 <- dane1 %>%
mutate(pktDEP= case_when( Dependents =="0" ~ 0.7,
Dependents =="1" ~ 0.4,
Dependents =="2" ~ 0.2,
Dependents =="3+" ~ 0))
dane1 <- dane1 %>%
mutate(pktCOAPP= case_when( Coapplicant_Income == 0 ~ 0,
Coapplicant_Income > 0 & Coapplicant_Income < 1625 ~ 0.2,
Coapplicant_Income >= 1625 & Coapplicant_Income < 2079 ~ 0.4,
Coapplicant_Income >= 2079 & Coapplicant_Income < 2857 ~ 0.6,
Coapplicant_Income >= 2857 ~ 1))
dane1 <- dane1 %>%
mutate(wynik = pktCH + pktSemi + pktGen + pktSKZ+ pktMar+ pktINC+ pktDEP+ pktCOAPP)
dane1 <- dane1 %>%
mutate(Loan_Status=case_when(wynik >=7.51 ~ "Y",
wynik < 7.51 ~ "N"))
dane1 %>%
dplyr:: select(wynik, Loan_Status) %>%
group_by(Loan_Status) %>%
drop_na() %>%
dplyr::summarise(mean(wynik), min(wynik), max(wynik)) %>%
formattable(align ="c") | Loan_Status | mean(wynik) | min(wynik) | max(wynik) |
|---|---|---|---|
| N | 5.83525 | 3.45 | 7.50 |
| Y | 9.03392 | 7.55 | 10.75 |
dane1 <- dane1 %>%
transmute(Loan_ID, Gender, Applicant_Income , Married , Dependents , Education , Self_Employed , Coapplicant_Income , Loan_Amount , Loan_Amount_Term , Credit_History , Property_Area, Loan_Status, wynik)
dane1 %>%
dplyr:: select(Loan_Status) %>%
group_by(Loan_Status) %>%
drop_na() %>%
count(Loan_Status) %>%
formattable(align ="c") | Loan_Status | n |
|---|---|
| N | 61 |
| Y | 227 |
W oparciu o opracowanÄ punktacjÄ 61 wnioskĂłw zostaĆo odrzuconych, 227 zaakceptowanych. DziÄki opracowanej punktacji, decyzje o udzielaniu kredytĂłw bÄdÄ miaĆy uzasadnienie, skrĂłcimy czas potrzebny do podjÄcia decyzji oraz uporamy siÄ z problemem przypadkowoĆci.
Wiskowanie statystyczne
PYTANIA BADAWCZE:
- Czy wysokoĆÄ kredytu zaleĆŒy
od caĆkowitego dochodu (aplikanta i wspĂłĆaplikanta)? Sprawdzanie za
pomocÄ
ANOVA â testowanie istotnoĆci wspĂłĆczynnikĂłw regresji
liniowej
Bardzo niski wspĂłĆczynnik pvalue Ćwiadczy o istotnoĆci parametrĂłw. Im mniejsze wartoĆci Kryterium Informacyjnego Akaikeâa (AIC) i Kryterium Informacyjnego Bayesa (BIC), tym âlepszyâ jest model. Poziome proste pokazujÄ przedziaĆy 95% obserwacji odpowiednio dla zmiennej Coapplicant Income i Applicant Income. Ponadto pokazana jest statystyka testu F i Chi dla wybranych ziennych.
Wnioski koĆcowe
W procesie analizy EDA okazaĆo siÄ, ĆŒe wysokoĆÄ dochodĂłw praktycznie nie decyduje o zdolnoĆci kredytowej klientĂłw, toteĆŒ nasza hitpoteza zostaĆa odrzucona. W oparciu o przeprowadzonÄ analizÄ oraz uzasadnione przesĆanki opracowaliĆmy model, ktĂłry przyznaje punkty w oparciu o okreĆlone kryteria i na tej podstawie zostaje podjÄta decyzja o udzieleniu kredytu. (Nasz model wymaga jednak dopracowania, szczegĂłlnie w konkekĆcie osĂłb, ktĂłre otrzymaĆy wysokÄ liczbÄ punktĂłw, a z nieznanych nam powodĂłw ich wnioski zostaĆy odrzucone. Po uwazglÄdnieniu takich dodatkowych danych, wykraczajÄ cych poza zakres dostÄpnych obecnie danych, model naleĆŒaĆoby uaktualniÄ, ĆŒeby staĆ siÄ bardziej efektywny).