[데이터분석]/Python | AI | 머신러닝

[DACON] 고객 대출등급 분류 기본 학습

dowon 2024. 2. 27. 10:45

입사 후 이제 다시 데이터 분석 공부를 하고 있다

그동안 많이 까먹어서 기초부터 다시 시작해야했는데,

마침 데이콘에서 무료로 학습을 해주고 있어 데이콘을 이용하게 되었다

(혹시나 이 포스트가 문제가 된다면 바로 삭제할 예정이다!)

 

https://dacon.io/edu/46

 

고객 대출등급 분류 기본 학습 💰

 

dacon.io

 

프로젝트 난이도는 낮은 편에 속한다

 

이 순서대로 데이터 분석을 할 것이다

 

Fixed Random Seed

동일한 결과값을 위해 seed 값을 고정시킨다

import numpy as np
import random
import os

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

seed_everything(42)

 

데이터 불러오기 및 확인

1. train 데이터: AI모델을 학습하기 위해 사용하는 데이터

2. test 데이터: AI모델을 통해 정답을 예측하기 위해 사용하는 데이터

import pandas as pd

train_df = pd.read_csv('train.csv')
test_df = pd.read_csv('test.csv')

display(train_df.head(3))
display(train_df.head(3))

 

EDA

EDA (Exploratory Data Analysis) 

-탐색적 데이터 분석

-수집한 데이터가 들어왔을 때, 다양한 각도에서 관찰하고 이해하는 과정

-본격적 데이터 분석 전에 그래프나 통계적인 방법을 통해 자료를 확인하는 과정

-이상값 찾아내기 / 의미있는 상관관계 확인 

#시각화 패키지 불러오기
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

#한글 폰트 설정하기
fe = fm.FontEntry(fname = 'MaruBuri-Regular.otf', name = 'MaruBuri')
fm.fontManager.ttflist.insert(0, fe)
plt.rc('font', family = 'MaruBuri')

fig, axes = plt.subplots(2, 2, figsize = (25, 10))

sns.countplot(x = train_df['대출기간'], ax = axes[0][0]).set_title('대출기간')
sns.countplot(x = train_df['근로기간'], ax = axes[0][1]).set_title('근로기간')
sns.countplot(x = train_df['주택소유상태'], ax = axes[1][0]).set_title('주택소유상태')
sns.countplot(x = train_df['대출목적'], ax = axes[1][1]).set_title('대출목적')

plt.show()

 

데이터 전처리

학습 및 추론 데이터 설정

train_x = train_df.drop(columns = ['ID', '근로기간', '대출등급'])
train_y = train_df['대출등급']

test_x = test_df.drop(columns = ['ID', '근로기간'])

 

범주형 변수 수치화

-test에는 train에 존재하지 않는 새로운 사례가 있을 수 있기 때문에 append를 사용하여 새로운 경우를 알려줌

from sklearn.preprocessing import LabelEncoder

categorical_features = ['대출기간', '주택소유상태', '대출목적']

for i in categorical_features:
    le = LabelEncoder()
    le = le.fit(train_x[i])
    train_x[i] = le.transform(train_x[i])
    
    for case in np.unique(test_x[i]):
        if case not in le.classes_:
            le.classes_ = np.append(le.classes_, case)
    
    test_x[i] = le.transform(test_x[i])
    
display(train_x.head(3))
display(test_x.head(3))

 

모델 선정 및 학습

랜덤 포레스트 모델 사용

-하나의 결과에 도달하기 위해 여러 의사 결정 트리의 결과를 결합함

-분류와 회귀 문제를 모두 다루며 사용 편의성과 유연성이 뛰어난 모델임

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier()
model.fit(train_x, train_y)

 

예측 수행

pred = model.predict(test_x)

 

제출 양식에 예측 결과 입력

sample_submission = pd.read_csv('sample_submission.csv')
sample_submission['대출등급'] = pred
sample_submission

 

예측 결과 저장

-.to_csv() 사용 시 index = False 필수

-index = True 사용할 경우 index를 포함한 3개의 columns 가 파일에 포함되기 때문에 데이콘의 제출 양식과 상이하게 됨

sample_submission.to_csv('baseline_submit.csv', index=False)