Mi a hitelkockázat?

A hitelkockázat annak a lehetősége, hogy a hitelfelvevő nem tud időben fizetni, és nem teljesíti adósságát. Arra a lehetőségre utal, hogy a hitelező esetleg nem kapja meg időben a neki járó kamatot vagy tőkét.

A pénzügyi szervezetek aggódnak a nemteljesítés kockázatának csökkentése miatt. Ennek eredményeként a kereskedelmi és befektetési bankok, kockázatitőke-alapok, vagyonkezelő szervezetek és biztosítótársaságok – hogy csak néhányat említsünk – egyre inkább a technológiától függenek, hogy előre jelezzék, mely ügyfelek nem teljesítik a legnagyobb valószínűséggel kötelezettségeiket.

Mi az a hitelkockázati modellezés?

Egy személy hitelkockázatát számos dolog befolyásolja. Ennek eredményeként a hitelfelvevő hitelkockázatának meghatározása nehéz feladat. A hitelkockázat-modellezés azért jelent meg a színtéren, mert nagyon sok pénz függ attól, hogy képesek vagyunk-e megfelelően előre jelezni a hitelfelvevő hitelkockázatát.

A hitelkockázati modellezés az adatmodellek alkalmazásának gyakorlata két kulcstényező meghatározására. Az első annak a valószínűsége, hogy a hitelfelvevő nem teljesíti a kölcsönt. A második tényező a hitelező pénzügyi hatása a nemteljesítés esetén.

A pénzügyi szervezetek hitelkockázati modelleket használnak a potenciális hitelfelvevők hitelkockázatának felmérésére.

A pénzügyi rendszerben részt vevő vállalatok számára kritikus fontosságú az ügyfelek pénzügyi egészségének megőrzése. Azonban felmerülhet a kérdés, hogyan védheti meg minden ügyfél pénzügyi jólétét. A kihívásra adott válasz magában foglalja az egyes ügyfelek fizetési valószínűségének felmérését egy sor kritérium alapján, és taktikák kidolgozását az ügyfelek igényeinek előrejelzésére.

Ennek eredményeként a kutatás célja egy konkrét kötelezettség – jelen példában a hitelkártyák – nemteljesítési valószínűségének előrejelzése. Ez lehetővé teszi olyan megoldások létrehozását, amelyek csökkentik az ügyfél pénzügyi egészségi állapotának romlásának kockázatát. Javasoljuk továbbá, hogy klaszterezési technikákat alkalmazzanak a populáción belüli homogén részek lokalizálására, és ezáltal az egyes kliensek számára differenciált bánásmódot biztosítva a begyűjtési taktika kialakításának elősegítése érdekében.

A modell az alábbi eljárások szerint készül.

1. Adat-előkészítés és előfeldolgozás

2. Funkciótervezés és -kiválasztás

3. Modellfejlesztés és modellértékelés

Az Adatokról

Az adathalmaz a Kaggle "itt"-ből származik

Ez a tanulmány a nemteljesítés valószínűségének előrejelzett pontosságát elemzi hat adatbányászati ​​módszer között a fogyasztók nemteljesítési fizetése esetén Tajvanon. A nemteljesítés előrejelzett valószínűségének prediktív pontosságának eredménye a kockázatkezelés szempontjából előnyösebb, mint a besorolás – hiteles vagy nem hiteles ügyfelek – bináris eredménye. Mivel a nemteljesítés valódi valószínűsége ismeretlen, ez a tanulmány egy újszerű rendezési simító módszert használt ennek közelítésére. A válaszváltozó (Y) a nemteljesítés valós valószínűsége, míg a független változó a nemteljesítés előrejelzési esélye (X).

Változók:

LIMIT_BAL: Az adott hitel összege (NT dollár): magában foglalja mind az egyéni fogyasztási hitelt, mind a családi (kiegészítő) hitelt. NEM: Nem (1 = férfi; 2 = nő).

OKTATÁS: iskolai végzettség (1 = végzős iskola; 2 = egyetem; 3 = középiskola; 4 = egyéb).

HÁZASSÁG: Családi állapot (1 = házas; 2 = hajadon; 3 = elvált, 0 = egyéb).

AGE: Életkor (év).

PAY0 – PAY6: Korábbi fizetések előzményei. Az elmúlt havi fizetési rekordokat (2005. áprilistól szeptemberig) a következőképpen követtük nyomon: PAY0 = a törlesztési állapot 2005. szeptemberben; PAY1 = a visszafizetési állapot 2005 augusztusában; . . .;PAY6 = a törlesztési állapot 2005 áprilisában. A törlesztési állapot mérési skálája: -2: Nincs fogyasztás; -1: Teljesen kifizetve; 0: rulírozó hitel használata; 1 = egy hónapos fizetési késedelem; 2 = két hónapos fizetési késedelem; . . .; 8 = nyolc hónapos fizetési késedelem; 9 = fizetési késedelem legalább kilenc hónapig.

BILL_AMT1- BILL_AMT6: Számlakivonat összege (NT dollár). BILL_AMT1 = számlakivonat összege 2005. szeptemberben; BILL_AMT2 = számlakivonat összege 2005. augusztusban; . . .; BILL_AMT6 = számlakivonat összege 2005 áprilisában.

PAY_AMT1-PAY_AMT2: Az előző befizetés összege (NT dollár). PAY_AMT1 = 2005 szeptemberében kifizetett összeg; PAY_AMT2 = 2005 augusztusában kifizetett összeg; . . .; PAY_AMNT6 = 2005 áprilisában kifizetett összeg.

# Reading the data 
credit_risk= pd.read_csv("UCI_credit_card.csv")
credit_risk.head()

Adatok előkészítése és előfeldolgozása

Innen származtak a hitelkockázati modellezéshez szükséges adatok. Kezdetben az adatok összesen 25 tulajdonságot tártak fel. Kritikus, hogy az adatokat megfelelő formátumban tisztítsuk meg, mielőtt bármilyen gépi tanulási modellt kidolgoznánk.

Az „OKTATÁS” oszlop elemzése

OKTATÁS: (1=érettségi, 2=egyetemi, 3=gimnáziumi, 4=egyéb, 5=ismeretlen, 6=ismeretlen)

A megadott adatleírásból tudjuk, hogy a df.EDUCATION-ben az 5 és a 6 az „ismeretlen” értéket jelenti
A 0, 5 és 6 módosítása, hogy 1 kategória alatt maradjon.

df['EDUCATION'].replace({0:1,1:1,2:2,3:3,4:4,5:1,6:1}, inplace=True)
df.EDUCATION.value_counts()

A „HÁZASSÁG” oszlop elemzése

Családi állapot (1 = házas, 2 = hajadon, 3 = egyéb)

# lets see the values count in column marriage
df['MARRIAGE'].value_counts()

Itt leképezem a 0-t az 1-gyel.

df['MARRIAGE'].replace({0:1,1:1,2:2,3:3}, inplace=True)
df['MARRIAGE'].value_counts()

A „PAY_0 – PAY_6” oszlop elemzése

PAY_0: Törlesztési állapot 2005. szeptemberben (-1 = szabályosan fizet, 1 = fizetési késedelem egy hónapig, 2 = fizetési késedelem két hónapig, … 8 = fizetési késedelem nyolc hónapig, 9 = fizetési késedelem legalább kilenc hónapig)

Adatvizualizáció

Független szolgáltatások és függő szolgáltatások létrehozása

  • A független változók (más néven jellemzők) az elemzett folyamat bemenetei. A függő változók a folyamat kimenetei.
# Independnet features
X = df.drop(['default.payment.next.month'], axis=1)
# Dependent feature
y = df['default.payment.next.month']
X.head()

A funkciók skálázása

  • Az adatkészletünk összes változójának egy adott léptékre skálázásának vagy átalakításának folyamatát jellemzőskálázásnak nevezzük. A gradiens süllyedés optimalizálását egyes gépi tanulási módszerekben használják, például a lineáris regresszióban, a logisztikus regresszióban és másokban. Ahhoz, hogy ezek az algoritmusok megfelelően működjenek, az adatokat skálázni kell.
  • A szabványosítás az adatértékek olyan skálázásának folyamata, hogy azok elnyerjék a szabványos normál eloszlás tulajdonságait. Ez azt jelenti, hogy az adatok átskálázása oly módon történik, hogy az átlag nullává válik, és az adatok egységnyi szórással rendelkeznek.

from sklearn.preprocessing import StandardScaler
scaler= StandardScaler()
X= scaler.fit_transform(X)

Vonatteszt Split

  • A teljes adatkészlet (populáció) két csoportra oszlik: a vonatkészletre és a tesztkészletre. Az adatok felhasználási esettől függően 70-30-ra vagy 60-40-re, 75-25-re vagy 80-20-ra, sőt 50-50-re oszthatók. Általában a képzési adatok arányának nagyobbnak kell lennie, mint a tesztadatok arányának.

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test= train_test_split(X,y,test_size=0.20,random_state=42)

Osztályok kiegyensúlyozatlansága

  • A túlmintavételezési technikák esetében a SMOTE (Synthetic Minority Oversampling Technique) az egyik legnépszerűbb és legbefolyásosabb adatmintavételi algoritmus az ML és adatbányászat területén. A SMOTE esetében a kisebbségi osztály túlmintavételezése „szintetikus” példák létrehozásával történik, nem pedig helyettesítéssel [2]. Ezek a bevezetett szintetikus példák a meghatározott számú kisebbségi osztály legközelebbi szomszédját összekötő vonalszakaszok mentén alapulnak, amelyek a tanulási csomagban alapértelmezés szerint ötre vannak beállítva.
from imblearn.over_sampling import SMOTE
from collections import Counter

# summarize class distribution
print("Before oversampling: ",Counter(y_train))

# define oversampling strategy
SMOTE= SMOTE()

# fit and apply the transform 
X_train,y_train= SMOTE.fit_resample(X_train,y_train)

# summarize class distribution
print("After oversampling: ",Counter(y_train))

Épületmodell

  • Logisztikus regresszió
  • Véletlenszerű erdőosztályozó
  • XGBoost osztályozó
  • Keresztellenőrzés

Logisztikus regressziós modell

  • A logisztikus regresszió fő célja a jellemzők és egy adott eredmény valószínűsége közötti kapcsolat meghatározása.
  • A Sigmoid függvényt használta az adatok leképezésére.

from sklearn.linear_model import LogisticRegression
logit= LogisticRegression()
logit.fit(X_train, y_train)
# Predicting the model
pred_logit= logit.predict(X_test)

A logit modell értékelése

  • Pontosság: a helyes előrejelzések teljes számának aránya.
  • Pozitív prediktív érték vagy pontosság: a helyesen azonosított pozitív esetek aránya.
  • Negatív prediktív érték: a helyesen azonosított negatív esetek aránya.
  • Érzékenység vagy visszahívás: a helyesen azonosított tényleges pozitív esetek aránya.
  • Specifikusság: a helyesen azonosított tényleges negatív esetek aránya.

from sklearn.metrics import classification_report, accuracy_score, confusion_matrix, roc_auc_score, plot_confusion_matrix, plot_precision_recall_curve

print("The accuracy of logit model is:", accuracy_score(y_test, pred_logit))
print(classification_report(y_test, pred_logit))

Random Forest Classifer

1. lépés: Véletlenszerű erdőben n számú véletlenszerű rekordot veszünk a k számú rekordot tartalmazó adatkészletből.

2. lépés: Minden mintához egyedi döntési fákat készítünk.

3. lépés: Minden döntési fa kimenetet generál.

4. lépés: A végső eredményt a többségi szavazás vagy az átlagolás alapján kell figyelembe venni az osztályozás és a regresszió tekintetében.

from sklearn.ensemble import RandomForestClassifier
rf= RandomForestClassifier()
# Fitting the model
rf.fit(X_train,y_train)
# Predicting the model
pred_rf= rf.predict(X_test)

A Random Forest modell értékelése

print("The accuracy of logit model is:", accuracy_score(y_test, pred_rf))
print(classification_report(y_test,pred_rf ))

XGBoost osztályozó

  • Egy másik kiemelkedő növelési módszer az Extreme Gradient Boosting vagy az XGBoost. Az XGBoost a valóságban csak a GBM algoritmus finomított változata! Az XGBoost működése megegyezik a GBM-éval. Az XGBoostban a fák szekvenciális sorrendben készülnek, és minden fa megpróbálja kijavítani az előző fák hibáit.

import xgboost as xgb

xgb_clf= xgb.XGBClassifier()
#fitting the model
xgb_clf.fit(X_train,y_train)
## Predicting the model
xgb_predict= xgb_clf.predict(X_test)

Az Xgboost modell értékelése

A hiperparaméter hangolja az xgboost modellt

## Hyper Parameter Optimization

params={
 "learning_rate"    : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] ,
 "max_depth"        : [ 3, 4, 5, 6, 8, 10, 12, 15],
 "min_child_weight" : [ 1, 3, 5, 7 ],
 "gamma"            : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],
 "colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ]
    
}
## Hyperparameter optimization using RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV, GridSearchCV
random_search=RandomizedSearchCV(xgb_clf,param_distributions=params,n_iter=5,scoring='roc_auc',n_jobs=-1,cv=5,verbose=3)

# fitting the RandomizedSearchCV
random_search.fit(X_train,y_train)

Ezután megtaláljuk a legjobb becsléseket és paramétereket.

# Finding the best estimators
random_search.best_estimator_
# Finding the best param
random_search.best_params_

# Predicting model
y_pred= classifier.predict(X_test)

k-szeres Keresztellenőrzés

Extrapoláljuk az utolsó példát k-szeresre a 2-szeres keresztellenőrzésből. Most megpróbáljuk elképzelni, hogyan működik a k-szoros érvényesítés.

Ez egy hétszeres keresztellenőrzési eljárás.

Így működik: a teljes sokaságot 5 egyenlő mintára osztjuk. A modelleket most négy mintán (kék doboz) képezik ki, és egy mintán (sárga doboz) érvényesítik. A modellt ezután egy új mintával betanítják, amelyet a második iterációban érvényesítésként tartanak fenn. Mindegyik mintára 5 iterációban modellt dolgoztunk ki, és mindegyiket validálásnak tartottuk. Ez a módszer a szelekciós torzítás csökkentésére és az előrejelzési teljesítmény varianciájának csökkentésére szolgál. Ha mind az öt modellünk megvan, átlagoljuk a hibafeltételeket, hogy meghatározzuk, melyik a legjobb.

from sklearn.model_selection import cross_val_score
score=cross_val_score(classifier,X,y,cv=10)
score.mean()

Következtetés:

A hitelkockázati modellt python segítségével építettük fel. különböző gépi tanulási algoritmusokkal próbálkoztunk, pl. Logisztikai regresszió, Random Forest és Xgboost osztályozó. hiperparaméter hangolást és keresztellenőrzést is végeztünk. Az általunk elért modell végső pontossága 82% volt.

A teljes kódot a „Jegyzetfüzetben” találja.

Források:

Kövess engem

"LinkedIn"

"GitHub"