24.02.19 TIL

예진·2024년 2월 19일
0

TIL

목록 보기
38/68

발표를 마치고 마지막 요약본을 읽어봤다..
많이 바뀌었지만 반영은 안함 ㅋ ㅋ ㅋ
모델링에 참여를 많이 안한 것 같아서 걱정했는데,
추가분석까지 피드백이 괜찮아서 다행이다.


  • 서론

    • 프로젝트 개요 : 고객 금융 데이터 활용한 대출 등급 분류
      고객 관련 금융 정보를 활용하여 대출의 등급을 분류하고 대출 등급에 영향을 미치는 변수를 파악하는 것을 목표로 한다.
      EDA 과정을 깊게 들여다보며 변수끼리 어떤 관계성을 지니고 있고, 타겟에 어떤 방식으로 영향을 미치는지 논리적으로 탐구한다.

    • 목적과 목표 설정 : 대출 등급 정의 및 고객 분류

      목적 : 고객 정보를 활용하여 대출등급 분류
      목표 : 세부 대출 등급 정의 및 고객 분류

      “주제 6번, 고객 금융 데이터를 활용한 대출 등급 분류 프로젝트입니다”

  • 목차
    1. 문제 정의
    • 주제 및 목표
    1. 전처리 및 EDA
    • 전처리
    • EDA
    1. 모델링
    • Feature Engineering
    • 1차 모델링 : 모델 선택
    • 2차 모델링 : Over Sampling
    • 3차 모델링 : 중요 변수 채택
    • 모델 검증
    1. 추가 분석
    • 중요 변수 분석
    • 이상 데이터 통계 분석
    1. 한계점 및 개선 사항
  • 데이터 수집
    • 데이터 수집 방법 🔥 https://dacon.io/competitions/official/236214/data
    • 수집한 데이터의 형식과 속성 설명 (3p 추가 )
      ColumnDtype
      IDobject
      대출금액int64
      대출기간object
      근로기간object
      주택소유상태object
      연간소득int64
      부채대비소득_비율float64
      총계좌수int64
      대출목적object
      최근2년간연체_횟수int64
      총상환원금int64
      총상환이자float64
      총연체금액float64
      연체계좌수float64
      대출등급object
    • 데이터 수집 과정에서의 어려움 및 해결책
  • 데이터 전처리
    1. 이상치 탐지 및 처리

      🔥 전처리 :
    • 대출 기간 : 문자형 데이터 숫자형으로 변환

    • 근로 기간 : 단위 통일 및 범주화

    • 대출 목적 : 비슷한 목적, 값이 작은 항목 묶어서 분류

    • 주택소유상태 : 불분명한 데이터(1개) 편입

      결측치 및 이상치 : 확인 결과 이상 없음 (정규화)

    1. 데이터 정규화 또는 표준화

      🔥 모델링을 위한 인코딩, 스케일링 범주형 데이터 : 대출기간 ; One-Hot Encoding 대출등급 : 라벨인코딩 수치형 데이터 : 로그 스케일링 (정규분포 형태로 변환)
  • EDA 등급별 컬럼별 분포 / 대출기간, 총상환원금, 총상환이자 확인
    대출등급 분포 : 총 개의 데이터로, 등급이 제일 많고 _등급이 제일 적다
    대출 기간 : 36 months, 60 months
    대출 등급별 : 대출 금액, 연간 소득, 총상환원금, 총상환이자
    등급이 높을 수록 대출 금액이 높을 거라는 예상과 달리 대출 금액이 낮아짐.
    등급이 높을 수록 연간 소득이 높음.
    등급이 낮을 수록 총상환원금에 비해 총상환이자가 높다.
    등급이 낮을 수록 RENT(전월세) 비율이 높고, 높을 수록 MORTGAGE, OWN 비율 높음.
    “이렇게 생긴 데이터 입니다!”
  • 모델링 - Feature Engineering
    • 범주형 전처리 : 원핫인코딩 / 라벨인코딩
      • 대출기간, 근로기간, 대출목적, 주택소유상태, 대출등급
    • 수치형 전처리 : 로그 스케일링
      • 대출금액, 연간소득, 총상환원금, 총상환이자

      • 로그스케일링 전

      • 로그스케일링 후

        → 총상환원금, 총상환이자 : 0이 두드러지게 나타남

        (추후 언급할 예정이라 이 파트에선 자세히 안다룸)

        ”스케일링 후 0에 몰려있는 값들 이상치로 판단 X”

  • 모델링 - 1차 모델링
    1차 모델링 : RAW 데이터 활용 / 모델 선택
    feature engineering 된 raw 데이터를 활용
    분류 모델 중 대표적인 4가지 추려 모델링
    XGB 가 가장 높게 나타남
    (4가지 모델 F1스코어 점수 비교 시각화)

“이러한 과정으로 XGboost 채택”

  • 모델링 - 2차 모델링

    2차 모델링 : 타겟 컬럼 불균형 , 오버샘플링?

    • 타켓 컬럼인 대출등급 분포 : 상위 등급이 대다수
    • 불균형 점수 : 68.61 ⇒ A등급이 G등급보다 약 68% 많다는 것을 의미 ⇒ 오버샘플링 필요
    • 오버샘플링
      • 오버샘플링 직후의 (raw data = o / 중요변수6개 아님)
      • train-oversampling 데이터 정확도 : 0.9061665616124989
      • test-oversampling 데이터 정확도: 0.8157364264234493
      • test-oversampling(weighted) F1-score: 0.8159218581552825
      • 신용과 상환, 연체 등 여러가지를 고려했을 때 "성실 납부"한사람과 "매번 연체" 한 사람의 대출 등급이 같을 수 없어야 함
      • 소득이 천차만별인 두 사람이 같은 한도의 대출이 가능하다면 합리적이지 못하다고 생각함
      • 은행 데이터인 것을 감안하여 불균형 자체의 필요성 언급 (대본 작성시 수정 필요)
  • 모델링 - 3차 모델링

    3차 모델링 : 중요변수 추출

    ⬆️ 변수 중요도 확인

    • 변수 중요도_상위 5개의 변수 추출

      • 대출금액, 대출기간, 총상환원금, 총상환이자, 연간소득
    • 총상환원금 ,총상환이자 중요도 높다고 판단 → 관련 파생변수 생성

      • 상환비율 = 총상환원금 / 대출금액
      • 상환능력과 직결되는 변수
    • 중요 변수 5개 + 상환비율(파생변수) 1개 => 총 6가지

      => 결과 95점

      (f1 score 시각화)

  • 모델링 - 모델검증 진행

    모델 검증 / Feature Importance 추가 설명

    • 검증 : K-FOLD

      테스트 데이터 교차 검증 정확도 - 평균 : 0.96, 표준편차 : 0.00

      표준편차가 0.01로 작음 > 일반적으로 안정적인 교차 검증 결과는 모델이 데이터에 대해 일관된 성능을 의미 (모델의 신뢰도 증가)

    • 검증 : 혼동행렬 (오차범위가 0일수록 좋다)

    • 검증 : 예측값과 실제값 비교

      => 우리 모델 이렇게나 좋아

      모델 성능평가 요약 “이러한 과정을 거쳐 점수가 높은 분류 모델을 만들 수 있었다”

      점수가 높은 모델을 찾고, 변수 중요도를 판별하는 등의 과정을 통해 성능을 높일 수 있음.

  • 추가 분석 : 중요 변수 분석 / 총상환금액 ‘0’데이터 통계분석

    1. 중요 변수 분석

      가설 : “대출 등급 분류에 상환비율이 가장 중요한 변수일 것이다”

      최종 모델 Feature Importance : 파생변수 였던 상환 비율, 총상환이자, 총상환원금이 중요변수로 확인

      최종 모델의 변수 중요도를 확인했을 때 대출 등급에 가장 영향을 많이 끼친 변수는 이 세 가지.

      대출 등급에 따른 총상환원금과 총상환이자의 평균값 :

      총상환원금과 총상환이자의 등급별 평균값을 살펴보면 다른 변수에 비해 변동이 큰 것을 확인할 수 있다.

      등급이 낮아질 수록 상환 원금은 줄어들고 상환 이자가 가파르게 상승한다.

      해당 그래프를 통해 대출 등급이 상환 능력과 밀접한 연관이 있으며, 상환 능력을 확인 할 수 있는 이 두 변수가 중요한 변수임을 알 수 있다.

      또한 변수 중요도 그래프의 가장 높은 점수를 차지하는 “상환비율” 역시 총상환금액과 총상환이자를 활용한 파생변수 이므로, 두 변수가 대출 등급을 분류하는데에 큰 비중을 차지한다는 근거가 될 수 있다.

    2. 총상환금액 ‘0’ 데이터 통계분석

      가설 : “총상환금액이 ‘0’인 고객은 상환능력이 부족할 것이다.”

      스케일링 당시 총상환금액 0인 데이터가 6000개나 되어 이상치 판단 여부에 대한 고민

      1) 연체 경험
      연체 경험이 있는 고객도 있고, 연체 경험이 없는 고객(납부일이 되지 않은 고객)도 존재.
      또한 원금을 상환하지 못하고 이자만 납부한 고객은 수가 거의 없었다.

      해당 데이터로는 상환금액이 없는 A그룹의 상환능력을 판단하기 어려움.

      2) 전체 데이터와 비교

      총상환금액 ‘0’인 고객을 A 그룹이라고 했을 때, A 그룹의 상환 능력을 판별할 변수 부족.

      EDA를 통해 전체 데이터 그룹과 A 그룹을 비교하니 전반적으로 큰 차이가 없음을 알 수 있었다.

      연간 소득도 전체 데이터와 A 그룹의 차이가 크지 않고 대출 기간이 더 길거나, 주택 소유 상태 또한 전월세 비율이 높거나 하는 등, A 그룹만의 특징 없음.

      따라서 A 그룹이 상환 능력이 부족한 그룹이라고 볼 수 없다.

      대출 시작 시점과 대출 등급 선정 시점이 비슷해 아직 납부일이 되지 않은 고객일 것으로 추측.

      총상환금액이 0인 고객의 대출 등급을 효과적으로 분류하기 위해서는 대출 시작 시점을 판별할 수 있는 컬럼 추가 필요.

  • 한계점 및 개선사항

    1. 과적합을 확인하기 위한 해결방안 부족.
    2. 등급 산정 시점과 대출 시작, 납부(만기) 시점에 대한 정보 부족.
profile
Data Analysis / 맨 땅에 헤딩

0개의 댓글