본문 바로가기
취미

[금융 데이터] 고객 대출 등급 분류 모델 개발

by climb_JJIYO 2024. 1. 28.
반응형

금융 기관은 대출 심사를 효율적으로 수행하고 대출 등급을 정확히 분류하여 채무 불이행의 위험을 최소화해야 합니다. 이를 위해 머신러닝과 데이터 과학 기술이 활용되어 고객 대출 등급 분류 모델이 개발되고 있습니다. DACON의 고객 대출 등급 분류 해커톤에서 제공되는 데이터를 활용하여 이러한 모델을 개발하는 과정에 대해 알아보겠습니다.

고객 대출 등급 분류

분류 모델을 구축하기 위해서는 데이터 전처리가 필수적입니다. 데이터의 품질을 향상시키기 위해 컬럼 선택, 데이터 불균형 처리를 위한 SMOTE(Synthetic Minority Over-sampling Technique), 그리고 데이터 스케일링 등의 전처리 단계가 필요합니다. 이러한 전처리를 거친 데이터를 활용하여 모델을 학습하고, 고객 대출 등급을 정확하게 분류할 수 있는 모델을 개발합니다.

 

1. 필요 라이브러리 임포트, 시드고정, 데이터 불러오기

import numpy as np
import random
import os
import pandas as pd

from sklearn.model_selection import train_test_split

def seed_everything(seed):
    random.seed(seed)
    os.environ['PYTHONHASHSEED'] = str(seed)
    np.random.seed(seed)

seed_everything(42) # Seed 고정

train_df = pd.read_csv('./data/train.csv')

test_df = pd.read_csv('./data/test.csv')

 

2. 이상치 데이터 제거하기

# 주택소유상태 any인 경우 제외
train_df = train_df[train_df['주택소유상태'] != 'ANY']

 

3. 컬럼 선택하기

train_x = train_df.drop(columns=['ID','연간소득', '부채_대비_소득_비율', '근로기간','대출기간','대출등급','총연체금액','연체계좌수'])
train_y = train_df['대출등급']

test_x = test_df.drop(columns=['ID','연간소득', '부채_대비_소득_비율','대출기간','근로기간','총연체금액','연체계좌수'])

 

4. 범주형 데이터 인코딩하기

from sklearn.preprocessing import LabelEncoder
encoding = LabelEncoder()
train_y = encoding.fit_transform(train_df['대출등급'])

 

5. train, test 셋 분리하기

X_train, X_test, y_train, y_test = train_test_split(train_x, train_y, test_size=0.10, random_state=42,shuffle=True)

 

6. 데이터 불균형 처리하기

  • SMOTE 기법을 사용했습니다.
from collections import Counter 
counter = Counter(train_y)

from imblearn.over_sampling import SMOTE
smt = SMOTE()
X_new, y_new = smt.fit_resample(X_train, y_train)
counter = Counter(y_new)
print(counter)

 

7. 데이터 스케일링하기

  • Normalizer 방식을 적용했습니다.
# scaling
from sklearn.preprocessing import Normalizer

# Nomalizer scaled
std = Normalizer()
std.fit(X_new)
X_train_scaled = std.transform(X_new)
X_test_scaled = std.transform(X_test)

 

8. 최적의 모델 학습 파라미터 탐색하기

  • GridSearch를 통해 최적의 파라미터를 탐색합니다.
# gridSearch
from sklearn.model_selection import GridSearchCV

params = { 'n_estimators' : [10, 100],
           'max_depth' : [6, 8, 10, 12],
           'min_samples_leaf' : [8, 12, 18],
           'min_samples_split' : [8, 16, 20]
            }

grid_cv = GridSearchCV(model, param_grid = params, cv = 5, n_jobs = -1)

grid_cv.fit(X_train_scaled, y_new)

print(grid_cv.best_params_) # best parameter
print(grid_cv.best_score_)

 

9. 모델 학습 수행 및 모델 평가하기

  • 최적의 파라미터로 RandomForest 모델을 학습합니다.
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.ensemble import RandomForestClassifier

# best parameter로 모델 학습
rf_clf1 = RandomForestClassifier(n_estimators = 100, 
                                max_depth = 12,
                                min_samples_leaf = 8,
                                min_samples_split = 16,
                                random_state = 42,
                                n_jobs = -1)
rf_clf1.fit(X_train_scaled, y_new)
pred = rf_clf1.predict(X_test_scaled)

print(accuracy_score(y_test, pred))
print(classification_report(y_test, pred))

 

10. 피처 중요도 확인하기

  • 예측에 영향을 미치는 특징을 확인할 수 있습니다.
# 피처 중요도
ftr_importances_values = rf_clf1.feature_importances_
ftr_importances = pd.Series(ftr_importances_values, index = X_train.columns)
ftr_top20 = ftr_importances.sort_values(ascending=False)

 

결론적으로, 고객 대출 등급 분류 모델을 개발하기 위해 데이터 전처리와 모델 학습 단계를 수행하였습니다. 선택된 모델은 테스트 데이터에서 높은 성능을 보여주었으며, 실제 환경에서의 적용을 통해 고객의 대출 등급을 정확하게 분류할 수 있을 것으로 기대됩니다.

반응형