Lending Club 데이터 전처리 기록
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개로 설정
- dti - 전처리 X
- loan_amnt - 전처리 X
- fico_range_high, fico_range_low → fico
- 평균값으로 대체
python code
- annual_inc 로그 변환 → annual_inc_log
- NaN 2개 행 제거
python code
로그변환 전후 시각화
- open_acc 로그 변환 → open_acc_log
- NaN 14개 행 제거(정상상환 13, 연체/부실 1)
로그변환 전후 시각화
- tax_liens 이진화 → tax_liens_bin
- NaN 70개 행 제거(정상상환 64, 연체/부실 6)
- 전체 데이터의 97%가 0의 값을 가지므로 이진화
python code
- revol_bal 로그 변환 → revol_bal_log
- 참고한 프로젝트에서는 revol_bal 변수를 이진화했다고 하는데, 기준이 모호하므로 로그 변환으로 변경
로그변환 전후 시각화
- pub_rec_bankruptcies 이진화 - pub_rec_bankruptcies_bin
- NaN 779개 행은 모두 0으로 대체 후, 더미 변수 추가
- have_info_pub_rec 이라는 더미 변수 추가
- 전체 데이터의 87%가 0의 값을 가지므로 이진화
python coce
- 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의 값을 가지므로 이진화
- revol_util → revol_util_log
- 350 이상인 이상치 한 행 제거 후 로그 변환
- 결측치 756개 직접 계산해서 대체
참고한 프로젝트에 전처리 방법 없음
시각화
연체/부실에서 튀는값 1개 제거
revol_util 계산식 = (revol_bal + total_rev_hi_lim) * 100
- total_acc 로그변환 → total_acc_log
로그 변환 시각화
- inq_last_6mths → inq_last_6mths_cat
원래 값 분포
0, 1, 2 회 이상 총 3개 그룹으로 변경
python code
- term
- emp_length
- home_ownership → home_ownership_simple
- ANY, OTHER, NONE 을 OTHER 로 묶음
- purpose
- addr_state
- mths_since_last_delinq → mths_since_last_delinq_cat
- 원래 분포
- 카테고리화 후
- mths_since_last_major_derog → mths_since_last_major_derog_cat
- 8개의 카테고리로 묶음
python code
카테고리화한 결과
- mths_since_last_record
- 8개의 카테고리로 묶음
python code
카테고리화한 결과
- mths_since_rcnt_il
- 4개의 카테고리로 묶음
- mths_since_recent_bc
- 5개의 카테고리로 묶음
python code
- mths_since_recent_bc_dlq
- 7개의 카테고리로 묵음
- mths_since_recent_inq
원래 값 분포
- mths_since_recent_revol_delinq
- 7개의 카테고리로 묶음
원래 값 분포