주제
3차 프로젝트 2일차
- 주제 선정 : 고객 대출 등급 분류 (데이콘)
- 역할 분담 : 각자 데이터 전처리부터 모델 성능 평가까지 처음부터 끝까지 혼자 해보는 방향으로 수행. 분담하기보다는 각자 과정을 오롯이 혼자 해보는 경험이 중요하다고 판단함
- 목적 : 고객의 연간소득, 대출금액, 상환이자 등의 금융 정보를 이용하여 대출 등급을 예측
- 오늘 한 일 : 데이터 확인 후 전체적인 탐색 진행, 탐색해보면서 해야하는 일 순서대로 정하기, 도메인 지식 쌓기(금융지식)
데이터 확인 및 탐색
- 데이터는 컴페티션 유형이기 때문에 train 데이터와 test 데이터가 주어짐
- 대출등급은 A부터 G까지 존재
- 훈련 데이터의 모습은 아래와 같다

- 정보는 다음과 같다

- 결측치와 중복값은 존재하지 않았다
- 다만 총상환원금과 총상환이자가 0인 데이터는 존재했다. 이 데이터를 어떻게 처리할 것인지는 추가적으로 고민을 해봐야 한다
- 기술통계 확인

데이터 전처리
- 우선 범주형 데이터 중 근로기간에 중복값들이 다른 포맷으로 존재하여 처리해주었다
# 근로기간 데이터 정리
train['근로기간'] = train['근로기간'].replace('1 years', '1 year')
train['근로기간'] = train['근로기간'].replace('<1 year', '< 1 year')
train['근로기간'] = train['근로기간'].replace('3', '3 years')
train['근로기간'] = train['근로기간'].replace('10+years', '10+ years')
train['근로기간'].unique()
- ID컬럼은 고객의 고유 식별아이디로 모델 학습에는 필요하지 않아 삭제하였다
# ID 컬럼 삭제
train.drop('ID', axis=1, inplace=True)
test.drop('ID', axis=1, inplace=True)
데이터 시각화
- 시각화는 수치형과 범주형을 나누어서 시도했다
- 수치형 데이터의 분포 확인
# 수치형 컬럼 시각화
from matplotlib import rc
rc('font', family='AppleGothic')
numerical_cols = ['대출금액', '연간소득', '부채_대비_소득_비율', '총계좌수', '최근_2년간_연체_횟수', '총상환원금', '총상환이자', '총연체금액', '연체계좌수']
plt.figure(figsize=(12, 8))
for i, col in enumerate(numerical_cols, 1):
plt.subplot(3, 3, i)
sns.histplot(data=train[col], bins=20, kde=True, edgecolor='black')
plt.title(col)
plt.xlabel('')
plt.ylabel('Count')
plt.tight_layout()
plt.show()

- 범주형 데이터 분포 확인
# 범주형 컬럼 시각화
categorical_cols = ['대출기간', '근로기간', '주택소유상태', '대출목적']
plt.figure(figsize=(12, 8))
for i, col in enumerate(categorical_cols, 1):
plt.subplot(2, 2, i)
sns.histplot(data=train[col], bins=20)
plt.xticks(rotation=45)
plt.title(col)
plt.xlabel('')
plt.ylabel('Count')
plt.tight_layout()
plt.show()

- 마지막으로 이번 모델의 타깃 레이블이 될 대출등급의 시각화이다
- B와 C 등급이 가장 많은 수를 차지하는 것을 확인할 수 있다

- 수치형 데이터에 대해서는 돈과 관련된 칼럼들은 단위가 굉장히 커서 분포 확인이 힘들다는 것을 발견
- 대부분 10^6정도의 범위이고 딱 떨어지는 10의 단위 숫자들임으로 로그 변환이 필요하다고 판단
- 하지만 데이터 중 0인 데이터가 존재하기 때문에 로그 변환하면 오류 발생
- 이를 해결하기 위해 0인 데이터에 대한 분석이 필요함
- 총상환원금이나 총상환이자가 0인 데이터를 모아서 0이 아닌 데이터들과의 비교를 해보고 숫자가 많지 않고, 큰 차이가 없다면 삭제하거나 평균으로 대체하는 방법을 선택하는 것이 좋을 것 같다는 생각
- 이상치에 대해서는 어떻게 처리해야하는지 공부가 더 필요함
- 해야할 것 단계별로 파악하기 :

느낀점
머신러닝 모델링에 있어서 가장 중요한 것은 전처리인데 전처리를 근거없이 진행해서도 안되니까 모델 훈련하고 성능 평가하는 것보다 EDA와 전처리 부분이 제일 오래 걸릴 것 같다는 생각을 했다. 최대한 목요일 회의까지 많이 해가고 싶은데 일단 오늘은 다양하게 시도해봐야겠다.
'Data Science > TIL (Today I Learned)' 카테고리의 다른 글
| 프로그래머스 데이터분석 데브코스 1기 - 59일차 (1) | 2024.02.15 |
|---|---|
| 프로그래머스 데이터분석 데브코스 1기 - 58일차 (1) | 2024.02.14 |
| 프로그래머스 데이터분석 데브코스 1기 - 56일차 (1) | 2024.02.12 |
| 프로그래머스 데이터분석 데브코스 1기 - 55일차 (0) | 2024.02.09 |
| 프로그래머스 데이터분석 데브코스 1기 - 54일차 (0) | 2024.02.08 |