· kkoloda · 5 min

Uczenie maszynowe w bankowości - przewidywanie konwersji klientów dla produktu kredytowego

We współczesnej bankowości jednym z kluczowych wyzwań jest konwersja leadów - proces przekształcenia potencjalnych klientów w faktycznych użytkowników usług. Choć różnorodne działania marketingowe przyciągają wielu zainteresowanych, to z uwagi m.in. na silną konkurencję i podobieństwo ofert bankowych, tylko niewielki procent leadów przekształca się w rzeczywistych klientów. Identyfikując potencjalnych klientów, którzy z większym prawdopodobieństwem skorzystają z produktu, bank może efektywniej realizować kolejne działania, zwiększając w ten sposób współczynnik konwersji.

W projekcie wykorzystano dane indyjskiego banku, starającego się poprawić swoje wyniki dla konkretnego produktu kredytowego. Podstawowym zadaniem było oszacowanie prawdopodobieństwa wypłaty pożyczki. Wykorzystany zbiór danych zawiera informacje o potencjalnych klientach, takie jak płeć, datę urodzenia, miesięczny dochód czy nazwę pracodawcy, a także kwotę i inne szczegóły pożyczki, dane dotyczące interakcji i inne. Informacja o wypłacie pożyczki została określona w formie zmiennej binarnej 0/1. Główne problemy, jakie zidentyfikowano w danych, to wysoce niezbalansowane klasy, duża ilość brakujących wartości, zmienne o nieznanym znaczeniu oraz zmienne kategoryczne o licznych rzadkich kategoriach.

Podczas poszukiwania rozwiązania wykonano eksperymenty skupiające się na różnych aspektach przetwarzania danych oraz identyfikacji najefektywniejszych algorytmów. Implementacja rozwiązania opierała się głównie na bibliotece scikit-learn. Kompletny projekt znajduje się w repozytorium na githubie, a poniżej przedstawiono najważniejsze elementy jego realizacji.

Formalizacja celów projektu

Główny cel projektu: opracowanie procesu predykcyjnego zorientowanego na maksymalizację wartości ROC AUC.

W tym problemie istotna jest nie tyle klasyfikacja dokonywana przez model, co oszacowanie prawdopodobieństwa przypisania do pozytywnej klasy. Te prawdopodobieństwa są kluczowe w procesie podejmowania decyzji przez bank, kiedy bierze się pod uwagę dodatkowe czynniki.

Cel dodatkowy: identyfikacja optymalnego progu klasyfikacji, co nabiera znaczenia w sytuacjach, gdy algorytm ma samodzielnie podejmować decyzje.

Biorąc pod uwagę, że wyznaczenie progu klasyfikacji zależy od specyficznych czynników biznesowych, które nie są w tym przypadku znane, ustalono własne kryterium optymalności.

Niezbalansowane klasy w zmiennej celu

Jedynie 1.5% wartości w zmiennej celu to klasa pozytywna. W związku z tym zastosowano następujące strategie:

  • stratyfikowany względem zmiennej celu podział na część testową i treningową, stratyfikowane podziały w kroswalidacji,
  • w klasycznych klasyfikatorach (dostępnych w scikit-learn) zastosowano ważenie funkcji kosztu podczas uczenia (zwiększanie wagi klasy mniejszościowej),
  • zastosowano niestandardowe “zbalansowane” klasyfikatory z biblioteki imbalanced-learn, wykorzystujące resampling podczas tworzenia komitetów.

Zwiększenie wagi dla klasy mniejszościowej, jak i zastosowanie zbalansowanych klasyfikatorów, wydawało się mieć porównywalną skuteczność w tym problemie.

Brakujące wartości

Stwierdzono, że większość braków danych nie jest losowa i coś oznacza. Najwięcej brakujących wartości występowało w kolumnach dotyczących szczegółów pożyczki, takich jak jej kwota, okres spłaty, wysokość raty i prowizja; co więcej, występowały one w zestawach 2-4 kolumn. Dlatego uznano, że mogą one odzwierciedlać kolejne etapy aplikacji o pożyczkę, choć przejście ich wszystkich nie było koniecznym warunkiem do jej otrzymania. Przetestowano różne strategie obsługi braków:

  • uzupełnienie braków wartością spoza zakresu (dla algorytmów drzewiastych),
  • użycie algorytmów obsługujących brakujące wartości,
  • metody wykorzystujące algorytmy uczenia maszynowego do przewidywania brakujących wartości (implementowane przez klasy KNNImputer i IterativeImputer w scikit-learn),
  • metody mieszane, na przykład liczne braki w kolumnie informującej o ostatecznej rozpatrywanej kwocie i okresie trwania pożyczki uzupełniono kwotą i okresem, o które zaaplikował klient; pozostałe braki uzupełniono wartością spoza zakresu.

Najlepsze efekty przynosiło – w zależności od modelu – niedokonywanie imputacji lub uzupełnienie wartością spoza zakresu.

Zmienne kategoryczne

Do modelowania użyto 9 spośród 13 zmiennych kategorycznych (pozostałe uznano za niemające logicznego sensu w predykcji). Niektóre z nich charakteryzowały się występowaniem rzadkich kategorii, dlatego przetestowano grupowanie ich według różnych progów częstości występowania. Dodatkowy sposób grupowania sprawdzono w przypadku zmiennej informującej o miejscu zamieszkania - wykorzystano zewnętrzne informacje na temat klasyfikacji indyjskich miast według wielkości populacji i na tej podstawie przydzielono nowe kategorie. Do zakodowania kategorii testowano warianty wykorzystujące techniki one-hot encoding oraz target encoding.

W przypadku kolumny z nazwą pracodawcy, oprócz braków danych zidentyfikowano liczne nieprawidłowe wartości, które także potraktowano jako braki. Ze względu na ogromną ilość unikalnych wartości, pozostawiono jedynie informację czy pracodawca został określony, czy nie.

Zmienne o nieznanym znaczeniu

Ponieważ część zmiennych kategorycznych i numerycznych zawierała informacje zakodowane przez bank, określono ważności zmiennych oraz sprawdzono działanie testowanych algorytmów wraz z selekcją zmiennych na podstawie różnych progów ważności. Stwierdzono, że usunięcie niektórych cech – nie tylko tych o nieznanym znaczeniu - może poprawiać wyniki u części modeli, dlatego w ostatecznej optymalizacji sprawdzono także usuwanie tych najmniej ważnych.

W ramach eksperymentów początkowo poddano ocenie siedem różnych klasyfikatorów. Ostatecznie, na etapie finalnych testów skoncentrowano się na czterech, które wykazywały najwyższą skuteczność. Ze względu na dużą ilość kombinacji parametrów do zoptymalizowania (hiperparametry modeli i przekształcenia danych), do optymalizacji zastosowano randomizowaną optymalizację hiperparametrów (dostępną w scikit-learn jako klasa RandomizedSearchCV). Z tego powodu, w kolejnych przeszukiwaniach obserwowano zmienność w wynikach oraz ostatecznej konfiguracji parametrów. Uznano, że wszystkie cztery modele zachowują się podobnie i mogą być porównywalnie skuteczne – wszystkie osiągały ROC AUC w zakresie 0.84 – 0.85, a ranking wyników zmieniał się w kolejnych eksperymentach. Żaden z modeli nie okazał się jednak przekonująco skutecznym klasyfikatorem, niezależnie od przyjętego progu klasyfikacji.

W projekcie przeprowadzono szeroko zakrojone eksperymenty pokrywające zarówno różne warianty przetwarzania danych oraz różnorodne algorytmy predykcyjne. Rozwiązanie to mogłoby służyć jako obiecujący punkt wyjścia do dalszych działań banku na rzecz zwiększenia współczynnika konwersji klientów. Należy jednak zauważyć, że z uwagi na skupienie na komitetach drzew decyzyjnych, interesujące byłoby przeprowadzenie dalszych badań z wykorzystaniem innych rodzajów modeli. Wśród wartych przetestowania innych wariantów przekształcania danych, wymienić można zastosowanie kolejnych technik repróbkowania lub augmentacji w kontekście niezbalansowanych klas, czy poszerzenie eksperymentów o redukcję wymiarowości.


Interesuje Cię sztuczna inteligencja i chcesz zdobyć umiejętności, które pozwalają na rozwijanie podobnych projektów? Sprawdź ofertę naszego topowego kursu Data Science PRO, który ukończyła Kasia, i nadaj rozpęd swojej karierze!

Powrót do bloga