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