Celem niniejszego projektu jest analiza danych związanych z udzielaniem kredytów hipotecznych, aby zidentyfikować kluczowe czynniki wpływające na decyzję o przyznaniu kredytu. Dzięki zastosowaniu narzędzi do analizy danych w języku R, przeanalizujemy, jakie cechy wnioskodawców i ich sytuacja finansowa mają największy wpływ na otrzymanie decyzji pozytywnej. W ramach analizy wykorzystamy zbiór danych zawierający różnorodne informacje o wnioskodawcach, w tym ich: płeć, stan cywilny, liczba osób na utrzymaniu, wykształcenie, zatrudnienie na własny rachunek, dochód głównego wnioskodawcy, dochód współwnioskodawcy, kwotę wnioskowanego kredytu, okres spłaty kredytu, historie kredytową oraz miejsce zamieszkania.
Załadowanie potrzebnych bibliotek
library(naniar)
library(dplyr)
##
## Dołączanie pakietu: 'dplyr'
## Następujące obiekty zostały zakryte z 'package:stats':
##
## filter, lag
## Następujące obiekty zostały zakryte z 'package:base':
##
## intersect, setdiff, setequal, union
library(VIM)
## Ładowanie wymaganego pakietu: colorspace
## Ładowanie wymaganego pakietu: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
##
## Dołączanie pakietu: 'VIM'
## Następujący obiekt został zakryty z 'package:datasets':
##
## sleep
library(ggplot2)
library(gtsummary)
library(summarytools)
library(ggstatsplot)
## You can cite this package as:
## Patil, I. (2021). Visualizations with statistical details: The 'ggstatsplot' approach.
## Journal of Open Source Software, 6(61), 3167, doi:10.21105/joss.03167
dane <- read.csv("Hipoteczny.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE)
Zmiana pustych wartości na NA w celu poprawy jakości analizy danych, ponieważ niektóre wartości w zbiorze danych są puste (np. ” “) i nie zostały oznaczone jako NA
dane <- dane %>%
mutate(Gender = ifelse(Gender == "" | Gender == "NULL" | Gender == "N/A", NA, Gender)) %>%
mutate(Married = ifelse(Married == "" | Married == "NULL" | Married == "N/A", NA, Married)) %>%
mutate(Dependents = ifelse(Dependents == "" | Dependents == "NULL" | Dependents == "N/A", NA, Dependents)) %>%
mutate(Education = ifelse(Education == "" | Education == "NULL" | Education == "N/A", NA, Education)) %>%
mutate(Self_Employed = ifelse(Self_Employed == "" | Self_Employed == "NULL" | Self_Employed == "N/A", NA, Self_Employed)) %>%
mutate(ApplicantIncome = ifelse(ApplicantIncome == "" | ApplicantIncome == "NULL" | ApplicantIncome == "N/A", NA, ApplicantIncome)) %>%
mutate(CoapplicantIncome = ifelse(CoapplicantIncome == "" | CoapplicantIncome == "NULL" | CoapplicantIncome == "N/A", NA, CoapplicantIncome)) %>%
mutate(LoanAmount = ifelse(LoanAmount == "" | LoanAmount == "NULL" | LoanAmount == "N/A", NA, LoanAmount)) %>%
mutate(Loan_Amount_Term = ifelse(Loan_Amount_Term == "" | Loan_Amount_Term == "NULL" | Loan_Amount_Term == "N/A", NA, Loan_Amount_Term)) %>%
mutate(Credit_History = ifelse(Credit_History == "" | Credit_History == "NULL" | Credit_History == "N/A", NA, Credit_History)) %>%
mutate(Property_Area = ifelse(Property_Area== "" | Property_Area == "NULL" | Property_Area == "N/A", NA, Property_Area))
miss_var_summary(dane)
Braki zauważamy w takich kategoriach jak: Credit_History, Self_Employed, Gender, Dependents, Loan_Amount_Term, LoanAmount. Zatem badamy brakujące dane wg poszczególnych kategorii.
dane %>%
group_by(Credit_History) %>%
miss_var_summary() %>%
print(n=33)
## # A tibble: 33 × 4
## # Groups: Credit_History [3]
## Credit_History variable n_miss pct_miss
## <int> <chr> <int> <num>
## 1 1 Self_Employed 13 4.66
## 2 1 Gender 9 3.23
## 3 1 Dependents 8 2.87
## 4 1 LoanAmount 4 1.43
## 5 1 Loan_Amount_Term 4 1.43
## 6 1 Loan_ID 0 0
## 7 1 Married 0 0
## 8 1 Education 0 0
## 9 1 ApplicantIncome 0 0
## 10 1 CoapplicantIncome 0 0
## 11 1 Property_Area 0 0
## 12 NA Dependents 2 6.90
## 13 NA Self_Employed 1 3.45
## 14 NA Loan_Amount_Term 1 3.45
## 15 NA Loan_ID 0 0
## 16 NA Gender 0 0
## 17 NA Married 0 0
## 18 NA Education 0 0
## 19 NA ApplicantIncome 0 0
## 20 NA CoapplicantIncome 0 0
## 21 NA LoanAmount 0 0
## 22 NA Property_Area 0 0
## 23 0 Self_Employed 9 15.3
## 24 0 Gender 2 3.39
## 25 0 LoanAmount 1 1.69
## 26 0 Loan_Amount_Term 1 1.69
## 27 0 Loan_ID 0 0
## 28 0 Married 0 0
## 29 0 Dependents 0 0
## 30 0 Education 0 0
## 31 0 ApplicantIncome 0 0
## 32 0 CoapplicantIncome 0 0
## 33 0 Property_Area 0 0
gg_miss_var(dane, facet = Credit_History)
Braki w danych głównie są dla osób, które miały kredyt, w kategoriach takich jak Self_Employed, Gender, Dependents. Braki dla osób, które nie miały kredytu są głównie w kategorii Self_Employed.
dane %>%
group_by(Self_Employed) %>%
miss_var_summary() %>%
print(n=33)
## # A tibble: 33 × 4
## # Groups: Self_Employed [3]
## Self_Employed variable n_miss pct_miss
## <chr> <chr> <int> <num>
## 1 No Credit_History 26 8.47
## 2 No Gender 9 2.93
## 3 No Dependents 9 2.93
## 4 No Loan_Amount_Term 6 1.95
## 5 No LoanAmount 5 1.63
## 6 No Loan_ID 0 0
## 7 No Married 0 0
## 8 No Education 0 0
## 9 No ApplicantIncome 0 0
## 10 No CoapplicantIncome 0 0
## 11 No Property_Area 0 0
## 12 Yes Gender 2 5.41
## 13 Yes Credit_History 2 5.41
## 14 Yes Dependents 1 2.70
## 15 Yes Loan_ID 0 0
## 16 Yes Married 0 0
## 17 Yes Education 0 0
## 18 Yes ApplicantIncome 0 0
## 19 Yes CoapplicantIncome 0 0
## 20 Yes LoanAmount 0 0
## 21 Yes Loan_Amount_Term 0 0
## 22 Yes Property_Area 0 0
## 23 <NA> Credit_History 1 4.35
## 24 <NA> Loan_ID 0 0
## 25 <NA> Gender 0 0
## 26 <NA> Married 0 0
## 27 <NA> Dependents 0 0
## 28 <NA> Education 0 0
## 29 <NA> ApplicantIncome 0 0
## 30 <NA> CoapplicantIncome 0 0
## 31 <NA> LoanAmount 0 0
## 32 <NA> Loan_Amount_Term 0 0
## 33 <NA> Property_Area 0 0
gg_miss_fct(dane, fct = Self_Employed)
Braki danych głównie są dla osób które nie są samozatrudnione, głównie w kategorii Credit_History (8.47%), Gender (2.93%), Dependents (2.93%). Osoby, które są samozatrudnione mają małe braki danych w kategoriach Gender (5.41%) i Credit_history (5.41%).
dane %>%
group_by(Gender) %>%
miss_var_summary() %>%
print(n=33)
## # A tibble: 33 × 4
## # Groups: Gender [3]
## Gender variable n_miss pct_miss
## <chr> <chr> <int> <num>
## 1 Male Credit_History 23 8.04
## 2 Male Self_Employed 20 6.99
## 3 Male Dependents 7 2.45
## 4 Male Loan_Amount_Term 6 2.10
## 5 Male LoanAmount 4 1.40
## 6 Male Loan_ID 0 0
## 7 Male Married 0 0
## 8 Male Education 0 0
## 9 Male ApplicantIncome 0 0
## 10 Male CoapplicantIncome 0 0
## 11 Male Property_Area 0 0
## 12 Female Credit_History 6 8.57
## 13 Female Self_Employed 3 4.29
## 14 Female Dependents 2 2.86
## 15 Female LoanAmount 1 1.43
## 16 Female Loan_ID 0 0
## 17 Female Married 0 0
## 18 Female Education 0 0
## 19 Female ApplicantIncome 0 0
## 20 Female CoapplicantIncome 0 0
## 21 Female Loan_Amount_Term 0 0
## 22 Female Property_Area 0 0
## 23 <NA> Dependents 1 9.09
## 24 <NA> Loan_ID 0 0
## 25 <NA> Married 0 0
## 26 <NA> Education 0 0
## 27 <NA> Self_Employed 0 0
## 28 <NA> ApplicantIncome 0 0
## 29 <NA> CoapplicantIncome 0 0
## 30 <NA> LoanAmount 0 0
## 31 <NA> Loan_Amount_Term 0 0
## 32 <NA> Credit_History 0 0
## 33 <NA> Property_Area 0 0
gg_miss_var(dane, facet = Gender)
Nie ma znaczącego rozróznicowania braków ze względu na kategorie ze względu na płeć. Widać jednakże, że więcej braków jest u mężczyzn.
dane %>%
group_by(Dependents) %>%
miss_var_summary() %>%
print(n=22)
## # A tibble: 55 × 4
## # Groups: Dependents [5]
## Dependents variable n_miss pct_miss
## <chr> <chr> <int> <num>
## 1 0 Credit_History 15 7.5
## 2 0 Gender 7 3.5
## 3 0 Self_Employed 7 3.5
## 4 0 Loan_Amount_Term 3 1.5
## 5 0 LoanAmount 2 1
## 6 0 Loan_ID 0 0
## 7 0 Married 0 0
## 8 0 Education 0 0
## 9 0 ApplicantIncome 0 0
## 10 0 CoapplicantIncome 0 0
## 11 0 Property_Area 0 0
## 12 1 Self_Employed 8 13.8
## 13 1 Credit_History 3 5.17
## 14 1 Gender 2 3.45
## 15 1 LoanAmount 2 3.45
## 16 1 Loan_Amount_Term 2 3.45
## 17 1 Loan_ID 0 0
## 18 1 Married 0 0
## 19 1 Education 0 0
## 20 1 ApplicantIncome 0 0
## 21 1 CoapplicantIncome 0 0
## 22 1 Property_Area 0 0
## # ℹ 33 more rows
gg_miss_var(dane, facet = Dependents)
Bez względu na ilość osób na utrzymaniu, braki są w takich kategoriach jak: Credit_History, Self_Employed. Najmniej rozróżnicowania braków w kategoriach jest dla osób mających 2 osoby na utrzymaniu.
dane %>%
group_by(Loan_Amount_Term) %>%
miss_var_summary() %>%
print(n=10)
## # A tibble: 143 × 4
## # Groups: Loan_Amount_Term [13]
## Loan_Amount_Term variable n_miss pct_miss
## <int> <chr> <int> <num>
## 1 360 Credit_History 26 8.36
## 2 360 Self_Employed 20 6.43
## 3 360 Gender 10 3.22
## 4 360 Dependents 8 2.57
## 5 360 LoanAmount 4 1.29
## 6 360 Loan_ID 0 0
## 7 360 Married 0 0
## 8 360 Education 0 0
## 9 360 ApplicantIncome 0 0
## 10 360 CoapplicantIncome 0 0
## # ℹ 133 more rows
gg_miss_var(dane, facet = Loan_Amount_Term)
Znaczące braki mają osoby, które mają kredyty na okres roku.
dane %>%
miss_case_table()
W 289 wierszach nie brakuje żadnych danych, co stanowi 78.74 % wszystykich wierszy. W 72 wierszach brakuje 1 danej, co stanowi 19.61% wszystkich wierszy. W 6 wierszach brakuje równocześnie 2 danych, co stanowi 1.63% wszystkich wierszy.
vis_miss(dane)
Ogólnie braki stanowią 1.9% wszystkich danych.
gg_miss_upset(dane, nsets = 6)
Podsumowując braki danych dotyczą głównie kategorii takich jak: Credit_History, Self_Employed, Gender, Dependents, Loan_Amount_Term oraz LoanAmount. Najwięcej braków występuje u osób, które miały historię kredytową, szczególnie w kategoriach Self_Employed i Gender. Wśród osób niesamozatrudnionych braki są bardziej widoczne w Credit_History (8.47%), Gender (2.93%) i Dependents (2.93%). Samozatrudnieni mają mniej braków, ale widoczne są one w Credit_History (5.41%) i Gender (5.41%). Więcej braków danych występuje u mężczyzn, jednak różnice między płciami nie są znaczące. W kategorii Dependents braki dotyczą głównie osób mających 0 lub 1 osobę na utrzymaniu, a najmniej braków obserwuje się u osób z 2 osobami na utrzymaniu. Największe luki w danych Loan_Amount_Term występują u osób z kredytami na okres jednego roku.
Braki te mogą wpłynąć na wyniki analizy, dlatego w kolejnym kroku uzupełnimy braki danych metodą hot deck imputation, która polega na uzupełnianiu braków danych poprzez przypisanie brakującej wartości na podstawie istniejących danych od podobnych obserwacji w zbiorze danych.Następnie sprawdzamy czy wszystkie braki zostały uzupełnione.
data <-hotdeck(dane)
miss_var_summary(data)
hist(
data$LoanAmount,
main = "Histogram wartości LoanAmount",
xlab = "Kwota pożyczki",
ylab = "Częstość",
col = "lightblue",
border = "black",
breaks = 20 # Możesz dostosować liczbę przedziałów
)
Większość pożyczek jest stosunkowo niska, najczęściej w przedziale 100-150. Rozkład jest prawoskośny, co oznacza, że dominują mniejsze kwoty, a większe pożyczki są znacznie rzadsze. Można zauważyć kilka wartości powyżej 300, co sugeruje obecność nielicznych, ale znaczących kredytów, które mogą być odstającymi danymi. Jeśli dane dotyczą kredytów konsumenckich, może to wskazywać na politykę instytucji finansowych, które rzadziej udzielają bardzo wysokich pożyczek.
hist(
data$ApplicantIncome,
main = "Histogram dla ApplicantIncome",
xlab = "Dochód wnioskodawcy",
ylab = "Częstość",
col = "lightblue",
border = "black",
breaks = 20
)
Większość wnioskodawców ma stosunkowo niski dochód, co widać po dużej liczbie obserwacji skoncentrowanych w najniższych przedziałach. Rozkład jest silnie prawoskośny, co oznacza, że występuje kilka przypadków bardzo wysokich dochodów, ale są one rzadkie. Takie wartości odstające mogą wskazywać na obecność osób o znacznie wyższych zarobkach, co może wpływać na średnią, ale nie na ogólną strukturę dochodów większości wnioskodawców.
boxplot(
data$ApplicantIncome,
main = "Wykres pudełkowy dla ApplicantIncome",
ylab = "Dochód wnioskodawcy",
col = "lightgreen",
border = "black"
)
Wykres pudełkowy dla dochodu wnioskodawcy pokazuje, że większość wartości jest stosunkowo niska i skoncentrowana blisko dolnej części skali. Mediana dochodów znajduje się nisko, co potwierdza wcześniejszą obserwację o prawoskośnym rozkładzie danych. Widać również dużą liczbę wartości odstających powyżej górnej granicy, co oznacza, że istnieją pojedyncze przypadki osób o znacznie wyższych dochodach w porównaniu do reszty.
hist(
data$CoapplicantIncome,
main = "Histogram dla CoapplicantIncome",
xlab = "Dochód współwnioskodawcy",
ylab = "Częstość",
col = "lightblue",
border = "black",
breaks = 20
)
Histogram przedstawia rozkład dochodu współwnioskodawców. Widać, że większość wartości skupia się w niskim zakresie dochodów, a liczba współwnioskodawców gwałtownie maleje wraz ze wzrostem dochodu. Rozkład jest silnie skośny w prawo, co oznacza, że niewielka liczba osób ma bardzo wysokie dochody, ale większość znajduje się na niższych poziomach. Możliwe, że istnieją wartości odstające, które znacząco przewyższają typowe dochody
boxplot(
data$CoapplicantIncome,
main = "Wykres pudełkowy dla CoapplicantIncome",
ylab = "Dochód współwnioskodawcy",
col = "lightpink",
border = "black"
)
Wykres pudełkowy pokazuje, że większość dochodów współwnioskodawców jest skoncentrowana w dolnym zakresie wartości. Środkowe 50% danych (między pierwszym a trzecim kwartylem) obejmuje stosunkowo niewielki przedział dochodów, co wskazuje na dużą koncentrację niskich wartości. Mediana znajduje się nisko, co potwierdza prawoskośność rozkładu. Występuje wiele wartości odstających, które znacznie przewyższają resztę danych, co sugeruje istnienie kilku współwnioskodawców z wyjątkowo wysokimi dochodami
boxplot(
data$LoanAmount,
main = "Wykres pudełkowy dla LoanAmount",
ylab = "Kwota pożyczki",
col = "lightblue",
border = "black"
)
Większość pożyczek jest stosunkowo niska, najczęściej w przedziale 100-150. Rozkład jest prawoskośny, co oznacza, że dominują mniejsze kwoty, a większe pożyczki są znacznie rzadsze. Można zauważyć kilka wartości powyżej 300, co sugeruje obecność nielicznych, ale znaczących kredytów, które mogą być odstającymi danymi. Jeśli dane dotyczą kredytów konsumenckich, może to wskazywać na politykę instytucji finansowych, które rzadziej udzielają bardzo wysokich pożyczek.
hist(
data$Loan_Amount_Term,
main = "Histogram dla Loan_Amount_Term",
xlab = "Termin kwoty pożyczki",
ylab = "Częstość",
col = "lightblue",
border = "black",
breaks = 20
)
Histogram pokazuje rozkład terminów pożyczek i potwierdza, że zdecydowana większość przypadków przypada na jeden dominujący okres, prawdopodobnie 360 miesięcy.
Widoczne są również inne rzadsze wartości, ale ich liczebność jest stosunkowo niska. Oznacza to, że w zbiorze danych występują różne okresy pożyczek, ale jeden (najdłuższy) jest zdecydowanie najczęściej wybierany przez klientów. Histogram pomaga lepiej zrozumieć rozkład wartości w porównaniu do boxplota, zwłaszcza w zakresie liczby obserwacji dla każdej grupy.
boxplot(
data$Loan_Amount_Term,
main = "Wykres pudełkowy dla Loan_Amount_Term",
ylab = "Termin pożyczki",
col = "pink",
border = "black"
)
Wykres pudełkowy przedstawia rozkład długości terminu pożyczki. Większość wartości skupia się wokół jednej konkretnej wartości (najprawdopodobniej 360), co sugeruje, że standardowy okres pożyczki jest stały i dominujący.
Obecność licznych wartości odstających wskazuje, że w zbiorze danych znajdują się również znacznie krótsze oraz niektóre dłuższe terminy, ale występują one rzadziej. Wąski zakres międzykwartylowy (IQR) oznacza, że większość terminów pożyczek jest bardzo podobna i ma małe zróżnicowanie.
Wysokość pożyczki wg stanu cywilnego
boxplot(
LoanAmount ~ Married,
data = data,
main = "Wykres pudełkowy LoanAmount względem Married",
xlab = "Stan cywilny",
ylab = "Kwota pożyczki",
col = c("lightblue", "lightgreen"),
border = "black"
)
Wykres pudełkowy przedstawia rozkład kwoty pożyczki (LoanAmount) w zależności od stanu cywilnego (Married). Osoby niezamężne (No) oraz zamężne (Yes) mają podobną medianę kwoty pożyczki, jednak w przypadku osób zamężnych rozkład wartości wydaje się być nieco szerszy.
Widać również większą liczbę wartości odstających (outliers) wśród osób zamężnych, co sugeruje, że niektóre osoby w tej grupie zaciągnęły znacznie wyższe pożyczki. Zakres kwot pożyczek jest zbliżony w obu grupach, jednak ogólny rozrzut danych wydaje się większy dla osób zamężnych.
Dochód wnioskodawców wg wykształcenia
boxplot(
ApplicantIncome ~ Education,
data = data,
main = "Wykres pudełkowy ApplicantIncome względem Education",
xlab = "Wykształcenie",
ylab = "Dochód wnioskodawcy",
col = c("lightblue", "lightpink"),
border = "black"
)
Wykres pudełkowy przedstawia dochód wnioskodawców (ApplicantIncome) w podziale na poziom wykształcenia (Education). Widać, że mediany dochodów dla obu grup (Graduate i Not Graduate) są zbliżone, co sugeruje, że samo ukończenie studiów nie ma znaczącego wpływu na średni poziom zarobków.
Jednak w grupie absolwentów (Graduate) występuje większa liczba wartości odstających, co oznacza, że niektórzy absolwenci osiągają znacznie wyższe dochody w porównaniu do osób bez wyższego wykształcenia. W szczególności widać kilka ekstremalnie wysokich dochodów (powyżej 60 000), które nie występują w grupie Not Graduate.
Podsumowując, chociaż średnie dochody dla obu grup są podobne, wyższe wykształcenie może zwiększać szanse na bardzo wysokie zarobki, co widoczne jest w większej liczbie wartości odstających w grupie Graduate.
Wysokość pożyczki wg wykształcenia
ggplot(data, aes(x=Education,y=LoanAmount))+
geom_boxplot() +
labs(title="Wysokość pożyczki wg wykształcenia", x="Wykształcenie", y="Wysokość pożyczki") +
theme_bw() + #typ kolorystyczny wykresu
facet_wrap(~Gender) +
coord_flip() #obraca wykres
Wykres pudełkowy przedstawia wysokość pożyczki w podziale na poziom wykształcenia oraz płeć. Widać, że zarówno absolwenci (Graduate), jak i osoby bez wyższego wykształcenia (Not Graduate) mają podobny rozkład pożyczek. Mediany dla obu grup są zbliżone, co oznacza, że poziom wykształcenia nie ma dużego wpływu na wysokość pożyczki.
Jednak zauważalne są wartości odstające, zwłaszcza wśród mężczyzn, którzy częściej otrzymują bardzo wysokie pożyczki (powyżej 300-500 tys.). Rozrzut wartości jest większy dla mężczyzn niż dla kobiet, co sugeruje, że mężczyźni mogą mieć większą różnorodność w kwotach pożyczek.
Ogólnie, poziom wykształcenia nie wydaje się znacząco wpływać na medianę pożyczki, ale widać większą liczbę ekstremalnych wartości wśród mężczyzn, co może wskazywać na inne czynniki wpływające na wysokość kredytu.
W następnej części projektu przyjrzymy się statystyką opisową naszych zmiennych, a zaczniemy od podsumowania używający funkcji tbl_summary z biblioteki gtsummary. Dzięki temu szczególnie zobaczymy jak rozkładają się zmienne kategoryczne.
dane %>%
select(Gender, Married, Dependents, Education, Self_Employed,
ApplicantIncome, CoapplicantIncome, LoanAmount,
Loan_Amount_Term, Credit_History, Property_Area) %>%
tbl_summary(
statistic = list(
all_continuous() ~ "{mean} ± {sd}", # Średnia ± odchylenie standardowe
all_categorical() ~ "{n} ({p}%)" # Częstość i procent dla zmiennych kategorycznych
),
label = list(
Gender ~ "Płeć",
Married ~ "Stan cywilny",
Dependents ~ "Osoby na utrzymaniu",
Education ~ "Wykształcenie",
Self_Employed ~ "Samozatrudniony",
ApplicantIncome ~ "Dochód wnioskodawcy",
CoapplicantIncome ~ "Dochód współwnioskodawcy",
LoanAmount ~ "Kwota kredytu",
Loan_Amount_Term ~ "Okres kredytowania",
Credit_History ~ "Historia kredytowa",
Property_Area ~ "Obszar nieruchomości"
),
missing = "no" # Wyklucz braki z podsumowania
)
| Characteristic | N = 3671 |
|---|---|
| Płeć | |
| Female | 70 (20%) |
| Male | 286 (80%) |
| Stan cywilny | 233 (63%) |
| Osoby na utrzymaniu | |
| 0 | 200 (56%) |
| 1 | 58 (16%) |
| 2 | 59 (17%) |
| 3+ | 40 (11%) |
| Wykształcenie | |
| Graduate | 283 (77%) |
| Not Graduate | 84 (23%) |
| Samozatrudniony | 37 (11%) |
| Dochód wnioskodawcy | 4,806 ± 4,911 |
| Dochód współwnioskodawcy | 1,570 ± 2,334 |
| Kwota kredytu | 136 ± 61 |
| Okres kredytowania | 343 ± 65 |
| Historia kredytowa | 279 (83%) |
| Obszar nieruchomości | |
| Rural | 111 (30%) |
| Semiurban | 116 (32%) |
| Urban | 140 (38%) |
| 1 n (%); Mean ± SD | |
Typowy wnioskodawca to mężczyzna (80%) z wyższym wykształceniem (77%), pozostający w związku małżeńskim (63%), bez osób na utrzymaniu (56%). Jego średni dochód wynosi 4,806 jednostek, a współwnioskodawcy 1,570 jednostek. W większości przypadków wnioskodawcy mają pozytywną historię kredytową (83%) i składają wnioski o kredyty na nieruchomości w obszarach miejskich (38%) lub półmiejskich (32%). Kwota kredytu wynosi przeciętnie 136 jednostek, a okres kredytowania to około 28,6 lat. W następnym kroku przyjrzymy się statystyką opisowym danych liczbowych.
data %>%
select(ApplicantIncome, CoapplicantIncome, LoanAmount, Loan_Amount_Term) %>%
summary()
## ApplicantIncome CoapplicantIncome LoanAmount Loan_Amount_Term
## Min. : 0 Min. : 0 Min. : 28.0 Min. : 6.0
## 1st Qu.: 2864 1st Qu.: 0 1st Qu.:101.0 1st Qu.:360.0
## Median : 3786 Median : 1025 Median :125.0 Median :360.0
## Mean : 4806 Mean : 1570 Mean :136.4 Mean :341.7
## 3rd Qu.: 5060 3rd Qu.: 2430 3rd Qu.:158.0 3rd Qu.:360.0
## Max. :72529 Max. :24000 Max. :550.0 Max. :480.0
Dochody głównego wnioskodawcy są znacznie wyższe od dochodów współwnioskodawców, a w wielu przypadkach współwnioskodawcy nie osiągają dochodów.Kwoty kredytów są umiarkowane, z medianą 125 jednostek, ale maksymalna kwota 550 jednostek wskazuje na obecność wnioskodawców potrzebujących znacznych środków.Typowy okres kredytowania wynosi 30 lat (360 miesięcy), co jest standardowym czasem w przypadku kredytów hipotecznych.
W kolejnej części wykonamy różne testy staystyczne. Zaczniemy od porównania średnich kwot kredytu w grupach z pozytywną i negatywną historią kredytową.Użyjemy do tego Test t-Studenta.
ggbetweenstats(
data = data,
x = Credit_History,
y = LoanAmount
)
Średnia kwota kredytu dla osób z negatywną historią kredytową wynosi 145.06, a dla osób z pozytywną historią kredytową 134.08. Jest to niewielka różnica. Test t-Studenta został użyty do porównania średnich kwot kredytu między grupami. P-value = 0.22 co oznacza, brak istotnej statystycznej różnicy między tymi grupami. Dodatkowo wartość statystki t=1.23 również sugeruje nieznaczącą różnice. Zatem historia kredytowa nie ma istotnego wpływu na kwotę udzielanego kredytu w tej próbie.
Sprawdźmy, czy osoby z różnym wykształceniem biorą różne kwoty kredytu.Użyjemy do tego testu ANOVA.
ggbetweenstats(
data = data,
x = Education,
y = LoanAmount
)
Osoby z wyższym wykształceniem mają średnią kwotę kredytu 140.94, a osoby bez wyższego wykształcenia mają średnią kwotę kredytu 119.35. Różnica wynosi 21.59, oznacza to, że osoby z wyższym wykształceniem otrzymują wyższe kredyty. Za pomocą testy t-Studenta porównaliśmy te kwoty i otrzymałyśmy p-value <0.001, co oznacza istotność statystyczną i wpływ wykształcenia na wysokość kredytu. Wartość t = 3.84 mówi nam, że różnica między grupami jest znacząca. Przedział ufności: [0.19, 0.61] nie obejmuje 0, co potwierdza istotność różnicy. Podsumowując osoby z wyższym wykształceniem uzyskują średnio wyższe kredyty niż osoby bez wyższego wykształcenia.
Sprawdźmy, czy wyższy dochód głównego wnioskodawcy wiąże się z wyższą kwotą kredytu. Użyjemy do tego korelacji Pearsona.
ggscatterstats(
data = data,
x = ApplicantIncome,
y = LoanAmount,
type = "pearson" # lub "spearman" dla danych nieparametrycznych
)
## Registered S3 method overwritten by 'ggside':
## method from
## +.gg ggplot2
## `stat_xsidebin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_ysidebin()` using `bins = 30`. Pick better value with `binwidth`.
Współczynnik korelacji Pearsona wynosi 0.49, co oznacza średnią do umiarkowanie silnej dodatnią zależność między dochodem a kwotą kredytu. Im wyższy dochód wnioskodawcy, tym wyższa przyznawana kwota kredytu. Bardzo niski poziom p-value < 0.001 wskazuje, że zależność ta jest istotna statystycznie. Z przedziałem ufności 95% możemy powiedzieć, że wartość korelacji w populacji mieści się w zakresie 0.41-0.57. Przedział ten nie obejmuje 0, zatem zależność jest mocno potwierdzona. Podsumowując istnieje umiarkowanie silna zależność między dochodem a kwotą kredytu – wyższy dochód zwiększa prawdopodobieństwo uzyskania większego kredytu. Jednakże wartość r wskazuje, że inne czynniki również mają znaczący wpływ na kwotę kredytu.
Sprawdźmy, czy osoby z różnych lokalizacji biorą różne kwoty kredytu.Używamy testu ANOVA.
ggbetweenstats(
data = data,
x = Property_Area,
y = LoanAmount
)
Średnia kwota pożyczki dla osób zamieszkujące obszary wiejskie wynosi 138.59 tyś, dla osób mieszkających na przedmieściach średnia wynosi 133.53 tyś, a dla osób mieszkających w miastach 135.97 tyś. Zatem widzimy niewielie róznice w kwotach ze względu na obszar zamieszkania. Dodatkowo możemy zauważyć szeroki rozkład kwot kredytów, ale większość danych skupia się wokół wartości około 100-150 tys. W obszarze miejskim występują pojedyncze wyższe wartości (powyżej 400 tys.), co może wskazywać na kilka dużych pożyczek. Wartość testu Welch’a F(2, 240.12) = 0.21 oraz p = 0.81 sugerują, że nie ma istotnych statystycznie różnic między średnimi wysokościami pożyczek w różnych obszarach. Wskaźnik η²p = 0.00 potwierdza bardzo mały efekt różnic. Podsumowując miejsce zamieszkania nie wpływa istotnie na wysokość pożyczki
Sprawdźmy, czy osoby z lepszą historią kredytową mają wyższe dochody. Użyjemy testu t-Studenta.
ggbetweenstats(
data = data,
x = Credit_History,
y = ApplicantIncome
)
Wykres przedstawia porównanie dochodów osób w zależności od ich historii kredytowej, wykorzystując test t-Studenta. Średni dochód osób z dobrą historią kredytową (wartość 1) wynosi około 5009,76, natomiast osób z gorszą historią (wartość 0) – 3857,03. Test t-Studenta wskazuje istotną statystycznie różnicę (p=0.01), choć efekt jest raczej niewielki (gHedges=−0.28). Oznacza to, że osoby z lepszą historią kredytową mają statystycznie wyższe dochody, ale różnica ta nie jest bardzo duża.
Czy osoby z gorszą historią kredytową wybierają dłuższy okres spłaty? Użyjemy testu ANOVA.
ggbetweenstats(
data = data,
x = Credit_History,
y = Loan_Amount_Term
)
Wykres przedstawia porównanie długości okresu spłaty kredytu w zależności od historii kredytowej. Średni okres spłaty dla osób z gorszą historią kredytową wynosi 350,86, a dla osób z dobrą historią 341,09. Test statystyczny nie wykazuje istotnej różnicy (p=0,30), co oznacza, że historia kredytowa nie ma znaczącego wpływu na wybór długości okresu spłaty. W praktyce oznacza to, że osoby z gorszą historią kredytową nie wybierają istotnie dłuższych okresów spłaty w porównaniu do osób z dobrą historią.
Sprawdźmy, czy osoby w różnych stanach cywilnych mają różne historie kredytowe. Użyjemy testu chi-kwadrat.
ggbarstats(
data = data,
x = Married,
y = Credit_History
)
Wykres przedstawia zależność między stanem cywilnym a historią kredytową. Rozkład procentowy osób z dobrą i złą historią kredytową jest podobny w obu grupach – 60% vs. 64% dla osób zamężnych i niezamężnych. Test chi-kwadrat (p=0,52) nie wykazał istotnej statystycznie zależności, co oznacza, że stan cywilny nie ma istotnego wpływu na historię kredytową. W praktyce sugeruje to, że bycie w związku małżeńskim lub jego brak nie jest istotnym czynnikiem wpływającym na historię kredytową.
Czy liczba osób na utrzymaniu wpływa na historię kredytową? Użyjemy korelacji Spearmana.
ggbetweenstats(
data = data,
x = Dependents,
y = Credit_History
)
Osoby bez osób na utrzymaniu mają najwyższą średnią historię kredytową: 0.82. Osoby z 1 lub 2 osobami na utrzymaniu mają podobne średnie wartości: 0.80 i 0.78. Osoby z 3+ osobami na utrzymaniu mają najniższą średnią historię kredytową 0.74, co może sugerować większe trudności w uzyskaniu pozytywnej historii kredytowej. Możemy również zauważyć, że w każdej grupie większość danych znajduje się blisko wartości 1, co oznacza, że większość wnioskodawców ma pozytywną historię kredytową. Widzimy rónież, że im większa liczba osób na utrzymaniu, tym bardziej wydłużony kształt wykresu w dolnych wartościach, co może sugerować większą różnorodność w historii kredytowej. Test ANOVA pokazuje p.value = 0.15 co oznacza brak istotnej różnicy statystycznej między grupami. Podsumowując nie ma istotnych statystycznie różnic w historii kredytowej między grupami zależnymi od liczby osób na utrzymaniu.
Czy osoby samozatrudnione mają gorszą historię kredytową? Użyjemy testu chi-kwadrat.
ggbarstats(
data = data,
x = Self_Employed,
y = Credit_History
)
Wykres przedstawia analizę związku między samozatrudnieniem a historią kredytową z wykorzystaniem testu chi-kwadrat. Wyniki pokazują, że odsetek osób z dobrą historią kredytową jest bardzo podobny zarówno wśród samozatrudnionych (91%), jak i niesamozatrudnionych (88%). Wartość statystyki chi-kwadrat (x2 = 0.30, p = 0.58) sugeruje brak istotnej różnicy między grupami, co potwierdza również bardzo niska wartość współczynnika V Cramera (0.00). Oznacza to, że status samozatrudnienia nie ma istotnego wpływu na historię kredytową w badanej próbie.
Czy osoby z miast mają lepszą historię kredytową niż osoby z terenów wiejskich? Użyjemy testu chi-kwadrat.
ggbarstats(
data = data,
x = Property_Area,
y = Credit_History
)
Wykres przedstawia analizę zależności między obszarem zamieszkania a historią kredytową. Wyniki testu chi-kwadrat (x2 = 1.17, p = 0.56) wskazują, że nie ma istotnej statystycznie różnicy w historii kredytowej między osobami mieszkającymi w miastach, na przedmieściach i na obszarach wiejskich. Współczynnik V Cramera (0.00) również sugeruje brak zależności. Oznacza to, że miejsce zamieszkania nie ma znaczącego wpływu na historię kredytową w badanej próbie.
Podsumowanie analizy kredytów hipotecznych Celem analizy było zidentyfikowanie kluczowych czynników wpływających na decyzję o przyznaniu kredytu hipotecznego. W tym celu przeanalizowano dane dotyczące wnioskodawców, takie jak dochód, stan cywilny, historia kredytowa czy wysokość wnioskowanej kwoty.
Braki danych Najwięcej braków dotyczyło kategorii: historii kredytowej, samozatrudnienia, płci, liczby osób na utrzymaniu, okresu spłaty kredytu oraz wysokości kredytu. Braki te częściej występowały u osób posiadających historię kredytową oraz u mężczyzn. Dane uzupełniono metodą hot deck imputation, co pozwoliło na eliminację luk i poprawę jakości analizy.
Analiza wartości odstających Rozkład dochodów wnioskodawców i współwnioskodawców był silnie prawoskośny, co oznacza, że dominowały niższe dochody, a nieliczne wartości odstające wskazywały na wysokie zarobki niektórych osób. Podobnie w przypadku wysokości kredytu – wPodsumowanie analizy kredytów hipotecznych Celem analizy było zidentyfikowanie kluczowych czynników wpływających na decyzję o przyznaniu kredytu hipotecznego. W tym celu przeanalizowano dane dotyczące wnioskodawców, takie jak dochód, stan cywilny, historia kredytowa czy wysokość wnioskowanej kwoty.
Wnioskowanie Wyniki wskazują, że wykształcenie ma istotny wpływ na wysokość przyznawanego kredytu. Osoby z wyższym wykształceniem otrzymują średnio wyższe kwoty kredytów niż osoby bez wyższego wykształcenia. Dochód wnioskodawcy również wykazuje wyraźną zależność z wysokością kredytu – im wyższy dochód, tym większa kwota przyznanego kredytu. Zauważono również, że osoby z wyższym dochodem mają większą szansę na uzyskanie wyższych kredytów, ale inne czynniki także odgrywają ważną rolę.
Miejsce zamieszkania, takie jak życie w miastach, przedmieściach czy na terenach wiejskich, nie miało istotnego wpływu na wysokość kredytu. Dodatkowo, brak było znaczącej różnicy w historii kredytowej w zależności od miejsca zamieszkania. Podobnie, stan cywilny czy liczba osób na utrzymaniu nie miały znaczącego wpływu na historię kredytową, choć w przypadku osób z większą liczbą osób na utrzymaniu zaobserwowano pewne różnice w historii kredytowej, ale nie były one istotne statystycznie.
Co się tyczy dochodów w zależności od historii kredytowej, osoby z lepszą historią kredytową miały wyższe dochody, co może sugerować, że dobra historia kredytowa jest powiązana z wyższym poziomem dochodów, chociaż różnice w dochodach były stosunkowo niewielkie. Na koniec, analiza wskazała, że historia kredytowa nie miała wpływu na wybór długości okresu spłaty kredytu, co sugeruje, że osoby z różnymi historiami kredytowymi podejmują podobne decyzje odnośnie do tego aspektu kredytu.
Podsumowując, wykształcenie i dochód wnioskodawcy okazały się mieć znaczący wpływ na wysokość przyznanego kredytu. Historia kredytowa była związana z dochodami, ale inne czynniki, takie jak miejsce zamieszkania, stan cywilny czy liczba osób na utrzymaniu, nie miały większego wpływu na decyzje kredytowe.