본문 바로가기
한국경제 with toss

한경 X Toss - semi project

by devmin67 2024. 9. 8.

이 글은 한경 x Toss bank 과정 중 진행한 semi project에 대한 전반적인 과정 및 맡은 역할(EDA)에 대한 리뷰입니다.

프로젝트 일정: 2024년 08월 19일 ~ 2024년 09월 06일

 


프로젝트  주제는 다음과 같습니다.

 

 


주제 선정이유: 카드사 순이익 약화로 인한 신규 고객 확보 필요

- 최근 카드사들은 신규고객확보를 필요로 하고 있고 그 중 특히 20대들의 금융이력이 부족한 연령대를 주로 확보하고자 합니다. 하지만 해당 연령층은 금융이력데이터가 부족한 관계로 신용카드 이용시 연체 위험도를 사전에 예측하기 어려우므로 제한된 금융 데이터를 바탕으로도 연체 위험도를 사전에 예측할 수 있는 방법에 대한 고찰이 본 프로젝트의 시작점이었습니다.

 

 

- AI Hub에서 금융합성 데이터를 이용했고, 방대한 데이터 중 실제 20대들의 금융이용 패턴을 고려해서

크게 3가지 정보(회원, 승인매출, 잔액)를 이용하기로 했습니다.

 


EDA

1. UserInfo 파일에 대한 EDA

 

20대의 연체 예측에 필요한 컬럼들을 선택한 이유는 다음과 같습니다:

1. 발급회원번호:

  • 이유: 연체 여부를 예측하는 모델에서 각 사용자를 고유하게 식별할 수 있는 정보는 필수적입니다. 발급회원번호는 개별 고객의 행동 패턴을 추적하고, 해당 고객이 과거에 연체한 기록이 있는지를 확인하는 데 중요한 변수입니다.

2. 남녀구분코드:

  • 이유: 성별은 연체 예측 모델에서 중요한 요소가 될 수 있습니다. 남성과 여성은 각기 다른 소비 패턴과 금융 습관을 가질 수 있으며, 이를 통해 연체 확률이 달라질 수 있습니다. 예를 들어, 연구에 따르면 특정 성별이 더 높은 연체율을 보일 수 있습니다.

3. 연령:

  • 이유: 연령은 연체 예측의 핵심 변수 중 하나입니다. 20대를 대상으로 한 연체 예측에서는 정확히 그 연령대의 고객만을 선택해 분석해야 합니다. 연령 정보는 나이에 따른 소비 습관과 경제적 안정성의 차이를 반영하므로, 연체 예측에서 중요한 역할을 합니다.

4. 거주시도명:

  • 이유: 고객의 거주지는 경제적 여건과 직결되는 요소입니다. 지역에 따라 물가, 생활비, 평균 소득 등이 다르기 때문에, 연체 예측에서 지역 정보는 중요한 변수로 작용할 수 있습니다. 예를 들어, 고소득 지역에 사는 고객이 더 낮은 연체율을 보일 가능성이 있습니다.

5. 직장시도명:

  • 이유: 고객의 직장 위치는 그들의 경제적 안정성을 반영할 수 있습니다. 직장 위치를 통해 출퇴근 시간과 관련된 정보나, 특정 지역의 고용 안정성 등을 추정할 수 있습니다. 직장이 없는 경우(예: 직장이 '없음'인 경우) 연체 위험이 높아질 수 있습니다.

6. Life_Stage:

  • 이유: 고객의 라이프 스테이지는 그들이 처한 경제적 상황을 나타내는 중요한 지표입니다. 20대 중에서도 싱글인지, 가족 형성기인지, 혹은 자녀 출산기인지에 따라 소비 패턴이 크게 달라질 수 있으며, 그에 따라 연체 가능성도 달라질 수 있습니다. 예를 들어, 자녀 출산기로 접어든 고객이 더 많은 경제적 부담을 가지고 있을 수 있습니다.

결론:

이 컬럼들은 20대의 연체 예측을 위해 필요한 중요한 요소들을 반영하고 있습니다. 각 컬럼은 개별 고객의 경제적 상황, 생활 패턴, 지역 특성 등을 종합적으로 고려하여 연체 가능성을 예측하는 데 중요한 역할을 합니다.

 

 

발급회원번호 컬럼의 데이터들을 추후 있을 모델링의 용이성을 위해 단순 숫자로 대체했습니다.\\

 

전처리 수행 이유:

  1. 범주형 데이터의 수치화:
    • 머신러닝 모델은 범주형 데이터를 직접 처리하지 못하는 경우가 많습니다. '서울', '부산', '대구' 등 문자열 형태의 지역명을 모델에 입력할 수 없기 때문에, 이를 수치형 데이터로 변환해야 합니다. 이 과정에서 각 지역을 숫자로 매핑하여 모델이 처리할 수 있게 준비합니다.
  2. 일관성 유지:
    • '거주시도명'은 분석에서 중요한 변수입니다. 지역에 따른 경제적 차이나 생활 환경의 차이가 연체 예측에 영향을 미칠 수 있으므로, 이 변수를 포함시키는 것은 합리적입니다. 또한, 지역 데이터를 일관성 있게 숫자로 변환하여 다른 수치형 데이터와 동일한 방식으로 처리할 수 있게 됩니다.
  3. 효율적 처리:
    • 문자열 데이터를 그대로 두면 메모리 사용량이 커지고, 모델의 학습 속도가 느려질 수 있습니다. 숫자로 변환함으로써 데이터의 메모리 사용량을 줄이고, 처리 속도를 높일 수 있습니다.
  4. 다양한 모델과의 호환성:
    • 일부 머신러닝 알고리즘(예: 결정 트리, 랜덤 포레스트)은 범주형 데이터를 다룰 수 있지만, 다른 모델(예: 선형 회귀, K-평균 클러스터링)은 범주형 데이터를 직접 처리하지 못합니다. 수치형 데이터로 변환하는 것은 다양한 모델에 적용할 수 있도록 데이터 전처리를 수행한 것입니다.

- 해당과정은 직장시도명 및 Life_stage 컬럼에 대해서도 진행했습니다.

 

 

2. CreditSales 파일에 대한 전처리

 

1. df_filtered_cleaned = df[df['이용금액_업종기준'] != 0]

  • 이유: 이 코드는 **'이용금액_업종기준'**이 0이 아닌 데이터만을 필터링하여 새로운 데이터프레임 df_filtered_cleaned를 생성합니다.
    • 필터링 이유: 연체 예측 또는 판매 분석을 할 때 **'이용금액_업종기준'**이 0인 경우는 실제로 거래가 이루어지지 않은 데이터를 나타낼 수 있습니다. 이러한 데이터는 모델링에 방해가 될 수 있으며, 분석의 목적에 부합하지 않기 때문에 0이 아닌 값만 필터링하여 실제 거래가 이루어진 데이터만 남깁니다.
  •  

2. df_filtered_cleaned.isnull().sum()

  • 이유: **결측치(null 값)**를 확인하기 위해 사용된 코드입니다.
    • 이 코드는 필터링된 데이터프레임에서 각 열에 존재하는 결측치의 개수를 확인하는 기능을 합니다. 결측값은 모델링 시 정확한 예측을 방해할 수 있기 때문에, 이를 미리 확인하고 적절히 처리할 필요가 있습니다.

종합적으로 수행한 이유:

  1. 필터링을 통해 유효한 데이터만 남김: '이용금액_업종기준'이 0인 데이터를 제거하여, 실제 거래가 있는 데이터만 분석에 사용될 수 있게 함.
  2. 결측치 확인: 결측값을 확인하여 데이터의 품질을 평가하고, 결측값을 적절히 처리하기 위한 사전 작업.

이 과정은 데이터의 정리 및 품질 관리를 위한 전처리 과정입니다. 이러한 과정을 거쳐 데이터 분석과 모델링의 정확성을 높일 수 있습니다.

원핫 인코딩

 

1. 업종에 따른 소비 패턴 분석

  • 이유: 20대의 경우 특정 업종에서의 소비 패턴이 연체 예측에 큰 영향을 미칠 수 있습니다. 예를 들어, 쇼핑, 교통, 납부 업종은 일상적인 지출을 반영하며, 이러한 지출 패턴이 지속적 또는 반복적으로 나타나면 연체 위험을 증가시킬 수 있습니다.
  • 1순위, 2순위, 3순위 업종을 선택한 이유는, 고객의 주요 지출이 어디에서 발생하는지를 확인하기 위함입니다. **가장 빈번한 지출(1순위)**을 중심으로, 연체 가능성을 파악하기 위해 2순위와 3순위 정보도 중요하게 활용됩니다.

2. 쇼핑 업종의 중요성

  • 이유: 20대는 상대적으로 소비 지향적인 연령대일 가능성이 높습니다. 쇼핑 업종에서의 지출이 많으면 경제적 부담이 커져 연체 가능성이 높아질 수 있습니다. 1순위 쇼핑업종이 중요한 이유는, 쇼핑이 주로 이루어지는 지출 항목이기 때문에 해당 업종에서의 사용 패턴이 연체를 예측하는 데 중요한 역할을 할 수 있습니다.
  • 2순위와 3순위 쇼핑업종은 주로 부차적인 소비 패턴을 반영하지만, 이들이 반복적으로 나타난다면 연체 위험의 중요한 지표가 될 수 있습니다.

3. 교통 업종의 분석

  • 이유: 교통비는 20대의 기본적인 생활비 중 하나로, 교통비 지출 패턴을 통해 경제적 여유를 어느 정도 파악할 수 있습니다. 1순위 교통업종이 중요하게 선택된 이유는, 일상적인 교통비가 소비 패턴을 대표하기 때문입니다.
  • 2순위와 3순위 교통업종은 부차적인 소비로서, 해당 지출이 지속적으로 발생하면 연체 위험이 커질 수 있습니다.

4. 납부 업종의 중요성

  • 이유: 납부 업종은 주로 고정비용(예: 공과금, 세금 등)을 의미합니다. 20대의 경우 고정비용을 제대로 관리하지 못할 경우 연체로 이어질 가능성이 높습니다. 1순위 납부업종은 이러한 고정비용이 집중적으로 지출되는 항목을 나타냅니다.
  • 2순위와 3순위 납부업종은 고정비용 중에서도 덜 중요한 항목이지만, 누적될 경우 연체 위험을 증가시킬 수 있습니다.

5. 원핫 인코딩 적용

  • 이유: 선택한 열들에 대해 원핫 인코딩을 적용한 것은, 범주형 데이터를 모델이 처리할 수 있는 형태로 변환하기 위함입니다. 각 업종의 소비 패턴을 수치화하여 모델에 적용할 수 있게 하려는 목적입니다.

결론:

이러한 열들을 선택한 이유는 20대의 주요 소비 패턴기본적인 생활 지출을 파악하여, 연체 가능성을 예측하는 데 사용하기 위함입니다. 특히, 쇼핑, 교통, 납부와 같은 업종의 소비 패턴은 20대의 연체 가능성에 중요한 영향을 미치는 변수로 작용할 수 있습니다.

 

선택된 열들:

  • RP건수_가스_BOM, RP건수_교통_BOM, RP건수_렌탈_BOM, RP건수_보험_BOM, RP건수_아파트_BOM 등.

이 열들은 고객이 해당 업종에서 발생시킨 거래 건수를 나타내며, 이를 통해 특정 업종에서의 지출 빈도를 파악할 수 있습니다. 이 데이터를 통해 연체 가능성을 예측하는 데 중요한 이유는 다음과 같습니다:

1. RP건수의 의미

  • 이유: RP건수는 해당 업종에서 정기적으로 발생하는 거래 건수를 의미할 수 있습니다. 예를 들어, 가스, 교통, 보험, 아파트 등은 모두 정기적인 지출 항목이므로, 이를 통해 고정 지출 패턴을 확인할 수 있습니다.
  • 정기적으로 발생하는 지출이 많을수록, 특히 이러한 항목들이 고정비용인 경우, 연체 위험이 높아질 수 있습니다. 20대가 이러한 고정비용을 제대로 관리하지 못할 경우 연체로 이어질 가능성이 높습니다.

2. 업종별 지출 빈도 분석

  • 이유: 각 업종에서의 RP건수는 고객의 지출 빈도를 반영합니다. 예를 들어, '가스', '교통', '전기' 등과 같은 기본 생활 관련 항목에서 RP건수가 높다면, 해당 고객이 지속적인 생활비 지출을 관리할 필요가 있음을 나타냅니다.
  • 20대의 경우, 이러한 기본 생활비를 제대로 관리하지 못하면 연체 위험이 커질 수 있습니다. 따라서 각 업종에서 발생한 거래 건수는 연체 예측에 중요한 지표가 됩니다.

3. 고정 지출의 관리

  • 이유: '보험', '렌탈', '아파트'와 같은 항목은 대부분 고정적인 지출에 해당합니다. 특히 20대가 아직 경제적으로 안정되지 않은 경우, 고정적인 지출을 관리하는 데 어려움을 겪을 수 있습니다. 이러한 고정 지출이 연체로 이어질 가능성이 높기 때문에, 해당 열들이 중요한 변수로 선택된 것입니다.

4. 다양한 업종에서의 소비 패턴

  • 이유: 다양한 업종에서 거래 빈도가 많은 경우, 20대가 여러 항목에 걸쳐 지출을 분산시키는 경향이 있을 수 있습니다. 하지만 이러한 지출이 누적되면, 결과적으로 재정적인 부담이 커져 연체로 이어질 수 있습니다. 이 때문에, 여러 업종에서의 RP건수를 분석함으로써 다양한 지출 항목이 연체 예측에 미치는 영향을 파악할 수 있습니다.

5. 연체 예측을 위한 인사이트

  • 20대의 경우, 주로 필수적인 지출 항목(가스, 교통, 전기 등)과 고정적인 계약 지출(보험, 렌탈, 아파트 등)을 제대로 관리하지 못할 경우 연체가 발생할 가능성이 큽니다. 이러한 항목들의 RP건수는 해당 고객이 어느 정도의 빈도로 지출을 하고 있는지를 파악하게 해주며, 이를 통해 재정적 부담이 누적되는 상황을 감지할 수 있습니다.

결론:

이 코드는 주로 20대의 고정비용 및 기본 생활비 지출 패턴을 분석하기 위한 것입니다. 고정비용을 제때 관리하지 못하면 연체로 이어질 가능성이 크므로, 다양한 업종에서의 **RP건수(BOM)**를 통해 연체 위험을 파악하고자 한 것입니다. 선택된 열들은 20대의 연체 예측에 중요한 역할을 하며, 생활비 관리 및 고정비용의 부담을 고려한 분석을 가능하게 합니다.

 

 

3. Balance(잔액)파일에 대한 전처리

 

  • target < 100000: 만약 target 값이 100,000보다 작은 경우, 이 값에 레이블 0을 할당합니다.
  • 100000 ≤ target < 1000000: 만약 target 값이 100,000 이상이고 1,000,000보다 작은 경우 레이블 1을 할당합니다.
  • target ≥ 1000000: 만약 target 값이 1,000,000 이상인 경우 레이블 2를 할당합니다.

목적: 이 함수는 잔액에 따라 데이터를 세 범주로 구분하는 역할을 합니다. 연체 예측 모델에서 잔액 크기에 따른 연체 위험을 평가하는 데 도움이 될 수 있습니다.

 

다음 부분에서는 df['잔액_BOM']이라는 열을 순회하면서 각 target 값에 대해 label_targets() 함수를 적용하여 레이블을 할당합니다. 그 결과는 새로운 열 **target**에 저장됩니다.

  • df['잔액_BOM']: 이 열은 아마도 고객의 잔액을 나타내는 데이터일 가능성이 큽니다. 잔액 정보에 따라 연체 위험을 예측하는 것이 목적일 수 있습니다.
  • **리스트 내포(list comprehension)**를 사용하여, 각 target 값을 함수에 전달하고, 그에 맞는 레이블(0, 1, 2)을 새로 생성된 열 'target'에 할당합니다.

목적: 최종적으로, 각 고객의 잔액 정보를 기준으로 타겟 레이블이 할당되며, 이 레이블은 머신러닝 모델에서 연체 가능성을 예측하는 데 사용될 수 있습니다.

 

 


해당과정까지가 본 프로젝트에서의 EDA전반에 대한 과정이었습니다.

다음 장에서는 PCA과정에 대해서 다루겠습니다.