Współczesna bankowość opiera się na precyzyjnej ocenie zachowań klientów przy użyciu modeli statystycznych. Projekt dotyczy analizy ofert kredytów samochodowych banku działającego na rynku USA.
Głównym problemem badawczym jest identyfikacja czynników wpływających
na decyzję klienta o zaakceptowaniu oferty kredytu samochodowego. W
procesie sprzedaży bank napotyka na opór wynikający z ofert konkurencji
(compet_interest) oraz indywidualnego profilu ryzyka
klienta (risk_group, FICO_score). Kluczowe
jest zrozumienie, jak parametry takie jak stopa procentowa czy kwota
kredytu wpływają na prawdopodobieństwo sukcesu sprzedażowego.
Głównym celem projektu jest opracowanie modelu scoringowego, który na podstawie danych historycznych dotyczących ofert kredytów samochodowych pozwoli na ocenę prawdopodobieństwa podjęcia decyzji przez klienta. Projekt ma na celu przeprowadzenie pełnego procesu modelowania, od wstępnej analizy danych, przez budowę karty scoringowej, aż po ocenę jakości klasyfikacji.
Rezultatem prac nad projektem będą następujące elementy:
W ramach projektu wykorzystane zostaną klasyczne metody uczenia nadzorowanego stosowane w modelowaniu ryzyka. Proces obejmie:
Poniższa sekcja zawiera szczegółową charakterystykę zmiennych wykorzystanych w projekcie oraz analizę struktury technicznej zbioru danych. Analizowany zbiór danych zawiera informacje o 40 000 ofertach kredytowych, opisanych przez 13 zmiennych.
| Zmienna | Opis | Typ aktualny | Typ docelowy |
|---|---|---|---|
| ID | unikalny numer identyfikacyjny rekordu | int | do usunięcia |
| approved | data zatwierdzenia oferty kredytu przez bank | chr | Date |
| risk_group | grupa ryzyka klienta (1-najniższe, 4-najwyższe) | int | factor |
| partner_ID | identyfikator sieci dealerów samochodowych | int | factor |
| loan_type | typ kredytu: N (nowy), U (używany), R (refinansowanie) | chr | factor |
| FICO_score | scoring kredytowy klienta (odpowiednik BIK) | int | int |
| loan_term | okres kredytowania w miesiącach (np. 48, 60, 72) | int | int |
| loan_amount | kwota kredytu w USD | int | num |
| refin_interest | oprocentowanie poprzedniego kredytu (tylko dla typu R) | num | num |
| compet_interest | najlepsze oprocentowanie oferowane przez konkurencję | num | num |
| cost_of_funds | koszt pozyskania kapitału przez bank | num | num |
| proposed_interest | oprocentowanie zaproponowane klientowi | num | num |
| customer_accept | czy klient zaakceptował ofertę (1 - tak, 0 - nie) | int | factor |
Na podstawie powyższej analizy struktury, w kolejnym kroku zostaną podjęte następujące działania:
Reklasyfikacja zmiennych jakościowych: Zmienne
takie jak risk_group, partner_ID oraz
loan_type zostaną przekształcone na typ factor. Jest to
kluczowe, aby algorytmy scoringowe nie traktowały identyfikatorów czy
grup ryzyka jako ciągłych wartości liczbowych, lecz jako odrębne
kategorie.
Normalizacja daty: Kolumna approved zostanie skonwertowana z formatu tekstowego (chr) na format daty (Date).
Przygotowanie zmiennej objaśnianej: Zmienna
customer_accept zostanie zdefiniowana jako czynnik
(factor), co jest warunkiem koniecznym do przeprowadzenia klasyfikacji
binarnej.
Selekcja zmiennych: Zmienna ID
zostanie wykluczona z procesu modelowania, ponieważ jako unikalny
identyfikator techniczny nie posiada mocy predykcyjnej.
| Min | 1. Kwartyl.25% | Mediana | Średnia | 3. Kwartyl.75% | Max | |
|---|---|---|---|---|---|---|
| FICO_score | 601.00 | 684.00 | 717.00 | 720.73 | 755.00 | 851.00 |
| loan_term | 36.00 | 48.00 | 60.00 | 57.19 | 60.00 | 72.00 |
| loan_amount | 4527.00 | 15703.75 | 23000.00 | 24211.66 | 30907.25 | 100000.00 |
| refin_interest | 3.00 | 6.25 | 7.75 | 8.37 | 9.90 | 24.00 |
| compet_interest | 2.99 | 4.49 | 4.99 | 4.96 | 5.39 | 6.29 |
| cost_of_funds | 1.09 | 1.11 | 1.38 | 1.42 | 1.63 | 2.10 |
| proposed_interest | 2.59 | 4.82 | 6.34 | 6.59 | 8.24 | 11.35 |
Profil klienta i jego wiarygodność
Statystyki pokazują, że bank obsługuje głównie wiarygodnych klientów. Średni FICO_score wynosi ok. 720, co świadczy o dużej rzetelności kredytobiorców. Większość osób w naszej bazie ma po prostu dobrą historię kredytową (powyżej 684 punktów).
Parametry udzielanych pożyczek
Jeśli chodzi o same pożyczki, typowy klient bierze kredyt na 23 000 - 24 211 USD, zazwyczaj decydując się na okres 5 lat (60 miesięcy). Warto odnotować, że maksymalna kwota kredytu to aż 100 000 USD, co przy znacznie niższej średniej wskazuje na obecność grupy klientów, którzy “wyciągają” średnią w górę.
Pozycjonowanie cenowe i rentowność
Warta uwagi jest również oferta banku vs rynku. Bank proponuje średnie oprocentowanie na poziomie 6,59%, podczas gdy konkurencja oferuje średnio 4,96%. Bank jest więc wyraźnie droższy od rynkowej czołówki, co może wpływać na finalną akceptację ofert przez klientów. Przy średnim koszcie pozyskania kapitału wynoszącym 1,42%, bank pracuje na marży ponad 5 punktów procentowych. Proponowane odsetki wahają się od 2,59% do 11,35%, co sugeruje, że bank mocno uzależnia cenę od grupy ryzyka konkretnego klienta.
Dynamika nowych kredytów i refinansowania
Początkowa analiza zmiennej refin_interest wykazała, że
dla kredytów na nowe i używane samochody system technicznie przypisywał
wartość 0 zamiast braku danych. Aby zapobiec zaburzeniom w procesie
wyliczania wartości WoE, zera te zostały przekształcone na wartości
brakujące (NA), co pozwoli algorytmom scoringowym na utworzenie dla nich
oddzielnej kategorii logicznej. W segmencie refinansowania (typ R) bank
przejmuje klientów, którzy wcześniej mieli bardzo drogie finansowanie,
rekordowo nawet 24%.
Wykresy skrzypcowe połączone z wykresami pudełkowymi po wykonaniu korekty braków danych pozwalają na rzetelną ocenę rozkładów kluczowych zmiennych:
loan_amount charakteryzuje się asymetrią prawostronną. Choć
większość udzielanych kredytów koncentruje się w przedziale 15 000 – 30
000 USD, widoczny jest długi ogon wartości odstających sięgający aż do
100 000 USD.loan_term nie jest płynny, lecz pokazuje wyraźne zwężenia i
rozszerzenia. Wynika to z faktu, że okres kredytowania w praktyce
bankowej przyjmuje standardowe wartości (najczęściej 48, 60 i 72
miesiące).proposed_interest i compet_interest ukazuje,
że oferta banku charakteryzuje się znacznie większą wariancją. Podczas
gdy oferty konkurencji są mocno scentrowane wokół 5%, bank proponuje
stawki w dużo szerszym przedziale (zauważalny długi “ogon” w stronę
wyższych stóp), co sugeruje silną indywidualizację ceny w zależności od
ryzyka.refin_interest ukazuje rzeczywisty
rozkład starych zobowiązań klientów. Widać na nim, że bank skutecznie
przyciąga osoby uwięzione w bardzo drogich kredytach (ogon rozkładu
sięga nawet ponad 20%).Analiza ujawnia kluczowe zależności między profilem klienta i parametrami oferty a ostateczną decyzją o jej akceptacji:
Wbrew rynkowemu założeniu o tzw. selekcji negatywnej, według którego najsłabsi klienci najczęściej akceptują oferty z braku alternatyw, nasze dane wskazują na zupełnie inną dynamikę. Najwyższy wskaźnik (34.9%) występuje w grupie o najniższym ryzyku (grupa 1). Wynika to prawdopodobnie z faktu, że bank jest w stanie zaproponować tym klientom wysoce konkurencyjne warunki. Skłonność do przyjęcia oferty wyraźnie spada w grupach 2 i 3, notując jedynie minimalne odbicie w grupie najwyższego ryzyka (grupa 4, wskaźnik 18.8%).
Ponadto wykres pudełkowy dla proponowanego oprocentowania jednoznacznie potwierdza dużą wrażliwość klientów na cenę. Osoby, które zaakceptowały ofertę, otrzymały propozycje zauważalnie tańsze – z medianą na poziomie około 5.4%. Z kolei oferty odrzucone charakteryzowały się medianą w okolicach 6.5% oraz znacznie większym rozrzutem w stronę wysokich stóp procentowych. Wskazuje to, że sam koszt finansowania jest ewidentnie jednym z najsilniejszych czynników decyzyjnych w analizowanym portfelu.
Najważniejsze informacje uzyskane z EDA, z którymi wchodzimy do etapu modelowania:
Zbiór został oczyszczony. Kluczowym na tym etapie było
zidentyfikowanie zer w kolumnie refin_interest i zamiana
ich na braki danych (NA).
Bank celuje w bezpiecznego klienta. Mediana
FICO_score na poziomie 717 punktów oraz koncentracja kwot
wokół 23 000 USD wskazuje na solidny, standardowy portfel.
Bank wykazuje dużą elastyczność w ofertowaniu
(proposed_interest ma szeroki rozkład), pracując na bardzo
solidnej marży (średni koszt funduszy to zaledwie ok. 1.4%, a
proponowane oprocentowanie to ponad 6.5%). Konkurencja wydaje się
wypadać gorzej (skupiona wokół 5%).
Klienci akceptujący ofertę dostali średnio o ponad punkt procentowy tańszy kredyt (mediana 5.4% vs 6.5%).
Accept Rate jest w najwyższej grupie jakościowej (grupa 1 - 34.9%). Najsłabsi klienci akceptują oferty rzadziej, co sugeruje, że bank może oferować im ceny zaporowe ze względu na ryzyko.
Celem części modelowej jest przejście od analizy opisowej do interpretowalnego modelu scoringowego, który pozwala ocenić skłonność klienta do zaakceptowania oferty kredytu samochodowego.
Proces modelowania obejmuje kilka etapów. Najpierw utworzono dodatkowe zmienne opisujące ekonomiczne cechy oferty, takie jak konkurencyjność oprocentowania, marża banku czy potencjalna oszczędność przy refinansowaniu. Następnie przeprowadzono analizę wartości informacyjnej zmiennych, kubełkowanie oraz transformację WoE. Ostatecznie zbudowano model regresji logistycznej i przeskalowano jego wyniki do postaci punktowej karty scoringowej.
| Zmienna | Wzor | Interpretacja | Uzasadnienie_biznesowe |
|---|---|---|---|
| price_advantage | compet_interest - proposed_interest | Przewaga cenowa banku względem konkurencji. Wartość dodatnia oznacza, że bank oferuje niższe oprocentowanie niż konkurencja. | Klienci powinni częściej akceptować oferty bardziej konkurencyjne cenowo. |
| bank_margin | proposed_interest - cost_of_funds | Przybliżona marża odsetkowa banku na ofercie kredytowej. | Zbyt wysoka marża może obniżać atrakcyjność oferty dla klienta. |
| refin_savings | refin_interest - proposed_interest | Potencjalna oszczędność klienta w przypadku refinansowania starego kredytu. | Im większa potencjalna oszczędność, tym większa motywacja klienta do refinansowania. |
| approx_installment | loan_amount / loan_term | Przybliżona miesięczna część kapitałowa raty kredytu. | Wyższe miesięczne obciążenie może ograniczać skłonność do akceptacji. |
| is_refin | 1 jeśli loan_type = R, w przeciwnym razie 0 | Flaga identyfikująca oferty refinansowania. | Refinansowanie ma inną logikę decyzyjną niż zakup nowego lub używanego samochodu. |
Utworzone zmienne mają charakter interpretowalny biznesowo. Oznacza to, że ich wpływ na decyzję klienta można wyjaśnić nie tylko statystycznie, ale również ekonomicznie.
Wykresy pudełkowe pokazują, czy nowo utworzone zmienne różnicują
klientów, którzy zaakceptowali ofertę i klientów, którzy ją odrzucili.
Szczególnie istotna jest zmienna price_advantage, ponieważ
bezpośrednio porównuje ofertę banku z najlepszą ofertą konkurencji.
Jeżeli dla klientów akceptujących ofertę wartości tej zmiennej są
wyższe, oznacza to, że przewaga cenowa banku rzeczywiście przekłada się
na większą skuteczność sprzedażową.
Zmienna bank_margin pozwala natomiast ocenić, czy oferty
bardziej rentowne dla banku są jednocześnie mniej atrakcyjne dla
klientów. Wysoka marża może zwiększać wynik finansowy pojedynczej
transakcji, ale jednocześnie obniżać prawdopodobieństwo przyjęcia
oferty.
| Zbior | Liczba_obserwacji | Udzial_w_calosci | Accept_rate |
|---|---|---|---|
| Treningowy | 28000 | 70.0% | 25.9% |
| Testowy | 12000 | 30.0% | 25.9% |
Dane zostały podzielone na zbiór treningowy i testowy w proporcji
70/30. Zbiór treningowy wykorzystano do wyznaczenia kubełków WoE,
estymacji modelu oraz budowy karty scoringowej. Zbiór testowy
pozostawiono do niezależnej oceny jakości modelu na obserwacjach, które
nie były używane podczas procesu uczenia. Porównanie wskaźnika
akceptacji w obu próbach pozwala ocenić, czy podział nie zaburzył
struktury zmiennej celu. Zbliżony poziom Accept rate w
zbiorze treningowym i testowym oznacza, że obie próby są porównywalne
pod względem udziału zaakceptowanych ofert.
Przed estymacją modelu przeprowadzono ocenę siły predykcyjnej zmiennych przy użyciu miary Information Value. Wartość IV informuje, w jakim stopniu dana zmienna różnicuje obserwacje należące do różnych klas zmiennej celu. W projekcie miara ta została wykorzystana jako etap pre-screeningu, czyli wstępnej selekcji zmiennych kandydackich do modelu.
Przy interpretacji IV zastosowano następujące orientacyjne progi:
< 0.02 - bardzo słaba zmienna
0.02-0.10 - słaba, ale potencjalnie użyteczna zmienna
0.10-0.30 - średnia siła predykcyjna
0.30-0.50 - mocna zmienna
> 0.50 - bardzo mocna zmienna, wymagająca kontroli pod kątem przeuczenia
| variable | info_value | Ocena siły |
|---|---|---|
| loan_amount | 1.5914 | bardzo mocna - do sprawdzenia |
| approx_installment | 1.4222 | bardzo mocna - do sprawdzenia |
| bank_margin | 0.6323 | bardzo mocna - do sprawdzenia |
| price_advantage | 0.5885 | bardzo mocna - do sprawdzenia |
| proposed_interest | 0.5707 | bardzo mocna - do sprawdzenia |
| refin_savings | 0.4579 | mocna |
| loan_type | 0.4096 | mocna |
| compet_interest | 0.3795 | mocna |
| refin_interest | 0.3735 | mocna |
| is_refin | 0.2263 | średnia |
| partner_ID | 0.2238 | średnia |
| risk_group | 0.1750 | średnia |
| FICO_score | 0.1414 | średnia |
| loan_term | 0.0690 | słaba |
| cost_of_funds | 0.0207 | słaba |
Ranking pozwala wskazać zmienne, które samodzielnie najlepiej różnicują klientów akceptujących i nieakceptujących ofertę. Wysoka wartość nie oznacza jednak automatycznie, że zmienna powinna wejść do finalnego modelu. Ostateczny wybór predyktorów zależy również od stabilności kubełków, interpretowalności biznesowej, współliniowości oraz istotności parametrów w regresji logistycznej.
Kolejnym etapem było kubełkowanie zmiennych, czyli przekształcenie wartości ciągłych i kategorii w przedziały wykorzystywane w karcie scoringowej. Kubełkowanie pełni kilka funkcji. Po pierwsze, pozwala uchwycić nieliniowe zależności między predyktorami a zmienną celu. Po drugie, ogranicza wpływ wartości odstających. Po trzecie, zwiększa interpretowalność modelu, ponieważ finalna karta scoringowa przypisuje punkty nie pojedynczym wartościom, lecz konkretnym przedziałom wartości. Po wyznaczeniu kubełków zastosowano transformację Weight of Evidence.
m_full <- glm(I(1 * (customer_accept == 1)) ~ ., data = train_woe, family = binomial())
m_step <- step(m_full, direction = "both", trace = FALSE)
print(summary(m_step))
##
## Call:
## glm(formula = I(1 * (customer_accept == 1)) ~ risk_group_woe +
## partner_ID_woe + loan_type_woe + FICO_score_woe + loan_amount_woe +
## refin_interest_woe + compet_interest_woe + cost_of_funds_woe +
## proposed_interest_woe + price_advantage_woe + refin_savings_woe +
## approx_installment_woe + is_refin_woe, family = binomial(),
## data = train_woe)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.06503 0.01703 -62.524 < 2e-16 ***
## risk_group_woe 0.87655 0.08640 10.145 < 2e-16 ***
## partner_ID_woe 1.16211 0.04359 26.661 < 2e-16 ***
## loan_type_woe 0.32915 0.04520 7.283 3.28e-13 ***
## FICO_score_woe -0.33115 0.08706 -3.804 0.000142 ***
## loan_amount_woe 0.50345 0.03320 15.163 < 2e-16 ***
## refin_interest_woe 0.23882 0.09106 2.623 0.008723 **
## compet_interest_woe 0.67319 0.05246 12.831 < 2e-16 ***
## cost_of_funds_woe 0.41348 0.15207 2.719 0.006548 **
## proposed_interest_woe -0.18700 0.05664 -3.302 0.000961 ***
## price_advantage_woe 1.01937 0.06631 15.373 < 2e-16 ***
## refin_savings_woe 0.64492 0.06160 10.469 < 2e-16 ***
## approx_installment_woe 0.49787 0.03367 14.788 < 2e-16 ***
## is_refin_woe -0.90961 0.08375 -10.861 < 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: 32051 on 27999 degrees of freedom
## Residual deviance: 23315 on 27986 degrees of freedom
## AIC: 23343
##
## Number of Fisher Scoring iterations: 5
Do budowy finalnego modelu wykorzystano regresję logistyczną na zmiennych przekształconych metodą WoE. Model został następnie poddany regresji kroczącej, której celem było ograniczenie liczby predyktorów i pozostawienie w modelu zmiennych wnoszących największą wartość informacyjną.
Wynik przedstawia parametry finalnego modelu logistycznego.
Współczynnik Beta określa kierunek i siłę wpływu danej
zmiennej na logarytm ilorazu szans akceptacji oferty. Dodatnia wartość
parametru oznacza wzrost szansy akceptacji wraz ze wzrostem wartości
zmiennej WoE, natomiast wartość ujemna oznacza zależność odwrotną.
Kolumna z p_value pozwala ocenić statystyczną istotność predyktora w
modelu.
Po estymacji modelu logistycznego na zmiennych przekształconych
metodą WoE dokonano przeliczenia modelu na postać punktowej karty
scoringowej. W tym celu przyjęto trzy podstawowe parametry skalowania:
points0, odds0 oraz pdo.
Parametr points0 = 500 oznacza bazowy poziom punktacji.
Jest to wartość referencyjna, wokół której budowana jest skala
scoringowa. Przyjęcie poziomu 500 punktów jest wygodne interpretacyjnie,
ponieważ pozwala uzyskać dodatnią, czytelną skalę punktową oraz
ogranicza ryzyko występowania bardzo niskich lub ujemnych wartości
score’u.
Parametr odds0 = 1 oznacza bazowy poziom odds, któremu
przypisana jest wartość points0. W modelu przyjęto odds
równe 1, czyli relację 1:1. Oznacza to punkt odniesienia, przy którym
prawdopodobieństwo wystąpienia klasy pozytywnej i negatywnej jest takie
samo. W analizowanym projekcie klasą pozytywną jest
customer_accept = 1, czyli zaakceptowanie oferty przez
klienta.
Parametr pdo = 50, czyli Points to Double the Odds,
określa, o ile punktów zmienia się score przy dwukrotnej zmianie odds.
Przyjęcie pdo = 50 oznacza, że dwukrotna zmiana odds
odpowiada zmianie punktacji o 50 punktów. Wartość ta zapewnia kompromis
między czytelnością skali a jej szczegółowością. Niższe wartości
pdo powodowałyby bardziej dynamiczne zmiany punktacji,
natomiast wyższe wartości prowadziłyby do bardziej rozciągniętej,
łagodniejszej skali.
Warto podkreślić, że parametry skalowania nie wpływają bezpośrednio
na jakość dyskryminacyjną modelu mierzoną za pomocą AUC i Giniego.
Wynika to z faktu, że AUC oraz Gini zależą przede wszystkim od
uporządkowania obserwacji według wyniku modelu, a nie od samej jednostki
skali. Zmiana parametrów points0, odds0 lub
pdo przekształca score w sposób monotoniczny, więc ranking
obserwacji pozostaje zasadniczo taki sam. Ewentualne niewielkie różnice
w Gini mogą wynikać z zaokrągleń punktów w karcie scoringowej.
W niniejszym modelu zastosowano następujące skalowanie:
points0 = 500,odds0 = 1,pdo = 50.Ponieważ projekt dotyczy response / acceptance scorecardu, wynik
końcowy interpretowany jest jako acceptance score.
Oznacza to, że wyższa wartość wyniku punktowego odpowiada większej
skłonności klienta do zaakceptowania oferty, czyli wystąpienia
customer_accept = 1.
W kodzie wynik pakietu scorecard przekształcono do
orientacji acceptance według wzoru:
acceptance_score = -raw_score
$basepoints variable bin woe points
$risk_group variable bin count count_distr neg pos posprob woe
$partner_ID variable bin count count_distr neg pos posprob woe
$loan_type variable bin count count_distr neg pos posprob woe
$FICO_score variable bin count count_distr neg pos posprob woe
$loan_amount variable bin count count_distr neg pos posprob
$refin_interest variable bin count count_distr neg pos posprob woe
$compet_interest variable bin count count_distr neg pos posprob
$cost_of_funds variable bin count count_distr neg pos posprob
$proposed_interest variable bin count count_distr neg pos posprob
$price_advantage variable bin count count_distr neg pos posprob
$refin_savings variable bin count count_distr neg pos posprob woe
$approx_installment variable bin count count_distr neg pos posprob
$is_refin variable bin count count_distr neg pos posprob woe
| Zbior | AUC | Gini | Ocena |
|---|---|---|---|
| Treningowy | 0.8413 | 0.6826 | bardzo dobra jakość dyskryminacyjna |
| Testowy | 0.8398 | 0.6795 | bardzo dobra jakość dyskryminacyjna |
| score_group | liczba_obserwacji | min_score | max_score | avg_score | accept_rate |
|---|---|---|---|---|---|
| 1 | 2800 | -936 | -767 | -821.6200 | 0.0104 |
| 2 | 2800 | -767 | -710 | -735.9432 | 0.0411 |
| 3 | 2800 | -710 | -676 | -690.2082 | 0.0629 |
| 4 | 2800 | -676 | -643 | -660.1157 | 0.0961 |
| 5 | 2800 | -643 | -616 | -628.3843 | 0.1375 |
| 6 | 2800 | -616 | -588 | -601.8875 | 0.1996 |
| 7 | 2800 | -588 | -549 | -568.3621 | 0.2918 |
| 8 | 2800 | -549 | -509 | -530.3868 | 0.3971 |
| 9 | 2800 | -508 | -450 | -481.2889 | 0.5914 |
| 10 | 2800 | -450 | -261 | -404.3479 | 0.7654 |
Jakość modelu oceniono na dwóch próbach: treningowej oraz testowej. Wynik na zbiorze treningowym informuje, jak dobrze model dopasował się do danych użytych w procesie uczenia. Wynik na zbiorze testowym pokazuje natomiast, jak model radzi sobie na obserwacjach niewykorzystanych podczas estymacji.
Kluczowe znaczenie ma porównanie AUC i Giniego między obiema próbami. Jeżeli wyniki na zbiorze testowym są zbliżone do wyników na zbiorze treningowym, oznacza to, że model generalizuje poprawnie i nie wykazuje silnych oznak przeuczenia. Wyraźny spadek jakości na zbiorze testowym mógłby natomiast sugerować nadmierne dopasowanie modelu do próby treningowej.
| Zmienna | Kubełek / bin | Liczba obserwacji | Udział obserwacji | Liczba 0 | Liczba 1 | Accept rate / event rate | WoE | IV binu | Punkty scorecard | Punkty acceptance |
|---|---|---|---|---|---|---|---|---|---|---|
| basepoints | Punkty bazowe | NA | NA | NA | NA | NA | NA | NA | 577 | -577 |
| risk_group | 1 | 12216 | 43.6% | 7957 | 4259 | 34.9% | 0.4245 | 0.0861 | -27 | 27 |
| risk_group | 2 | 5754 | 20.5% | 4520 | 1234 | 21.4% | -0.2488 | 0.0119 | 16 | -16 |
| risk_group | 3%,%4 | 10030 | 35.8% | 8262 | 1768 | 17.6% | -0.4923 | 0.0763 | 31 | -31 |
| partner_ID | 1 | 10372 | 37.0% | 7074 | 3298 | 31.8% | 0.2864 | 0.0324 | -24 | 24 |
| partner_ID | 2 | 4364 | 15.6% | 3996 | 368 | 8.4% | -1.3355 | 0.1896 | 112 | -112 |
| partner_ID | 3 | 13264 | 47.4% | 9669 | 3595 | 27.1% | 0.0601 | 0.0017 | -5 | 5 |
| loan_type | N | 9993 | 35.7% | 8815 | 1178 | 11.8% | -0.9631 | 0.2531 | 23 | -23 |
| loan_type | R | 7899 | 28.2% | 4660 | 3239 | 41.0% | 0.6857 | 0.1518 | -16 | 16 |
| loan_type | U | 10108 | 36.1% | 7264 | 2844 | 28.1% | 0.1118 | 0.0046 | -3 | 3 |
| FICO_score | [-Inf,645) | 707 | 2.5% | 515 | 192 | 27.2% | 0.0628 | 0.0001 | 2 | -2 |
| FICO_score | [645,690) | 7376 | 26.3% | 5855 | 1521 | 20.6% | -0.2984 | 0.0217 | -7 | 7 |
| FICO_score | [690,700) | 1987 | 7.1% | 1657 | 330 | 16.6% | -0.5642 | 0.0194 | -13 | 13 |
| FICO_score | [700,730) | 6485 | 23.2% | 4964 | 1521 | 23.5% | -0.1333 | 0.0040 | -3 | 3 |
| FICO_score | [730,770) | 6653 | 23.8% | 4368 | 2285 | 34.3% | 0.4016 | 0.0418 | 10 | -10 |
| FICO_score | [770, Inf) | 4792 | 17.1% | 3380 | 1412 | 29.5% | 0.1766 | 0.0056 | 4 | -4 |
| loan_amount | [-Inf,10000) | 2187 | 7.8% | 735 | 1452 | 66.4% | 1.7303 | 0.2847 | -63 | 63 |
| loan_amount | [10000,14000) | 2929 | 10.5% | 1372 | 1557 | 53.2% | 1.1760 | 0.1744 | -43 | 43 |
| loan_amount | [14000,20000) | 5638 | 20.1% | 3672 | 1966 | 34.9% | 0.4248 | 0.0398 | -15 | 15 |
| loan_amount | [20000,30000) | 8787 | 31.4% | 7137 | 1650 | 18.8% | -0.4150 | 0.0485 | 15 | -15 |
| loan_amount | [30000, Inf) | 8459 | 30.2% | 7823 | 636 | 7.5% | -1.4601 | 0.4229 | 53 | -53 |
| refin_interest | missing | 20101 | 71.8% | 16079 | 4022 | 20.0% | -0.3362 | 0.0744 | 6 | -6 |
| refin_interest | [-Inf,5.5) | 899 | 3.2% | 704 | 195 | 21.7% | -0.2343 | 0.0017 | 4 | -4 |
| refin_interest | [5.5,7) | 2176 | 7.8% | 1509 | 667 | 30.7% | 0.2331 | 0.0045 | -4 | 4 |
| refin_interest | [7,8) | 1340 | 4.8% | 781 | 559 | 41.7% | 0.7151 | 0.0281 | -12 | 12 |
| refin_interest | [8,13) | 2851 | 10.2% | 1467 | 1384 | 48.5% | 0.9913 | 0.1188 | -17 | 17 |
| refin_interest | [13, Inf) | 633 | 2.3% | 199 | 434 | 68.6% | 1.8292 | 0.0918 | -32 | 32 |
| compet_interest | [-Inf,3.9) | 1058 | 3.8% | 736 | 322 | 30.4% | 0.2228 | 0.0020 | -11 | 11 |
| compet_interest | [3.9,4.6) | 8011 | 28.6% | 6945 | 1066 | 13.3% | -0.8246 | 0.1551 | 40 | -40 |
| compet_interest | [4.6,5.3) | 11048 | 39.5% | 7901 | 3147 | 28.5% | 0.1290 | 0.0068 | -6 | 6 |
| compet_interest | [5.3,5.9) | 6626 | 23.7% | 4458 | 2168 | 32.7% | 0.3286 | 0.0275 | -16 | 16 |
| compet_interest | [5.9, Inf) | 1257 | 4.5% | 699 | 558 | 44.4% | 0.8242 | 0.0356 | -40 | 40 |
| cost_of_funds | [-Inf,1.14) | 7641 | 27.3% | 5586 | 2055 | 26.9% | 0.0495 | 0.0007 | -1 | 1 |
| cost_of_funds | [1.14,1.34) | 4048 | 14.5% | 3129 | 919 | 22.7% | -0.1757 | 0.0043 | 5 | -5 |
| cost_of_funds | [1.34,1.44) | 4274 | 15.3% | 3165 | 1109 | 25.9% | 0.0008 | 0.0000 | 0 | 0 |
| cost_of_funds | [1.44,1.46) | 400 | 1.4% | 310 | 90 | 22.5% | -0.1873 | 0.0005 | 6 | -6 |
| cost_of_funds | [1.46,1.64) | 4818 | 17.2% | 3433 | 1385 | 28.7% | 0.1418 | 0.0036 | -4 | 4 |
| cost_of_funds | [1.64,1.84) | 4387 | 15.7% | 3232 | 1155 | 26.3% | 0.0205 | 0.0001 | -1 | 1 |
| cost_of_funds | [1.84, Inf) | 2432 | 8.7% | 1884 | 548 | 22.5% | -0.1854 | 0.0028 | 6 | -6 |
| proposed_interest | [-Inf,3.8) | 550 | 2.0% | 322 | 228 | 41.5% | 0.7043 | 0.0112 | 10 | -10 |
| proposed_interest | [3.8,4.6) | 4795 | 17.1% | 3769 | 1026 | 21.4% | -0.2516 | 0.0102 | -3 | 3 |
| proposed_interest | [4.6,5.6) | 6586 | 23.5% | 3852 | 2734 | 41.5% | 0.7067 | 0.1348 | 10 | -10 |
| proposed_interest | [5.6,6.2) | 1509 | 5.4% | 1010 | 499 | 33.1% | 0.3444 | 0.0069 | 5 | -5 |
| proposed_interest | [6.2,7.8) | 6825 | 24.4% | 5289 | 1536 | 22.5% | -0.1869 | 0.0081 | -3 | 3 |
| proposed_interest | [7.8, Inf) | 7735 | 27.6% | 6497 | 1238 | 16.0% | -0.6083 | 0.0869 | -8 | 8 |
| price_advantage | [-Inf,-2.6) | 8262 | 29.5% | 7047 | 1215 | 14.7% | -0.7084 | 0.1222 | 52 | -52 |
| price_advantage | [-2.6,-1.4) | 4864 | 17.4% | 3863 | 1001 | 20.6% | -0.3009 | 0.0146 | 22 | -22 |
| price_advantage | [-1.4,0.6) | 14108 | 50.4% | 9424 | 4684 | 33.2% | 0.3504 | 0.0668 | -26 | 26 |
| price_advantage | [0.6, Inf) | 766 | 2.7% | 405 | 361 | 47.1% | 0.9345 | 0.0282 | -69 | 69 |
| refin_savings | missing | 20101 | 71.8% | 16079 | 4022 | 20.0% | -0.3362 | 0.0744 | 16 | -16 |
| refin_savings | [-Inf,0) | 1232 | 4.4% | 1101 | 131 | 10.6% | -1.0793 | 0.0378 | 50 | -50 |
| refin_savings | [0,1) | 1061 | 3.8% | 716 | 345 | 32.5% | 0.3194 | 0.0041 | -15 | 15 |
| refin_savings | [1,2.5) | 3300 | 11.8% | 1963 | 1337 | 40.5% | 0.6655 | 0.0595 | -31 | 31 |
| refin_savings | [2.5,5.5) | 1607 | 5.7% | 715 | 892 | 55.5% | 1.2707 | 0.1123 | -59 | 59 |
| refin_savings | [5.5, Inf) | 699 | 2.5% | 165 | 534 | 76.4% | 2.2239 | 0.1459 | -103 | 103 |
| approx_installment | [-Inf,240) | 4315 | 15.4% | 1822 | 2493 | 57.8% | 1.3631 | 0.3482 | -49 | 49 |
| approx_installment | [240,320) | 4535 | 16.2% | 2704 | 1831 | 40.4% | 0.6596 | 0.0803 | -24 | 24 |
| approx_installment | [320,400) | 4653 | 16.6% | 3370 | 1283 | 27.6% | 0.0838 | 0.0012 | -3 | 3 |
| approx_installment | [400,500) | 5546 | 19.8% | 4638 | 908 | 16.4% | -0.5813 | 0.0573 | 21 | -21 |
| approx_installment | [500, Inf) | 8951 | 32.0% | 8205 | 746 | 8.3% | -1.3483 | 0.3949 | 48 | -48 |
| is_refin | [-Inf,1) | 20101 | 71.8% | 16079 | 4022 | 20.0% | -0.3362 | 0.0744 | -22 | 22 |
| is_refin | [1, Inf) | 7899 | 28.2% | 4660 | 3239 | 41.0% | 0.6857 | 0.1518 | 45 | -45 |
Tabela przedstawia finalną kartę scoringową. Kolumna
Punkty scorecard zawiera wartości wygenerowane przez pakiet
scorecard, natomiast kolumna Punkty acceptance
pokazuje wynik w orientacji interpretacyjnej przyjętej w projekcie. W
tej wersji wyższy score oznacza większe prawdopodobieństwo akceptacji
oferty przez klienta.
Po utworzeniu karty scoringowej obiekt card zostaje
zapisany do pliku Amigos.rds. Ten plik jest następnie
wykorzystywany przez zewnętrzny skrypt scoringowy uruchamiany na zbiorze
testowym.