sol’s blog

Lending Club 데이터 전처리 기록

sol-commits
sol-commits Aug 1, 2025

1. 변환 없이 사용

  • dti, loan_amnt

2. 평균값으로 대체

  • fico : (fico_range_high + fico_range_low) / 2
    • 근거: 두 값의 차이가 5 또는 6으로 거의 일정

3. 로그 변환

  • annual_inc → annual_inc_log
    • 로그 변환, NaN 2개 제거
  • open_acc → open_acc_log
    • 로그 변환, NaN 14개 제거
  • revol_bal → revol_bal_log
    • 로그 변환(참고 우수사례는 이진화했으나 기준이 모호하므로 로그로 처리)
  • revol_util → revol_util_log
    • 이상치(350 이상) 한 행 제거, 로그 변환
  • total_acc → total_acc_log
    • 로그 변환, 튀는 값 1개 제거

4. 이진화

  • tax_liens → tax_liens_bin
    • NaN 70개 제거
  • pub_rec_bankruptcies → pub_rec_bankruptcies_bin
    • NaN은 0으로 대체하고 have_info_pub_rec 라는 더미변수 추가
  • collections_12_mths_ex_med → collections_12_mths_ex_med_bin
    • NaN 22개 행 제거(정상상환 14, 연체/부실 8)
    • 전체 데이터의 98%가 0의 값을 가지므로 이진화
  • delinq_2yrs 이진화 → delinq_2yrs_bin
    • 전체 데이터의 81%가 0의 값을 가지므로 이진화
  • pub_rec 이진화 → pub_rec_bin
    • 전체 데이터의 83.4%가 0의 값을 가지므로 이진화

5. 구간화(카테고리화)

  • inq_last_6mths → inq_last_6mths_cat
    • 0, 1, 2 이상 3개 그룹으로 구간화
  • home_ownership → home_ownership_simple
    • ANY, OTHER, NONE을 모두 OTHER로 묶음
  • mths_since_last_major_derog, mths_since_last_record, mths_since_rcnt_il, mths_since_recent_bc, mths_since_recent_bc_dlq, mths_since_recent_inq, mths_since_recent_revol_delinq 등
    • → 모두 연도별로 구간화(ex. ‘No Record’, ‘<1yr’, ‘1-2yr’, …, ‘6yr+’)

      → 카테고리 수는 분포를 고려해 4~9개로 설정

       
       
 
 
 
  1. dti - 전처리 X
  1. loan_amnt - 전처리 X
  1. fico_range_high, fico_range_low → fico
      • 평균값으로 대체
      python code
  1. annual_inc 로그 변환 → annual_inc_log
      • NaN 2개 행 제거
      python code
      로그변환 전후 시각화
  1. open_acc 로그 변환 → open_acc_log
      • NaN 14개 행 제거(정상상환 13, 연체/부실 1)
      로그변환 전후 시각화
  1. tax_liens 이진화 → tax_liens_bin
      • NaN 70개 행 제거(정상상환 64, 연체/부실 6)
      • 전체 데이터의 97%가 0의 값을 가지므로 이진화
      python code
  1. revol_bal 로그 변환 → revol_bal_log
      • 참고한 프로젝트에서는 revol_bal 변수를 이진화했다고 하는데, 기준이 모호하므로 로그 변환으로 변경
      로그변환 전후 시각화
  1. pub_rec_bankruptcies 이진화 - pub_rec_bankruptcies_bin
      • NaN 779개 행은 모두 0으로 대체 후, 더미 변수 추가
        • have_info_pub_rec 이라는 더미 변수 추가
      • 전체 데이터의 87%가 0의 값을 가지므로 이진화
      python coce
  1. collections_12_mths_ex_med 이진화 → collections_12_mths_ex_med_bin
      • NaN 22개 행 제거(정상상환 14, 연체/부실 8)
      • 전체 데이터의 98%가 0의 값을 가지므로 이진화
  1. delinq_2yrs 이진화 → delinq_2yrs_bin
      • 전체 데이터의 81%가 0의 값을 가지므로 이진화
  1. pub_rec 이진화 → pub_rec_bin
      • 전체 데이터의 83.4%가 0의 값을 가지므로 이진화
  1. revol_util → revol_util_log
    1. 참고한 프로젝트에 전처리 방법 없음
      • 350 이상인 이상치 한 행 제거 후 로그 변환
        • 시각화

          연체/부실에서 튀는값 1개 제거

      • 결측치 756개 직접 계산해서 대체
        • revol_util 계산식 = (revol_bal + total_rev_hi_lim) * 100
  1. total_acc 로그변환 → total_acc_log
    1. 로그 변환 시각화
  1. inq_last_6mths → inq_last_6mths_cat
    1. 원래 값 분포

      0, 1, 2 회 이상 총 3개 그룹으로 변경

      python code
  1. term
  1. emp_length
  1. home_ownership → home_ownership_simple
      • ANY, OTHER, NONE 을 OTHER 로 묶음
  1. purpose
  1. addr_state
  1. mths_since_last_delinq → mths_since_last_delinq_cat
      • 원래 분포
      • 카테고리화 후
       
  1. mths_since_last_major_derog → mths_since_last_major_derog_cat
      • 8개의 카테고리로 묶음
        • python code

          카테고리화한 결과

  1. mths_since_last_record
      • 8개의 카테고리로 묶음
        • python code

          카테고리화한 결과

  1. mths_since_rcnt_il
      • 4개의 카테고리로 묶음
  1. mths_since_recent_bc
      • 5개의 카테고리로 묶음
        • python code
  1. mths_since_recent_bc_dlq
      • 7개의 카테고리로 묵음
  1. mths_since_recent_inq
    1. 원래 값 분포
  1. mths_since_recent_revol_delinq
    1. 원래 값 분포
      • 7개의 카테고리로 묶음
 
 

추천 글

BlogPro logo
Made with BlogPro

태그