대출 데이터의 결측값 위험

Python을 활용한 신용 위험 모델링

Michael Crabtree

Data Scientist, Ford Motor Company

결측 데이터란?

  • 실제 값 대신 행에 NULL이 들어 있는 경우
  • 빈 문자열 ''인 경우
  • 행 전체가 비어 있지 않은 경우
  • 데이터의 어떤 열에서도 발생할 수 있음

재직 기간이 누락된 데이터프레임 샘플

Python을 활용한 신용 위험 모델링

이상치와의 유사점

  • Machine Learning 모델 성능에 부정적인 영향을 미침
  • 예상치 못한 방식으로 모델에 편향을 일으킬 수 있음
  • 일부 Machine Learning 모델에서 오류를 일으킬 수 있음
Python을 활용한 신용 위험 모델링

이상치와의 유사점

  • Machine Learning 모델 성능에 부정적인 영향을 미침
  • 예상치 못한 방식으로 모델에 편향을 일으킬 수 있음
  • 일부 Machine Learning 모델에서 오류를 일으킬 수 있음
결측 데이터 유형 발생 가능한 결과
숫자형 열의 NULL 오류
문자형 열의 NULL 오류
Python을 활용한 신용 위험 모델링

결측 데이터 처리 방법

  • 결측 데이터를 처리하는 방법은 일반적으로 세 가지
    • 결측값이 있는 데이터를 다른 값으로 대체
    • 결측 데이터가 포함된 행 제거
    • 결측 데이터가 있는 행을 그대로 유지
  • 데이터를 이해해야 적절한 조치를 결정할 수 있음
Python을 활용한 신용 위험 모델링

결측 데이터 처리 방법

  • 결측 데이터를 처리하는 방법은 일반적으로 세 가지
    • 결측값이 있는 데이터를 다른 값으로 대체
    • 결측 데이터가 포함된 행 제거
    • 결측 데이터가 있는 행을 그대로 유지
  • 데이터를 이해해야 적절한 조치를 결정할 수 있음
결측 데이터 해석 조치
loan_status의 NULL 최근 승인된 대출 예측 데이터에서 제거
person_age의 NULL 나이가 기록되지 않거나 공개되지 않음 중간값으로 대체
Python을 활용한 신용 위험 모델링

결측 데이터 찾기

  • isnull() 함수로 널 값을 쉽게 찾을 수 있음
  • sum() 함수로 널 레코드 개수를 쉽게 셀 수 있음
  • .any() 메서드는 모든 열을 검사함
null_columns = cr_loan.columns[cr_loan.isnull().any()]
cr_loan[null_columns].isnull().sum()
# Total number of null values per column
person_home_ownership          25
person_emp_length             895
loan_intent                    25
loan_int_rate                3140
cb_person_default_on_file      15
Python을 활용한 신용 위험 모델링

결측 데이터 대체하기

  • 집계 함수 및 메서드와 함께 .fillna() 같은 방법으로 결측 데이터를 대체
cr_loan['loan_int_rate'].fillna((cr_loan['loan_int_rate'].mean()), inplace = True)

누락된 이자율을 평균값으로 대체한 예시

Python을 활용한 신용 위험 모델링

결측 데이터 삭제하기

  • 이상치와 동일하게 인덱스를 사용해 레코드를 식별함
  • .drop() 메서드로 레코드를 완전히 제거
indices = cr_loan[cr_loan['person_emp_length'].isnull()].index
cr_loan.drop(indices, inplace=True)
Python을 활용한 신용 위험 모델링

연습해 봅시다!

Python을 활용한 신용 위험 모델링

Preparing Video For Download...