PROJEKT Analiza Danych by Gabriela Dąbrowska, Filip Sidor & Jacek Sawka

2025-01-31

Projekt grupowy z przedmiotu Analiza Danych na PG. Celem będzie praca na pliku “kredyty i pożyczki”: Czyszczenie danych, eksploracyjna analiza danych, praca na zmiennej celu oraz testy statystyczne. Projekt przygotowany przez: Gabriela Dąbrowska - 187146 Filip Sidor - 185701 Jacka Sawka - 197326

Ładujemy biblioteki

ROZDZIAŁ 1. DANE I ICH BRAKI

Ładujemy dane, na których będziemy pracować.

## 'data.frame':    45000 obs. of  14 variables:
##  $ person_age                    : int  22 21 25 23 24 21 26 24 24 21 ...
##  $ person_gender                 : chr  "female" "female" "female" "female" ...
##  $ person_education              : chr  "Master" "High School" "High School" "Bachelor" ...
##  $ person_income                 : int  71948 12282 12438 79753 66135 12951 93471 95550 100684 12739 ...
##  $ person_emp_exp                : int  0 0 3 0 1 0 1 5 3 0 ...
##  $ person_home_ownership         : chr  "RENT" "OWN" "MORTGAGE" "RENT" ...
##  $ loan_amnt                     : int  35000 1000 5500 35000 35000 2500 35000 35000 35000 1600 ...
##  $ loan_intent                   : chr  "PERSONAL" "EDUCATION" "MEDICAL" "MEDICAL" ...
##  $ loan_int_rate                 : num  16 11.1 12.9 15.2 14.3 ...
##  $ loan_percent_income           : num  0.49 0.08 0.44 0.44 0.53 0.19 0.37 0.37 0.35 0.13 ...
##  $ cb_person_cred_hist_length    : int  3 2 3 2 4 2 3 4 2 3 ...
##  $ credit_score                  : int  561 504 635 675 586 532 701 585 544 640 ...
##  $ previous_loan_defaults_on_file: chr  "No" "Yes" "No" "No" ...
##  $ loan_status                   : int  1 0 1 1 1 1 1 1 1 1 ...

Sprawdzamy strukturę danych.

##  [1]  22  21  25  23  24  26  NA 144 123  20  32  34  29  33  28  35  31  27  30
## [20]  36  40  50  45  37  39  44  43  41  46  38  47  42  48  49  58  65  51  53
## [39]  66  61  54  57  59  62  60  55  52  64  70  78  69  56  73  63  94  80  84
## [58]  76  67 116 109
## [1] "female" "male"
## [1] "Master"      "High School" "Bachelor"    "Associate"   "Doctorate"
## [1] "RENT"     "OWN"      "MORTGAGE" "OTHER"
## [1] "No"  "Yes"
##  [1]  22  21  25  23  24  26  NA 144 123  20  32  34  29  33  28  35  31  27  30
## [20]  36  40  50  45  37  39  44  43  41  46  38  47  42  48  49  58  65  51  53
## [39]  66  61  54  57  59  62  60  55  52  64  70  78  69  56  73  63  94  80  84
## [58]  76  67 116 109

Sprawdzamy liczności unikalnych wartości.

##       person_gender person_education person_income person_emp_exp
## 41132             1                1             1              1
## 1395              1                1             1              1
## 1411              1                1             1              1
## 62                1                1             1              1
## 932               1                1             1              1
## 41                1                1             1              1
## 25                1                1             1              1
## 2                 1                1             1              1
##                   0                0             0              0
##       person_home_ownership loan_intent loan_int_rate loan_percent_income
## 41132                     1           1             1                   1
## 1395                      1           1             1                   1
## 1411                      1           1             1                   1
## 62                        1           1             1                   1
## 932                       1           1             1                   1
## 41                        1           1             1                   1
## 25                        1           1             1                   1
## 2                         1           1             1                   1
##                           0           0             0                   0
##       cb_person_cred_hist_length previous_loan_defaults_on_file loan_status
## 41132                          1                              1           1
## 1395                           1                              1           1
## 1411                           1                              1           1
## 62                             1                              1           1
## 932                            1                              1           1
## 41                             1                              1           1
## 25                             1                              1           1
## 2                              1                              1           1
##                                0                              0           0
##       person_age loan_amnt credit_score     
## 41132          1         1            1    0
## 1395           1         1            0    1
## 1411           1         0            1    1
## 62             1         0            0    2
## 932            0         1            1    1
## 41             0         1            0    2
## 25             0         0            1    2
## 2              0         0            0    3
##             1000      1500         1500 4000

Sprawdzamy tzw. pattern wartości brakujących. Widać, że jedynie trzy zmienne mają zaobserwowane braki danych.

Jak widać, tylko trzy kolumny są dotknięte większymi brakami danych. Będziemy je imputować metodą MICE.

## NULL

Poprawiony wykres przedstawia, że brakami danych dotknięte są kolumny “person_age”, “loan_amnt” oraz “credit_Score”.

Postanowiliśmy obciąć maksymalny wiek do 115 lat. Życzymy dwustu lat i więcej, ale ten wiek jest i tak odstający od średniej, co udowodnią późniejsze statystyki.

##  [1]  22  21  25  23  24  26  20  32  34  29  33  28  35  31  27  30  36  40  50
## [20]  45  37  39  44  43  41  46  38  47  42  48  49  58  65  51  53  66  61  54
## [39]  57  59  62  60  55  52  64  70  78  69  56  73  63  94  80  84  76  67 109
## [1] 2930

Tutaj mamy łączną ilość danych brakujących. Zaradzimy na to.

Jeszcze jedno sprawdzenie danych brakujących.

Imputujemy dane brakujące korzystając z funkcji Mice i metody PMM.

## [1] FALSE

Sprawdźmy skuteczność imputacji. Imputacja zakończona sukcesem.

ROZDZIAŁ 2. STATYSTYKI OPISOWE.

Kolejnym problemem jest duże odstawanie dochodów. Wynika to z kilku rzeczy:

Po pierwsze skala i przedział pozostałych zmiennych (porównajmy w jakim przedziale są poprawne dane wiekowe a dochodowe (nawet intuicyjnie)). Po drugie mamy kilku milionerów na pokładzie.

Generalnie w bankowości zarówno produkty finansowe jak i klienci są klastrowani/binowani zgodnie w ich warunkami ekonomicznymi/finansowymi. Tutaj to binowanie nie zostało zrobione, bądź zostało wykonane na tyle słabo, że tworzenie modelu na podstawie tych danych mogłoby dać dość niską moc predykcyjną.

Boxploty dla kolumn liczbowych. Widać drastyczne odstawanie dochodów, to może być zarówno błąd wejścia danych jak i poprawny wpis.

Druga iteracja boxplotów również jest zdominowana skalą i wartościami odstającymi(jestich bardzo dużo ponad Q3) przez zmienną loan_amount, szerokośc IQR jest relatywnie poprawna. Również ją usuniemy.

boxplot(data[, sapply(data, is.numeric) & !(names(data) %in% c("person_income", "loan_amnt"))],
        main = "Boxploty dla wybranych kolumn liczbowych (bez person_income i loan_amnt)",
        xlab = "Kolumny",
        ylab = "Wartości",
        col = "lightblue",
        las = 2)

Trzecia iteracja boxplotów również jest zdominowana skalą i wartościami odstającymi(jest ich bardzo dużo poniżej Q1) przez zmienną credit_score, szerokość IQR jest mała. Również ją usuniemy.

boxplot(data[, sapply(data, is.numeric) & !(names(data) %in% c("person_income", "loan_amnt", "credit_score"))],
        main = "Boxploty dla wybranych kolumn liczbowych (bez person_income, loan_amnt i credit_score)",
        xlab = "Kolumny",
        ylab = "Wartości",
        col = "lightblue",
        las = 2)

Czwarta iteracja boxplotów jest zdominowana wartościami odstającymi(jest ich bardzo dużo powyżej Q3) przy zmiennej person_age, person_emp_exp, loan_int_rate, cred_hist_length. Szerokośc IQR jest bardzo mała. Nie ma sensu robienia kolejnej iteracji wyrzucania zmiennych.

##  [1] Kolumna          Mean             Median           StandardError   
##  [5] StandardDev      IQR              IQRdeviation     Skewness        
##  [9] Kurtosis         Min              Max              Q1              
## [13] Q3               ContainsNegative
## <0 wierszy> (lub 'row.names' o zerowej długości)
##                     Kolumna      Mean Median StandardError StandardDev     IQR
##                  person_age  27.74874     26    0.02822962    5.921158       6
##               person_income  80063.04  67050      327.6608     68726.8 48535.5
##              person_emp_exp  5.395568      4    0.02830856    5.937715       7
##                   loan_amnt  9583.727   8000      30.10941    6315.444    7249
##               loan_int_rate  11.00779  11.01    0.01420209    2.978887    4.41
##         loan_percent_income 0.1396322   0.12   0.000415479  0.08714667    0.12
##  cb_person_cred_hist_length  5.866258      4    0.01846459    3.872945       5
##                credit_score   632.527    639     0.2401032     50.3616      69
##                 loan_status 0.2221843      0   0.001981976   0.4157191       0
##  IQRdeviation   Skewness kurtosis  Min     Max    Q1      Q3 ContainsNegative
##             3   1.956726 9.603263   20     109    24      30            FALSE
##      24267.75   19.22179  1077.71 8000 5556399 47235 95770.5            FALSE
##           3.5   1.995017 9.800851    0      85     1       8            FALSE
##        3624.5   1.176853 4.335344  500   35000  5000   12249            FALSE
##         2.205  0.2137384 2.576975 5.42      20  8.59      13            FALSE
##          0.06   1.036008  4.09467    0    0.66  0.07    0.19            FALSE
##           2.5   1.625622 6.694404    2      30     3       8            FALSE
##          34.5 -0.6083053 3.183993  390     792   601     670            FALSE
##             0    1.33657 2.786419    0       1     0       0            FALSE

Liczymy podstawowe stastystyki opisowe dla danych numerycznych. Statystyki z kolumn “person_age”,“person_income”,“person_emp_exp”,“loan_amnt”,“loan_percent_income” sugerują, że dane wniosków kredytowych były zbierane od bardzo młodych ludzi z dość niskimi dochodami i z małym stopniem “zakredytowania”, czyli stosunki bieżących zobowiązań do pobieranych dochodów. Dodatkowo wnioski były na dość małe kwoty. Jeśli faktycznie mielibyśmy modelować de facto pracowniczą młodzież, należałoby się zastanowić czy jest sens pozostawiać w zbiorze osoby bardzo doświadczone i zarabiające duże pieniądze. Jednak ta decyzja nie jest w scope naszego projektu.

Wedle statystyk opisowych przeciętną obserwacją według zmiennych numerycznych, to osoba o wieku poniżej 30 lat, z dochodami 80000 rocznie, o doświadczeniu około 5 lat. Kwota wnioskowanego kredytu to 9500 na oprocentowanie 11%. “Zakredytowanie” to 13%. Historia kredytowa jest pół roku dłuższa od doświadczenia zawodowego. Credit score to 632 a średnia wartość loan_status to 0.22.

Mimo, że jest to zmienna binarna, to jest sugestia, że większość wniosków była odrzucana. Większość zmiennych numerycznych ma bardzo duży rozstrzał oraz skośność i kurtozę.

Statystyki opisowe danych numerycznych
Kolumna Średnia Mediana Błąd Standardowy Odchylenie Standardowe IQR OdchylenieIQR Skośność Kurtoza Min Max Q1 Q3 Ujemne?
25% person_age 27.74874 26 0.02822962 5.921158 6 3 1.956726 9.603263 20 109 24 30 FALSE
25%1 person_income 80063.04 67050 327.6608 68726.8 48535.5 24267.75 19.22179 1077.71 8000 5556399 47235 95770.5 FALSE
25%2 person_emp_exp 5.395568 4 0.02830856 5.937715 7 3.5 1.995017 9.800851 0 85 1 8 FALSE
25%3 loan_amnt 9583.727 8000 30.10941 6315.444 7249 3624.5 1.176853 4.335344 500 35000 5000 12249 FALSE
25%4 loan_int_rate 11.00779 11.01 0.01420209 2.978887 4.41 2.205 0.2137384 2.576975 5.42 20 8.59 13 FALSE
25%5 loan_percent_income 0.1396322 0.12 0.000415479 0.08714667 0.12 0.06 1.036008 4.09467 0 0.66 0.07 0.19 FALSE
25%6 cb_person_cred_hist_length 5.866258 4 0.01846459 3.872945 5 2.5 1.625622 6.694404 2 30 3 8 FALSE
25%7 credit_score 632.527 639 0.2401032 50.3616 69 34.5 -0.6083053 3.183993 390 792 601 670 FALSE
25%8 loan_status 0.2221843 0 0.001981976 0.4157191 0 0 1.33657 2.786419 0 1 0 0 FALSE

Tabelka ze statystykami opisowymi pod eksport do raportu.

Tutaj kosmetyczny szczegół, by ułamek dziesiętny zgadzął się i były tego samego stopnia dla wszystkich zmiennych.

Tutaj postanowiliśmy jednak obciąć dochód do 1,8 miliona.

## [1] 1741243

ROZDZIAŁ 3. WIZUALIZACJA DANYCH.

Te wykresy prezentują liczność obsweracji dla każdej zmiennej katagorycznej. Ważne jest zbadać ich stopień zbalansowania. Generalnie jest OK, poza “person_education” oraz “person_home_ownership”, gdzie wystąpują obserwacje o marginalnie małej liczności.

Jak widać (pod kątem ewentualnego modelowania) Mamy bardzo duży problem niezbalansowania zmiennej celu. Mamy około 10 tysięcy przyznań kredytów do 30 tysięcy odmów. Model klasyfikacyjny byłby przeciążony z punktu widzenia odrzuceń wniosków.

##    person_age    person_gender      person_education   person_income    
##  Min.   :20.00   Length:43990       Length:43990       Min.   :   8000  
##  1st Qu.:24.00   Class :character   Class :character   1st Qu.:  47232  
##  Median :26.00   Mode  :character   Mode  :character   Median :  67049  
##  Mean   :27.74                                         Mean   :  79744  
##  3rd Qu.:30.00                                         3rd Qu.:  95755  
##  Max.   :94.00                                         Max.   :1741243  
##  person_emp_exp   person_home_ownership   loan_amnt     loan_intent       
##  Min.   : 0.000   Length:43990          Min.   :  500   Length:43990      
##  1st Qu.: 1.000   Class :character      1st Qu.: 5000   Class :character  
##  Median : 4.000   Mode  :character      Median : 8000   Mode  :character  
##  Mean   : 5.392                         Mean   : 9584                     
##  3rd Qu.: 8.000                         3rd Qu.:12250                     
##  Max.   :76.000                         Max.   :35000                     
##  loan_int_rate    loan_percent_income cb_person_cred_hist_length
##  Min.   :0.0542   Min.   :0.0000      Min.   : 2.000            
##  1st Qu.:0.0859   1st Qu.:0.0700      1st Qu.: 3.000            
##  Median :0.1101   Median :0.1200      Median : 4.000            
##  Mean   :0.1101   Mean   :0.1396      Mean   : 5.865            
##  3rd Qu.:0.1300   3rd Qu.:0.1900      3rd Qu.: 8.000            
##  Max.   :0.2000   Max.   :0.6600      Max.   :30.000            
##   credit_score   previous_loan_defaults_on_file  loan_status    
##  Min.   :390.0   Length:43990                   Min.   :0.0000  
##  1st Qu.:601.0   Class :character               1st Qu.:0.0000  
##  Median :639.0   Mode  :character               Median :0.0000  
##  Mean   :632.5                                  Mean   :0.2222  
##  3rd Qu.:670.0                                  3rd Qu.:0.0000  
##  Max.   :784.0                                  Max.   :1.0000
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

## NULL

Jak widać, nie ma już żadnych danych brakujących.

Nie licząc błędnych histogramów. Widać dość duży problem z rozkładem danych. Jedyna zmienna, która wizualnie przypomina rozkład normalny, z dużą skośnością, to zmienna “credit_score”.

Wykres dochód vs. kwota pożyczki vs. posiadanie domu (status) / intencja kredytu / historia poprzednich defaltuów.

Wniosków jest kilka:

1. Bez względu na kwotę wnioskowanej pożyczki osoby o mniejszych dochodach żyją w mieszkaniach wynajmowanych. Na pewnym poziomie dochódów dochodzi do odcięcia i ludzie zaczynają żyć na domach wziętych pod kredyt hipoteczny.

2. Intencja kredytu nie zmienia się wraz z kwotą i dochodami, wszędzie występują te same intencje.

  1. Bez względu na kwotę wnioskwoanej pożyczki osoby o mniejszych dochodach mają mniejszą tendencję do wpadania w defaulty. Na pewnym poziomie dochodów dochodzi do odcięcia i ludzie zaczynają odnotowalnie wpadać w defalty. Może to wynikać z sugerowanego faktu, iż osoby o małych dochodach nie wpadły wcześniej w defalty, ponieważ nie miały wcześniej kredytów do spłaty.

Różne wykresy wartości sytuacji demograficznych vs. parametrów aplikacyjnych i danych ekonomicznych.

Mało czytelny wykres. Dominującym statusem posiadania domy dla niższego wieku i kwoty pożyczki to wynajem

Mało czytelny wykres. Nieinformatywny.

Najbardziej czytelny wykres to dochód vs. wynik kredytowy vs. dotychczasowe defaulty klienta (wykres 3). Mamy formację piramidalną, Gdzie dochód najbardziej wyrasta paradoksalnie z przeciętnego wyniku kredytowego. Defaulty w historii kredytowej są zauważalne dopiero od pewnej powyżej minimalnej wartości obserwowalnych dochodów.

Heatmapa korelacji dla danych numerycznych. Dość duża korelacja występuje między danymi: person_age - person_emp_exp , person_age - cb_person_cred_hist_length , person_emp_exp - cb_person_cred_hist_length. Intuicyjnie ma to sens.

Wykresy punktowe z nałożoną funkcją regresyjną. Wykres nieinformatywny.

bardzo wysokie kwoty pożyczek są na dość niskie oprocentowania. Oprocentowanie maleje, wynikające prawdopodobnie z niskiego ryzyka kredytowego klienta.

Relacja wieku i historii kredytowej niemalże doskonale liniowa.

##  [1] "person_age"                     "person_gender"                 
##  [3] "person_education"               "person_income"                 
##  [5] "person_emp_exp"                 "person_home_ownership"         
##  [7] "loan_amnt"                      "loan_intent"                   
##  [9] "loan_int_rate"                  "loan_percent_income"           
## [11] "cb_person_cred_hist_length"     "credit_score"                  
## [13] "previous_loan_defaults_on_file" "loan_status"

Wykresy dochód vs kwota pożyczki oraz obciążenie kredytem vs. kwota kredytu. Obciążenie kredytem vs. kwota kredytu ma zauważalną liniową relację z dużym błędem

W przypadku dochód vs kwota pożyczki błąd wizualny jest zbyt duży, by określić liniową zależność(wykres 3.).

##  [1] "person_age"                     "person_gender"                 
##  [3] "person_education"               "person_income"                 
##  [5] "person_emp_exp"                 "person_home_ownership"         
##  [7] "loan_amnt"                      "loan_intent"                   
##  [9] "loan_int_rate"                  "loan_percent_income"           
## [11] "cb_person_cred_hist_length"     "credit_score"                  
## [13] "previous_loan_defaults_on_file" "loan_status"

Wykres doświadczenie vs. kwota kredytu pokazuje raczej, że największe kwoty kredytu są brane wnioskowane przez klientów o małym doświadczeniu zawodowym.

Wykres cel kredytu vs doświadczenie jest nieinformatywny, lecz widać wartości odstające formujące się we wniosek, że osoby o dużym doświadczeniu (osoby starsze) biorą dużo kredytów w celu pokrycia zobowiązań za usługi medyczne.

Tutaj też widać, że osoby doświadczone (starsze) mają tendencję do mieszkaniu w wynajętych domach.

Histogram kwoty pożyczki w zależności od wczesniejszych defaultów. Widać, że zachowana jest pewna proporcja i im więcej wystąpień o daną kwotę pożyczki tym więcej było historii defaultu na daną kwotę, vide 10 000 dolarów.

Ten sam histogram z użyciem pakietu plotly, niestety interfejs jest mało intuicyjny.

ROZDZIAŁ 4. PRACA NA ZMIENNEJ CELU.

Ponieważ dane do pracy zawierają binarną zmienną celu “loan_status” stworzoną stricte pod model klasyfikacyjny uczenia maszynowego, dokonam teraz zestawu wizualnych analiz dla wspomnianych wcześniej zmiennych objasniających, by (być może) dokonać intuycyjnego sprawdzenia jakie parametry przyczyniają się do pozytywnej decyzji ws. przyznania krdytu. Oczywiście takie sprawdzenie bez odbpowiedniego, numerycznego algorytmu klasyfikacyjnego nie ma żadnej mocy predykcyjnej, ale dokonanie jej może w pewnien sposób zawęzić spektrum istotnych i ciążących na decyzji zmiennych.

Bez względu na kwotę wnioskowanej pozyczki, status przyznania kredytu był dominujący dla najmłodszej populacji. Widać odcięcie w wieku między przyznaniem a odmową wniosku.

Rozszerzeniem do poprzedniego wykresu jest ta relacja. W której zdecydowanie dominującą grupą są nie dość że najmłodsi ludzie w populacji, to jeszcze ci stosunkowo najmniej zarabiający. Są oczywiście wartości odstające, ale to marginalne ilości.

Bez względu na dochody, które mogą być pokaźne. Jeśli ktoś wczesniej wpadł w default, to bezwzględnie nie otrzymał wnioskowanego kredytu.

Wykres przedstawia, że największa kumulacja przyznanych wniosków jest przy stosunkowo krótkiej historii kredytowej, która wyznacza również mniej-więcej długość doświadczenia zawodowego. Jest dużo przyznań kredytów dla osób o bardzo długiej historii kredytowej. Optymalnym credit-score jest pułap między 600 a 700.

Zdecydowanie więcej mężczyzn zarabia skrajnie wysokie w populacji kwoty, natomiast relacja przyznań kredytów pod względem płci jest niemalże doskonale zbalansowana.

Jest pewien pułap credit score poniżej którego nie da się przeciętnie uzyskać kredytu oraz analogicznie powyżej - prawdopodobnie z racji dochodów. Natomiast obciążenie kredytem, czyli stosunek obciążeń bieżących do zarobków, nie ma żadnego większego znaczenia jeśli chodzi o kwestię uznań. Być może jest to jakiś kredyt “ratunkowy”, “społeczny” albo “restrukturyzacyjny”.

Ten wykres potwierdza poprzednią i wczesniejsze tezy. Ludzie zarabiający bardzo dobrze i z małym obciążeniem nie dostaną kredytu z tej puli. Prawdopodobnie dlatego, że stać ich na kredyt komercyjny na warunkach rynkowych. Tutaj widać zdecydowaną tendencję przyznawalności kredytu dla osób zarabiających mało, z dużą ilością obciążeń bieżących ALE bez defaultów w historii kredytowej!!!

Ten wykres jest nieczytelny, ale jest informacja, że Licencjaci oraz Doktorzy nauk mieszkający w innych niż wymienionych warunkach posiadania domu oraz Doktorzy nauk mieszkający we własnych mieszkaniach w dominującej ilości przypadków spotykali się z odmowami przyznania kredytów.

Ten wykres jest nieczytelny poza lewą jego stroną. Mowiącą, że bez względu na kwotę kredytu, nisko oprocentowane wnioski kredytowe spotykały się z odmową.

Tutaj widać w miarę czytelnie, że im wyższe dochody tym niższe oprocentowanie, ale zarazem niższa szansa na uzystkanie kredytu.

WNIOSEK:

Jaki nasuwa się z analizy danych jest następujący: O przyznawalności kredytów najprawdopodobniej nie decydyją parametry beharwioralne. Oczywiście historia defaultów jest czynnikiem przekreślającym możliwość przynania kredytu(wykres 3.). Moim zdaniem jest to program preferencyjnych kredytów np. przyznawanych przez gminę/urząd miasta/community. Być może jest to program tzw. kredytów preferencyjnych, które mają bardzo niski próg przyznawalności (kosztem wysokiego oprocentowania, z racji ryzyka w.w. czynników), ale jest ograniczona pula przyznań i wydawane są tylko dla ludzi o określonych (dość niskich) dochodach, krótkiej ale nienagannej historii kredytowej bez własnego domu i z dość krótkim doświadczeniem zawodowym. Ciekawy jest wniosek z wykresu obciązenie kredytem vs. dochody vs. status przyznania kredytu(wykres 7.). Tutaj przyznawalność jest zdecydowanie udzielana dla niskich dochodów, ale nawet przy dużym stopniu obciążenia dotychczasowymi pożyczkami.

ROZDZIAŁ 5. TESTY STATYSTYCZNE.

Widocznie wyższy credit score dla obserwacji, które nie miały defaultów. Moim zdaniem ta różnica jest zauważalna, ale zbyt mała. Ciężko stwierdzić jaka jest metodologia liczenia credit score. Populacje są zbalansowane.

To jest ciekawe. Mianowicie osoby mniej “zakredytowane” to te, które przeciętnie miały defaulty w historii kredytowej. Populacje są licznościowo zbalansowane.

Brak różnicy w medianie wieku między osobami o nienagannej historii kredytowej względem tych, co mieli defaulty. Populacje są zbalansowane.

Tutaj zgodnie z wcześniej zauważoną obserwacją. Osoby o wyższej medianie dochodów mieli defaulty w historii. Populacje są zbalansowane.

Zestaw wykresów credit_score/loan_percent_income/person_age vs. loan_status.

Co ciekawe, credit score nie ma związku na przyznawalność kredytu, wpisuje się to we wspomnianą wcześniej teorię.

Drugi wykres pokazuje bardzo szeroki rozkład loan_percent_income względem przyznanych kredytów.

Wiek vs status kredytu nie wnosi żadnych informacji.

Z kolei dochód vs status kredytu pokazuje ewidentnie, że osoby o niżsych dochodach otrzymywały przyznanie kredytu, co róznież wpisuje się w teorię.

Historia kredytowa i doświadczenie vs status kredytu nie wnoszą zbyt wielu informacji.

Tutaj z kolei sugestia, że mniejsza o jedną jednostkę mediany doświadczenia zawodowego dotyczy przyznanych wniosków kredytowych.

Wykresy kołowe różnych zmiennych kategorycznych vs. status kredytu i historia defaultów.

W pierwszym wykresie nie widać za dużych anomalii względem intencji kredytu a statusem. Po prostu mniejszość wniosków została rozpatrzona pozytywnie z największą przyznawalnością dla “konsolidacji długu”.

Drugi wykres pokazuje zdecydowaną dominację akceptacji wniosków dla osób mieszkających w wynajmowanych mieszkaniach i “innych”

Trzeci wykres nie wnosi anomalii względem wykształcenia vs statusu kredytu

Czwarty wykres pokazuje równe zbalansowanie płci i historii defaultów.

Piąty wykres pokazuje również równe zbalansowanie wykształcenia względem historii defaultów.

Ostatni wykres pokazuje, że najwięcej defaultów mieli klienci, którzy mieli własne mieszkana bądź wzięte pod hipotekę.

Przedstawienie ostatniego wykresu w formie słupkowej-stackowanej (relacyjnej)

Testy na rozkład normalny dla zmiennych numerycznych

Testy na rozkład normalny dla zmiennych numerycznych. Względem wykresu QQ, większość zmiennych numerycznych odstaje mocno od rozkładu normalnego.Jedynie credit_score jest bliski normalnego, co było sugerowane wcześniej(Wykres 8.).

## 
##  Anderson-Darling normality test
## 
## data:  data$person_income
## A = 2589, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$person_age
## A = 1747.6, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$person_emp_exp
## A = 1964.7, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$loan_amnt
## A = 1091.7, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$loan_int_rate
## A = 185.48, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$loan_percent_income
## A = 780.02, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$cb_person_cred_hist_length
## A = 1969, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$credit_score
## A = 289.77, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$loan_status
## A = 11179, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  large_data
## A = 0.24271, p-value = 0.7681

Test Anderson-Darling na rozkład normalny dla zmiennych numerycznych potwierdza wniosek wyprowadzony przez Q-Q plot. Zmienne nie mają rozkładu normalnego. Na dole kodu test dla hipotetycznego rozkładu normalnego, by udowodnić dobry kierunek interpretacji p-value.

## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$person_income
## D = 0.15325, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$person_age
## D = 0.15472, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$person_emp_exp
## D = 0.18124, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$loan_amnt
## D = 0.13448, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$loan_int_rate
## D = 0.067026, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$loan_percent_income
## D = 0.10568, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$cb_person_cred_hist_length
## D = 0.20726, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$credit_score
## D = 0.05855, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$loan_status
## D = 0.48129, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  large_data
## D = 0.0062945, p-value = 0.8174

Dane numeryczne nie pochodzą z rozkładu normalnego, ponieważ p value jest mniejsze od 0.05. Odrzucamy hipotezę zerową. Powatarzamy to samo dla testu Kolmogorova - Smirnova. Test Kolmogorova - Smirnova potwierdza brak rozkładu normalnego.

Ostatnie podejście to przerobienie zmiennych numerycznych na logarytmy naturalne i przetestowanie ich w oparciu o test Kolmogorova-Smirnova

## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$person_income_log
## D = 0.024262, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$person_age_log
## D = 0.13148, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$loan_amnt_log
## D = 0.067115, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$loan_int_rate_log
## D = 0.10177, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$cb_person_cred_hist_length_log
## D = 0.14926, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$credit_score_log
## D = 0.07332, p-value < 0.00000000000000022
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  data$loan_status_log
## D = 0.48129, p-value < 0.00000000000000022

Test Kołmogorova - Smirnova dla zlogarytmowanych zmiennych nie wykazał poprawy jeśli chodzi o rozkład normalny.

## 
##  Anderson-Darling normality test
## 
## data:  data$person_income_log
## A = 35.336, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$person_age_log
## A = 988.9, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$loan_amnt_log
## A = 170.62, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$loan_int_rate_log
## A = 415.82, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$cb_person_cred_hist_length_log
## A = 691.72, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$credit_score_log
## A = 481.37, p-value < 0.00000000000000022
## 
##  Anderson-Darling normality test
## 
## data:  data$loan_status_log
## A = 11179, p-value < 0.00000000000000022

Anderson-Darling również nie wykazał poprawy pod względem normalności rozkładu zmiennych.

WNIOSKI KOŃCOWE:

  • Braki danych nie były największym problemem.
  • Dane miały ekstremalne wartości odstające, Bardzo dalekie od rozkładu normalnego. Stanowi to potencjalny problem przy modelowaniu, wymaga bardzo silnych przekształceń np. dyskretyzacji i binowania zmiennych ciągłych, by wymusić na nich rozkład normalny.
  • Dane kategoryczne miały dośc małe problemy ze zbalansowaniem, czego nie można powiedzieć o zmiennej celu “loan_status”, model byłby biased.
  • Dane prawdopodobnie były “zepsute” przez ich dostawcę.
  • Z dużej ilości wykresów oraz testów ciężko było znaleźć jednoznaczne wnioski, wynikające z relacji, klastrów, grup, puntów odcięcia.
  • Najbardziej miarodajna sugestia wniosku jest taka, iż zbiór danych to wnioskodawcy i kredytobiorcy kredytu nierynkowego, tj. społecznego, komunalnego, studenckiego, restrukturyzacyjnego, dla osób o niskich dochodach, przeciętnym credit score, bez własnego mieszkania, dość wysokim (ale niekoniecznie) stosunku bieżących zobowiązań do zarobków, ale bez defaultów w historii kredytowej, na różne cele spożytkowania, o dość wysokim oprocentowaniu. Mniej więcej taki obraz najbardziej przeciętnego wnioskodawcy z pozytywną decyzją wyłania się ze zbioru.

I TO BY BYŁO NA TYLE :))))))))))))))) 28.01.2025