Analiza danych - raport końcowy
K. Ciosek, O. Kanigowski, N. Górczyńska
Analityka Gospodarcza II 2024/2025
\(\\ \\ \\ \\ \\\)
1. Wprowadzenie
1.1. Pożyczki
Spośród wszystkich branż, domena ubezpieczeniowa ma największe zastosowanie analityki i metod nauki o danych. Ten zestaw danych zapewni ci wystarczający przedsmak pracy nad zestawami danych z firm ubezpieczeniowych, z jakimi wyzwaniami się mierzą, jakie strategie są stosowane, jakie zmienne wpływają na wynik itp. Jest to problem klasyfikacji. Dane mają 615 wierszy i 13 kolumn.
1.2. Problem
Firma chce zautomatyzować proces kwalifikowania się do pożyczki (w czasie rzeczywistym) w oparciu o dane klienta podane podczas wypełniania wniosku online. Dane te obejmują płeć, stan cywilny, wykształcenie, liczbę osób na utrzymaniu, dochód, kwotę pożyczki, historię kredytową i inne. Aby zautomatyzować ten proces, firma postawiła sobie za cel zidentyfikowanie segmentów klientów, którzy kwalifikują się do otrzymania kwoty pożyczki, aby móc skierować do nich konkretną ofertę. W tym przypadku dostarczono częściowy zestaw danych.
1.3. Opis bazy danych
Baza składa się z 13 kolumn, a te z kolei zawierają następujące wartości:
- Loan_ID - indywidualny numer ID każdej obserwacji,
- Gender - informacja, jaka płeć jest przyjęta w danej obserwacji,
- Married - informacja, czy osoba jest w związku małżeńskim,
- Dependents - ilość osób zależnych (finansowo),
- Education - informacja, czy dana osoba ukończyła studia,
- Self_Employed - informacja, czy osoba jest samozatrudniona,
- ApplicantIncome - dochód wnioskodawcy o pożyczkę,
- CoapplicantIncome - dochód współwnioskodawcy o pożyczkę,
- LoanAmount - kwota pożyczki,
- Loan_Amount_Term - okres kredytowania,
- Credit_History - historia kredytowa,
- Property_Area - obszar zamieszkania,
- Loan_Status - informacja, czy udzielono kredytu
2. Data Wrangling, Cleasing
Data Wrangling odnosi się do procesu przekształcania, reorganizacji i mapowania surowych danych w użyteczny format gotowy do analizy. Data Cleansing, zwane także czyszczeniem danych, odnosi się do procesu identyfikacji i usuwania błędów, niespójności oraz niekompletnych informacji w zbiorach danych. Celem tego procesu jest poprawa jakości danych, co jest kluczowe dla analizy oraz podejmowania trafnych decyzji opartych na danych.
2.1 Obliczanie NA
## Loan_ID Gender Married Dependents
## Length:614 Length:614 Length:614 Length:614
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Education Self_Employed ApplicantIncome CoapplicantIncome
## Length:614 Length:614 Min. : 150 Min. : 0
## Class :character Class :character 1st Qu.: 2878 1st Qu.: 0
## Mode :character Mode :character Median : 3812 Median : 1188
## Mean : 5403 Mean : 1621
## 3rd Qu.: 5795 3rd Qu.: 2297
## Max. :81000 Max. :41667
##
## LoanAmount Loan_Amount_Term Credit_History Property_Area
## Min. : 9.0 Min. : 12 Min. :0.0000 Length:614
## 1st Qu.:100.0 1st Qu.:360 1st Qu.:1.0000 Class :character
## Median :128.0 Median :360 Median :1.0000 Mode :character
## Mean :146.4 Mean :342 Mean :0.8422
## 3rd Qu.:168.0 3rd Qu.:360 3rd Qu.:1.0000
## Max. :700.0 Max. :480 Max. :1.0000
## NA's :22 NA's :14 NA's :50
## Loan_Status
## Length:614
## Class :character
## Mode :character
##
##
##
##
## 'data.frame': 614 obs. of 13 variables:
## $ Loan_ID : chr "LP001002" "LP001003" "LP001005" "LP001006" ...
## $ Gender : chr "Male" "Male" "Male" "Male" ...
## $ Married : chr "No" "Yes" "Yes" "Yes" ...
## $ Dependents : chr "0" "1" "0" "0" ...
## $ Education : chr "Graduate" "Graduate" "Graduate" "Not Graduate" ...
## $ Self_Employed : chr "No" "No" "Yes" "No" ...
## $ ApplicantIncome : int 5849 4583 3000 2583 6000 5417 2333 3036 4006 12841 ...
## $ CoapplicantIncome: num 0 1508 0 2358 0 ...
## $ LoanAmount : int NA 128 66 120 141 267 95 158 168 349 ...
## $ Loan_Amount_Term : int 360 360 360 360 360 360 360 360 360 360 ...
## $ Credit_History : int 1 1 1 1 1 1 1 0 1 1 ...
## $ Property_Area : chr "Urban" "Rural" "Urban" "Urban" ...
## $ Loan_Status : chr "Y" "N" "Y" "Y" ...
#obliczanie liczby NA (brakujących wartości) uwzględniając "puste ciągi"
count_na <- function(x) {
sum(is.na(x) | x == "" | x == " ")
}
na_count <- sapply(data, count_na)
na_count## Loan_ID Gender Married Dependents
## 0 13 3 15
## Education Self_Employed ApplicantIncome CoapplicantIncome
## 0 32 0 0
## LoanAmount Loan_Amount_Term Credit_History Property_Area
## 22 14 50 0
## Loan_Status
## 0
Tworzona jest funkcja count_na(), która: Sprawdza, czy wartość w danej kolumnie to NA (brak wartości), sprawdza, czy wartość to pusty ciąg “” lub spacja ” “, traktując je jako brakujące. Sumuje wszystkie brakujące wartości w danej kolumnie.
#zamiana pustych ciagow na NA
data[data == ""] <- NA
data[data == " "] <- NA
#wizualizacja braków danych
vis_miss(data)vis_miss: Tworzy wizualizację brakujących wartości w całym zbiorze danych. gg_miss_var: Tworzy wykres przedstawiający liczbę braków danych w poszczególnych kolumnach. gg_miss_case: Wizualizuje liczbę braków danych w poszczególnych wierszach (rekordach).
## Loan_ID Education ApplicantIncome CoapplicantIncome Property_Area
## 480 1 1 1 1 1
## 43 1 1 1 1 1
## 25 1 1 1 1 1
## 5 1 1 1 1 1
## 19 1 1 1 1 1
## 1 1 1 1 1 1
## 10 1 1 1 1 1
## 1 1 1 1 1 1
## 12 1 1 1 1 1
## 1 1 1 1 1 1
## 1 1 1 1 1 1
## 12 1 1 1 1 1
## 1 1 1 1 1 1
## 2 1 1 1 1 1
## 1 1 1 1 1 1
## 0 0 0 0 0
## Loan_Status Married Gender Loan_Amount_Term Dependents LoanAmount
## 480 1 1 1 1 1 1
## 43 1 1 1 1 1 1
## 25 1 1 1 1 1 1
## 5 1 1 1 1 1 1
## 19 1 1 1 1 1 0
## 1 1 1 1 1 1 0
## 10 1 1 1 1 0 1
## 1 1 1 1 1 0 0
## 12 1 1 1 0 1 1
## 1 1 1 1 0 1 1
## 1 1 1 1 0 0 1
## 12 1 1 0 1 1 1
## 1 1 1 0 1 1 1
## 2 1 0 1 1 0 1
## 1 1 0 1 1 0 0
## 0 3 13 14 15 22
## Self_Employed Credit_History
## 480 1 1 0
## 43 1 0 1
## 25 0 1 1
## 5 0 0 2
## 19 1 1 1
## 1 0 0 3
## 10 1 1 1
## 1 1 1 2
## 12 1 1 1
## 1 0 1 2
## 1 1 1 2
## 12 1 1 1
## 1 1 0 2
## 2 1 1 2
## 1 1 1 3
## 32 50 149
md.pattern analizuje wzorce brakujących danych i prezentuje je graficznie. gg_miss_upset tworzy wykres upset, który pokazuje, które kombinacje braków danych są najczęstsze.
Podsumowując, kod identyfikuje i liczy brakujące wartości, uwzględniając puste ciągi. Przygotowuje dane, zastępując puste wartości NA. Wizualizuje rozkład braków danych w zbiorze (kolumny, wiersze, wzorce braków). Analizuje wpływ zmiennych kategorycznych na występowanie braków danych.
Braki danych uzupełniono metodą mice, natomiast braki wartoście Married zastąpiono medianą.
2.2 Identyfikacja unikatowych wartości
## unikalne_wartosci
## Loan_ID 614
## Gender 2
## Married 2
## Dependents 4
## Education 2
## Self_Employed 2
## ApplicantIncome 505
## CoapplicantIncome 287
## LoanAmount 203
## Loan_Amount_Term 10
## Credit_History 2
## Property_Area 3
## Loan_Status 2
Powyższy kod oblicza liczbę unikalnych wartości w każdej kolumnie. Tworzona jest ramka unique_counts, w której dla każdej kolumny zliczana jest liczba unikalnych wartości. ### 2.3 Propocje odpowiedzi dla wybranych kategorii
## odpowiedzi liczba_obserwacji kategorie
## 1 Female 112 Gender
## 2 Male 489 Gender
## 3 No 213 Married
## 4 Yes 398 Married
## 5 0 345 Dependents
## 6 1 102 Dependents
## 7 2 101 Dependents
## 8 3+ 51 Dependents
## 9 Graduate 480 Education
## 10 Not Graduate 134 Education
## 11 No 500 Self_Employed
## 12 Yes 82 Self_Employed
## 13 0 89 Credit_History
## 14 1 475 Credit_History
## 15 Rural 179 Property_Area
## 16 Semiurban 233 Property_Area
## 17 Urban 202 Property_Area
## 18 N 192 Loan_Status
## 19 Y 422 Loan_Status
## 20 12 1 Loan_Amount_Term
## 21 36 2 Loan_Amount_Term
## 22 60 2 Loan_Amount_Term
## 23 84 4 Loan_Amount_Term
## 24 120 3 Loan_Amount_Term
## 25 180 44 Loan_Amount_Term
## 26 240 4 Loan_Amount_Term
## 27 300 13 Loan_Amount_Term
## 28 360 512 Loan_Amount_Term
## 29 480 15 Loan_Amount_Term
## class
## Loan_ID character
## Gender character
## Married character
## Dependents character
## Education character
## Self_Employed character
## ApplicantIncome integer
## CoapplicantIncome numeric
## LoanAmount integer
## Loan_Amount_Term integer
## Credit_History integer
## Property_Area character
## Loan_Status character
Dla określonych kolumn kategorycznych (np. Gender, Married, Education, Loan_Status) tworzona jest tabela częstości wartości. Tworzony jest zbiorczy data.frame, który zawiera liczbę wystąpień każdej wartości w każdej analizowanej kolumnie.
2.4. Data Cleasing
Tworzona jest funkcja map_to_numeric, która konwertuje zmienne kategoryczne na wartości numeryczne na podstawie zdefiniowanego mapowania. Zmienne takie jak Gender, Married, Education, Self_Employed, Property_Area, Loan_Status są zamieniane na wartości liczbowe (np. Male = 1, Female = 0). Kod ten przekształca surowe dane w ustrukturyzowaną formę, gotową do analizy i modelowania. Usuwa zbędne wartości, standardyzuje formaty.
2.5. Podział klientów
W celu rozwiązania stojącego przed danymi problemu - wyodrębnienia klientów kwalifikujących się do uzyskania pożyczki w celu wysłania im odpowiedniej oferty, zaporponowano następujące rozwiązania:
Podział ze względu na dochody gospodarstwa domowego w zależności od ilość osób zależnych
Podział za pomocą algorytmnu klastrowania
Linia podziału w punkcie pierwszym przebiegała według najmniejszej wartości odstającej, klientów powyżej tej wartości zaliczono do klientów premium, natomiast poniżej - do klientów typu basic.
# Normalizacja danych
s_data <- scale(data)
# Wybór optymalnej liczby klastrów
fviz_nbclust(s_data, kmeans, method = "silhouette")Jak widać na powyższym wykresie, za pomocą metody k-średnich znaleziono optymalną liczbę klastrów (grup) na które można podzielić potencjalnych kredytobiorców która wynosi 2.
# Klasteryzacja
clusters <- kmeans(s_data, centers = 2, nstart = 25)
fviz_cluster(clusters, data = s_data,
palette = "Accent",
ellipse.type = "euclid",
star.plot = TRUE,
repel = TRUE,
ggtheme = theme_minimal(),
labelsize = 0)Na powyższym wykresie widoczna jest wizualizacja rozrzutu klastrów.
data$Cluster <- as.factor(clusters$cluster)
# Statystyki opisowe dla każdego klastra
summary_stat <- data %>%
group_by(Cluster) %>%
summarise(across(everything(), list(mean = ~mean(.), sd = ~sd(.), median = ~median(.),
min = ~min(.), max = ~max(.), n = ~length(.)),
.names = "{col}_{fn}"))
summary_statistics <- summary_stat[,14:ncol(summary_stat)]
print(summary_statistics)## # A tibble: 2 × 72
## Gender_mean Gender_sd Gender_median Gender_min Gender_max Gender_n
## <dbl> <dbl> <int> <int> <int> <int>
## 1 0.814 0.390 1 0 1 295
## 2 0.809 0.394 1 0 1 319
## # ℹ 66 more variables: Married_mean <dbl>, Married_sd <dbl>,
## # Married_median <int>, Married_min <int>, Married_max <int>,
## # Married_n <int>, Dependents_mean <dbl>, Dependents_sd <dbl>,
## # Dependents_median <int>, Dependents_min <int>, Dependents_max <int>,
## # Dependents_n <int>, Education_mean <dbl>, Education_sd <dbl>,
## # Education_median <int>, Education_min <int>, Education_max <int>,
## # Education_n <int>, Self_Employed_mean <dbl>, Self_Employed_sd <dbl>, …
Klaster 1 (303 obserwacje)
Demografia: Większość to mężczyźni (80%), osoby zamężne (64%) i wykształcone (76%).
Zatrudnienie: Tylko 15% jest samozatrudnionych.
Finanse: Średni dochód wnioskodawcy to 5624 z dużą rozpiętością (min. 210, max. 81 000).
Kredyt: Średnia kwota kredytu wynosi 149 tys., a okres spłaty 341 miesięcy.
Klaster 2 (311 obserwacji)
Demografia: Nieco większy udział kobiet (ok. 20%), większy odsetek osób zamężnych (66%) i wykształconych (80%).
Zatrudnienie: Samozatrudnieni stanowią 13% grupy.
Finanse: Średni dochód wnioskodawcy jest niższy (5188), a maksymalna wartość dochodu to 51 763.
Kredyt: Średnia kwota kredytu jest nieco niższa (143 tys.), a okres spłaty podobny (342 miesiące).
Klaster 1 charakteryzuje się wyższymi dochodami i większą różnorodnością dochodów, podczas gdy klaster 2 ma nieco wyższy udział osób wykształconych i zamężnych, ale niższe dochody.
3. Wizualizacja danych
3.1. Wykesy puedłkowe
Każdy wykres pudełkowy przedstawia rozkład dochodu w gospodarstwie domowym (HouseholdIncome) w zależności od miejsca zamieszkania klientów. Pierwszy wykres pokazuje, jak dochody kształtują się w różnych lokalizacjach dla wszystkich klientów, natomiast drugi dodatkowo rozróżnia klientów Basic, a trzeci Premium. Taka wizualizacja pozwala lepiej zrozumieć, jak dochody różnią się w różnych obszarach oraz jak przedstawiają się w poszczególnych grupach klientów.
Klienci Premium mają wyższe i bardziej zróżnicowane dochody niż klienci Basic, szczególnie w obszarach wiejskich. Największa zmienność dochodów w obu grupach występuje w rejonach wiejskich.
3.2. Wykresy słupkowe
Na wykresach słupkowych zaprezentujemy zmienne: Gender, Married, Dependents oraz Education.
Z powyższych wykresów możemy wywnioskować, że w danych dużo większy udział mają mężczyźni niż kobiety. Więcej jest także osób w związku małżeńskim niż singli, zdecydowaną większością są osoby, które nie mają pod sobą osób zależnych oraz o kredyt aplikuje więcej osób ze skończonymi studiami.
Dalsze wykresy pokazują, że o kredyt aplikuje zdecydowanie mniej osób na samozatrudnieniu oraz bez historii kredytowej. Biorąc pod uwagę obszar zamieszkania, najwięcej jest osób z obszarów półmiejskich, następnie z obszarów wiejskich, a najmniej osób z miast. Zdecydowanie więcej jest udzielonych kredytów niż tych odrzuconych.
4. Analiza opisowa
Pierwszym etapem analiz wszelkiego typu danych jest ich analiza opisowa. Pozwala ona lepiej zrozumieć dane oraz wyciągnąć odpowienie wnioski.
4.1. Statystyki opisowe
Statystyki opisowe pomagają szybko zrozumieć, jakie wartości dominują, jak bardzo dane są zróżnicowane i czy występują jakieś nietypowe przypadki. Dzięki nim mogliśmy np. sprawdzić, jaki jest przeciętny dochód wnioskodawcy, jak bardzo dochody różnią się między aplikantami, albo czy w danych są osoby, które odstają od reszty.
| Zmienna | 0 N = 192 |
1 N = 422 |
p-value1 |
|---|---|---|---|
| Przychód na jedną osobę w gospodarstwie domowym | 0.94 | ||
| N Non-missing | 192 | 422 | |
| Mean | 6,106 | 5,763 | |
| SD | 5,302 | 5,090 | |
| Median (Q1, Q3) | 4,699 (2,908, 7,131) | 4,730 (3,270, 6,400) | |
| Min, Max | 610, 35,673 | 942, 63,337 | |
| 1 Wilcoxon rank sum test | |||
Tabela przedstawia rozkład przychodu na jedną osobę w gospodarstwie domowym w podziale na status kredytowy, gdzie 0 oznacza osoby, którym kredytu nie przyznano (N = 192), a 1 oznacza osoby, które otrzymały kredyt (N = 422).
4.2. Korelacja
Korelacja pokazuje, czy i jak mocno dwie zmienne są ze sobą powiązane.
U nas wygląda to następująco:
## X.2 X.1 X Gender
## X.2 1.00000000 1.00000000 1.00000000 -0.031900583
## X.1 1.00000000 1.00000000 1.00000000 -0.031900583
## X 1.00000000 1.00000000 1.00000000 -0.031900583
## Gender -0.03190058 -0.03190058 -0.03190058 1.000000000
## Married -0.01601317 -0.01601317 -0.01601317 0.356275359
## Dependents 0.05614104 0.05614104 0.05614104 0.179851514
## Education -0.03944197 -0.03944197 -0.03944197 -0.053546793
## Self_Employed 0.02208120 0.02208120 0.02208120 -0.021008857
## ApplicantIncome 0.01692515 0.01692515 0.01692515 0.032350855
## CoapplicantIncome 0.03921107 0.03921107 0.03921107 0.077678416
## LoanAmount 0.03050557 0.03050557 0.03050557 0.081060177
## Loan_Amount_Term -0.02900425 -0.02900425 -0.02900425 -0.076187985
## Credit_History -0.03631300 -0.03631300 -0.03631300 0.002785175
## Property_Area -0.15541641 -0.15541641 -0.15541641 -0.024612939
## Loan_Status 0.01177341 0.01177341 0.01177341 0.006519051
## HouseholdIncome 0.03377445 0.03377445 0.03377445 0.065793648
## IncomePerDependent 0.02071706 0.02071706 0.02071706 0.043931212
## type_of_client 0.04621324 0.04621324 0.04621324 -0.014285200
## Married Dependents Education Self_Employed
## X.2 -0.016013167 0.056141038 -0.03944197 0.022081201
## X.1 -0.016013167 0.056141038 -0.03944197 0.022081201
## X -0.016013167 0.056141038 -0.03944197 0.022081201
## Gender 0.356275359 0.179851514 -0.05354679 -0.021008857
## Married 1.000000000 0.337886897 -0.01230438 0.008221324
## Dependents 0.337886897 1.000000000 -0.07560693 0.056368651
## Education -0.012304383 -0.075606925 1.00000000 0.020095121
## Self_Employed 0.008221324 0.056368651 0.02009512 1.000000000
## ApplicantIncome 0.051708376 0.111009718 0.14076028 0.166062451
## CoapplicantIncome 0.075947672 0.026996631 0.06228983 -0.021494459
## LoanAmount 0.145275385 0.155004331 0.16877015 0.125530163
## Loan_Amount_Term -0.104822514 -0.090575390 0.06885308 -0.037420834
## Credit_History 0.003714357 -0.062706146 0.06006666 -0.010867713
## Property_Area 0.004256547 0.004891355 0.06524332 -0.031141695
## Loan_Status 0.091477825 -0.003569252 0.08588391 -0.021333458
## HouseholdIncome 0.083319148 0.117231962 0.16136246 0.147334546
## IncomePerDependent -0.006017892 -0.238778682 0.17105747 0.166668596
## type_of_client -0.027929057 -0.049859848 0.11409227 0.128301281
## ApplicantIncome CoapplicantIncome LoanAmount
## X.2 0.016925154 0.03921107 0.03050557
## X.1 0.016925154 0.03921107 0.03050557
## X 0.016925154 0.03921107 0.03050557
## Gender 0.032350855 0.07767842 0.08106018
## Married 0.051708376 0.07594767 0.14527539
## Dependents 0.111009718 0.02699663 0.15500433
## Education 0.140760276 0.06228983 0.16877015
## Self_Employed 0.166062451 -0.02149446 0.12553016
## ApplicantIncome 1.000000000 -0.11660458 0.56876365
## CoapplicantIncome -0.116604581 1.00000000 0.18415260
## LoanAmount 0.568763655 0.18415260 1.00000000
## Loan_Amount_Term -0.048485232 -0.05691635 0.03309862
## Credit_History -0.024553482 -0.06028924 -0.03187333
## Property_Area -0.009499695 0.01052192 -0.04437248
## Loan_Status -0.004709523 -0.05918731 -0.03806919
## HouseholdIncome 0.893037294 0.34278082 0.62140981
## IncomePerDependent 0.746487999 0.29159277 0.51190565
## type_of_client 0.622874901 0.20435018 0.46681332
## Loan_Amount_Term Credit_History Property_Area Loan_Status
## X.2 -0.02900425 -0.036313000 -0.155416405 0.011773414
## X.1 -0.02900425 -0.036313000 -0.155416405 0.011773414
## X -0.02900425 -0.036313000 -0.155416405 0.011773414
## Gender -0.07618799 0.002785175 -0.024612939 0.006519051
## Married -0.10482251 0.003714357 0.004256547 0.091477825
## Dependents -0.09057539 -0.062706146 0.004891355 -0.003569252
## Education 0.06885308 0.060066658 0.065243319 0.085883915
## Self_Employed -0.03742083 -0.010867713 -0.031141695 -0.021333458
## ApplicantIncome -0.04848523 -0.024553482 -0.009499695 -0.004709523
## CoapplicantIncome -0.05691635 -0.060289243 0.010521919 -0.059187313
## LoanAmount 0.03309862 -0.031873328 -0.044372481 -0.038069194
## Loan_Amount_Term 1.00000000 0.022739513 -0.074605118 -0.027247125
## Credit_History 0.02273951 1.000000000 -0.008500905 0.532764415
## Property_Area -0.07460512 -0.008500905 1.000000000 0.032111985
## Loan_Status -0.02724712 0.532764415 0.032111985 1.000000000
## HouseholdIncome -0.07164790 -0.050539794 -0.004218254 -0.031270779
## IncomePerDependent -0.04116120 0.006993410 0.019759980 -0.030840148
## type_of_client -0.02954493 -0.042836701 0.019378616 -0.062687081
## HouseholdIncome IncomePerDependent type_of_client
## X.2 0.033774445 0.020717060 0.04621324
## X.1 0.033774445 0.020717060 0.04621324
## X 0.033774445 0.020717060 0.04621324
## Gender 0.065793648 0.043931212 -0.01428520
## Married 0.083319148 -0.006017892 -0.02792906
## Dependents 0.117231962 -0.238778682 -0.04985985
## Education 0.161362460 0.171057467 0.11409227
## Self_Employed 0.147334546 0.166668596 0.12830128
## ApplicantIncome 0.893037294 0.746487999 0.62287490
## CoapplicantIncome 0.342780824 0.291592773 0.20435018
## LoanAmount 0.621409812 0.511905650 0.46681332
## Loan_Amount_Term -0.071647897 -0.041161202 -0.02954493
## Credit_History -0.050539794 0.006993410 -0.04283670
## Property_Area -0.004218254 0.019759980 0.01937862
## Loan_Status -0.031270779 -0.030840148 -0.06268708
## HouseholdIncome 1.000000000 0.838191812 0.68174288
## IncomePerDependent 0.838191812 1.000000000 0.73818311
## type_of_client 0.681742882 0.738183114 1.00000000
Zdecydowaliśmy się ograniczyć korelacje, aby ukazywały się tylko te od 0,5 do 1 (korelacja silna).
## Var1 Var2 Freq
## 1 X.1 X.2 1.0000000
## 2 IncomePerDependent HouseholdIncome 0.9527593
## 3 type_of_client IncomePerDependent 0.9489643
## 4 HouseholdIncome ApplicantIncome 0.9487066
## 5 type_of_client HouseholdIncome 0.9239404
## 6 IncomePerDependent ApplicantIncome 0.9000457
## 7 type_of_client ApplicantIncome 0.8834059
## 8 HouseholdIncome LoanAmount 0.8708846
## 9 LoanAmount ApplicantIncome 0.8409786
## 10 Loan_Status Credit_History 0.8099601
## 11 IncomePerDependent LoanAmount 0.7950181
## 12 type_of_client LoanAmount 0.7883677
## 13 Married Gender 0.5964911
## 14 Dependents Married 0.5507486
W celu bardziej przejrzystego przedstawienia danych, prezentujemy naszą macierz korelacji:
Stąd od razu widzimy, które zmienne są ze sobą silnie skorelowane, a które słabiej.
5. Wnioskowanie (testy statystyczne)
Wnioskowanie statystyczne to proces podejmowania decyzji lub formułowania wniosków na podstawie danych. W ramach projektu podjęto próbę zdefinowania wzajemnych zależności pomiędzy zmiennymi opisującymi osoby wnioskujące o kredyt, w kontekście finalnej decyzji banku o udzieleniu pożyczki, lub też decyzji odmownej.
5.1. Model regresji logistycznej
W celu przeprowadzenia wnioskowania wykorzystano model regresji logistycznej (logit) - tóry jest używany do analizy zmiennych zależnych o charakterze binarnym, takich jaką jest zmienna opisująca decyzję o przyznaniu pożyczki.
logit1 <- glm(Loan_Status ~ Married + ApplicantIncome + CoapplicantIncome +Dependents + Education + LoanAmount + Credit_History,
data = data, family = binomial)
summary(logit1)##
## Call:
## glm(formula = Loan_Status ~ Married + ApplicantIncome + CoapplicantIncome +
## Dependents + Education + LoanAmount + Credit_History, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.619e+00 4.364e-01 -6.002 1.95e-09 ***
## Married 6.040e-01 2.315e-01 2.609 0.00909 **
## ApplicantIncome 1.183e-05 2.177e-05 0.543 0.58681
## CoapplicantIncome -3.473e-05 3.879e-05 -0.895 0.37066
## Dependents 1.975e-02 1.148e-01 0.172 0.86344
## Education 4.575e-01 2.496e-01 1.833 0.06684 .
## LoanAmount -1.997e-03 1.531e-03 -1.304 0.19217
## Credit_History 3.502e+00 3.568e-01 9.816 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 762.89 on 613 degrees of freedom
## Residual deviance: 582.68 on 606 degrees of freedom
## AIC: 598.68
##
## Number of Fisher Scoring iterations: 4
Dla utworzonego modelu zmienną objaśniającą jest Loan_Status informujący o decyzji przyznanie pożyczki, natomiast zmienne objaśniające to pozostałe dostępne informacje o potencjalnych kredytobiorcach.
Jak widać dla utworzonego modelu jedynie zmienne informujące o stanie cywilnym, poziomie oraz hisotrii kredytowej są istotne statystycznie.
logit2 <- glm(Loan_Status ~ Married + Credit_History,
data = data, family = binomial)
summary(logit2)##
## Call:
## glm(formula = Loan_Status ~ Married + Credit_History, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.5127 0.3705 -6.782 1.18e-11 ***
## Married 0.5519 0.2119 2.605 0.00919 **
## Credit_History 3.5109 0.3543 9.910 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 762.89 on 613 degrees of freedom
## Residual deviance: 588.29 on 611 degrees of freedom
## AIC: 594.29
##
## Number of Fisher Scoring iterations: 4
## (Intercept) Married Credit_History
## 0.08104677 1.73653607 33.47855312
W ramach drugie modelu przyjęto jako zmienne objaśniające dwie zmienne o największej istotności statystycznej w stosunku do wszystkich danych. Można stąd wysunąć wniosek, że zmiennymi o największym wpływie na decyzję o przyzaniu kredytu są zmienne mówiące o stanie cywilnym oraz hisotrii kredytowej.
Zakładając, że tylko te dwie wartości determinowałyby decyzję:
- bycie w zwiazku malzenskim zwieksza szanse na otrzymanie kredytu o 73%.
- natomiast pozytywna historia kredytowa zwieksza szanse na otrzymanie kredytu az o 3248%
5.2. Wizualizacja testów statystycznych
Wszystkie analizowane zmienne są istotne statystycznie przy poziomie istotności 0.05.
Historia kredytowa:
Stan cywilny:
Poziom edukacji:
6. Podsumowanie i wnioski końcowe
W ramach przeprowadzonej analizy danych zastosowano szereg technik przetwarzania, wizualizacji, analizy opisowej oraz wnioskowania statystycznego, które pozwoliły na dogłębne zrozumienie zależności między zmiennymi a decyzją o przyznaniu pożyczki.
- Pierwszym etapem pracy był data wrangling, który obejmował wstępną analizę danych, oczyszczanie zbioru danych, radzenie sobie z wartościami odstającymi oraz przygotowanie danych do dalszej wizualizacji.
- Następnie podjęto próbę rozwiązania głównego problemu postawionego przed danymi - wyodrębnieniu osób kwalifikujących się do kredytu. Przyjęto że wyznacznikiem będzie tu kwota dochodów gospodarstwa domowego w zależności od liczby osób zależnych. Podjęto również próbę klasteryzacji klientów na dwie grupy.
- Kolejnym krokiem było rozwiązanie kwestii wartości odstających. Problem ten rozwiązał się samoczynnie poprzez podział klientów ze względu na zarobki w punkcie 2.
- Wizualizacja danych została przeprowadzona przy użyciu wykresów pudełkowychi słupkowych.
- Wreszcie, na etapie wnioskowania statystycznego przeprowadzono odpowiednie testy (w tym budowę modelu), które miały na celu identyfikację zmiennych istotnych statystycznie w kontekście przyznania pożyczki.
Podczas realizacji projektu udało się rozwiązać zadanie stojące przed bazą danych poprzez zaproponowanie dwóch podziałów klientów do których bank mógłby skierować swoją ofertę - na podstawie dochodu gospodarstwa w zależności od liczby osób zależnych, oraz na podstawie algorytmu klastrowania. Wykazano również, że stan cywilny oraz historia kredytowa mają największy wpływ na decyzję o przyznaniu pożyczki.