모델링 개요
- 데이터 탐색 (EDA)
- 가지고 있는 데이터로부터 통찰력(Insight)을 얻는다.
- 라벨(답)의 존재 유무
- 지도학습/비지도학습 결정
- 라벨의 형태
- 분류/회귀 모델 결정
- Base-Line 모델로 가장 간단한 머신러닝 모형 구현
- 아무런 설정없이 생성한 모델
- EDA 결과 확인을 위한 모델
- 모델 선택, 튜닝의 기준이 될 모델
- Base-Line 모델의 문제점을 파악하여 그것을 개선하는 방향으로 튜닝해 나간다.
문제에 대한 이해
- 현재 수입, 지출 등의 데이터에 대해 은행 자체의 분석을 진행하여 대출자가 미래에 돈을 갚을 수 있는지 확인
- 알고리즘 결과 : 일정 기간(2년) 내에 채무 불이행 여부
- 평가 지표 : roc_auc 점수
데이터 속성에 대한 이해
- SeriousDlqin2yrs
- 목표 변수
- 최근 2년 동안 90일 이상 연체한 적이 있는지 여부
- 값: 1 (연체한 적 있음), 0 (연체한 적 없음)
- RevolvingUtilizationOfUnsecuredLines
- 부동산과 할부 부채(installment debit)를 제외한 보유 자산 및 신용 대비 현재 운용할 수 있는 돈의 비율
- 전체 운용가능한 돈 대비 현재 운용가능한 돈의 비율
- Age
- 대출자의 나이
- NumberOfTime30-59DaysPastDueNotWorse
- 최근 2년 동안 30일 ~ 59일 연체한 횟수
- DebtRatio
- 전체수입 대비 월 부채 상환과 월 지출 합계의 비율
- MonthlyIncome
- 월 수입
- NumberOfOpenCreditLinesAndLoans
- 대출자가 보유중인 담보 대출 및 신용 대출 건수
- NumberOfTimes90DaysLate
- 과거 90일 이상 연체한 횟수
- NumberRealEstateLoansOrLines
- 주택 담보 대출을 포함한 부동산 담보 대출 건수
- NumberOfTime60-89DaysPastDueNotWorse
- 최근 2년간 60 ~ 89일 연체한 횟수
- NumberOfDependents
- 대출자를 제외한 부양가족 수
DATASET
데이터 불러오기
import pandas as pd
import numpy as np
data = pd.read_csv('data/cs_data.csv', encoding = 'utf-8', index_col=0)
data.info()
#칼럼명 소문자로 바꾸기
data.columns = [col.lower() for col in data.columns]
data.head(2)
데이터 전처리
결측값 처리
이상치 처리
IQR 기반 이상치 검출
- IQR : 3분위수-1분위수
- 이상치 기준 (rate는 일반적으로 1.5사용)
- 1분위수 + IQR*rate 보다 작은수
- 3분위 + IQR*rate 보다 큰수
def get_outlier(data, rate=1.5):
q1 = np.quantile(data, q=0.25)
q3 = np.quantile(data, q=0.75)
IOR = q3-q1
return (data > q1-IOR * rate) & (data<q3+IOR * rate)
컬럼별 이상치 처리
1. revolvingutilizationofunsecuredlines
2. age
3. numberoftime30-59dayspastduenotworse
- 30 ~ 59 간 연체한 횟수
- 96, 98 두개의 값을 가진 행을 제거
4. debtratio
- 소득 대비 부채비율(대출상환금+생활비/소득)
- 이상치가 아닌 값들 중 최대값으로 대체한다.
5. monthlyincome
- 월간 소득
- 이상치를 이상치 아닌 값들의 최대 값으로 대체한다.
6. numberofopencreditlinesandloans
- 대출자가 보유중인 담보 대출 및 신용 대출 건수
- 처리안함
7. numberoftimes90dayslate
- 90일 연체 횟수
8. numberrealestateloansorlines
- 주택 담보 대출을 포함한 부동산 담보 대출 건수
- 이상치인 값 54 제거
9. numberoftime60-89dayspastduenotworse
- 최근 2년간 60 ~ 89일 연체한 횟수
- 처리안함
10. numberofdependents
- 부양가족수
- 이상치(20) 제거
종속변수별 상관관계 확인
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(12,11))
ax = sns.heatmap(data.corr(), annot=True, fmt='.2f', linewidths=0.5, cmap='YlGnBu')
# print(ax.get_ylim())
ax.set_ylim(11,0)
plt.show()
삭제할 칼럼(타겟변수와 상관관계가 없는 변수)
- numberoftime60-89dayspastduenotworse : 상관관계가 0이다.
data.drop('numberoftime60-89dayspastduenotworse', axis=1, inplace=True)
data.columns
전처리한 데이터 저장
data.to_csv('data/data-v01.csv', index=False)
728x90
반응형
'Data Analysis & ML > Machine Learning' 카테고리의 다른 글
[Machine Learning][머신러닝] Bagging, Boosting 정리 (1) | 2021.03.12 |
---|---|
[Machine Learning][머신러닝] 대출위험도 예측모델링(모델링) (0) | 2020.09.08 |
[Machine Learning][머신러닝] 군집(Clustering) / K-Means Clustering (0) | 2020.09.07 |
[Machine Learning][머신러닝] 로지스틱 회귀(Logistic Regression) (0) | 2020.09.07 |
[Machine Learning][머신러닝] 회귀모델의 평가지표 (0) | 2020.09.04 |