[Kaggle] Home Credit Default Risk — Part 1

Sunwoo Park
Almighty Data Science Bootcamp
10 min readJun 7, 2018

Can you predict how capable each applicant is of repaying a loan?

배경 이해하기

Home Credit 은 1997년 체코에서 설립된 국제적인 비은행 금융 기관입니다. 14개국에서 운영되고 있으며, 신용기록이 적거나 전혀 없는 사람들을 대상으로한 대출에 중점을 두고있습니다. 보통 신용기록이 없는 사람들은 안정적인 금융권에서 대출을 받는데 어려움이 많아 고리의 대출을 이용하게 됩니다. Home Credit에서는 다양한 대체 데이터(통신 혹은 거래정보 등)와 다양한 통계 및 머신러닝 기법을 활용해 고객의 상환 능력을 예측하여 이런 사람들에게도 긍정적인 대출 경험을 제공하려 노력하고 있습니다.

Home Credit에서는 2018년 5월 18일부터 8월 29일까지 캐글을 통해 “Home Credit Default Risk”라는 대회를 진행하고 있습니다. Home Credit은 본 대회를 통해 상환할 수 있는 고객의 대출 신청을 거절하지 않고, 고객이 충분히 상환할 수 있는 적절한 원금, 만기 및 상환일정을 예측하는 등 데이터의 잠재력을 끌어낼 수 있기를 바란다고 합니다.

앞으로 한 달에 걸쳐 본 대회에 참여하며 배운 내용을 공유하고자 합니다. 그 첫번째가 될 이번 글에서는 아래와 같은 내용을 다루고자 합니다.

(1) Brief EDA on a main dataset
대회의 메인 데이터셋인 “application_train.csv”를 중심으로 진행된 탐색적 데이터 분석(EDA) 내용을 소개합니다. 이 메인 데이터셋 외에도 6가지 데이터셋이 제공되고 있는데, 이번에는 메인 데이터셋을 대략적으로 살펴보려고 합니다.

(2) Baseline setting
앞으로 대회 참여를 진행하며 반복적으로 사용하게 될 베이스라인(Baseline) 세팅 방법을 공유합니다.

(1) Brief EDA on a main dataset

이 대회의 중심이 되는 데이터셋은 신청한 대출의 기본 내용, 신청자에 대한 정보, 그리고 대출 상환을 제공하는 ‘Application_train’과 ‘Application_test’ 데이터셋입니다. 대회의 최종 결과로는 Application_test 데이터 셋에 있는 각SK_ID_CURR의 “TARGET” 변수에 대한 확률을 예측하여 제출해야 합니다. 즉, 각 대출지원자가 대출 상환에 어려움을 겪을 것인지, 아닌지를 예측하는 문제로, 전형적인 분류문제에 해당됩니다.

종속변수: TARGET

Application_train.csv에서 파악할 수 있는 TARGET 변수는 1 또는 0으로 표시되어 있습니다. 1은 예정된 상환일을 지체하여 상환에 어려움을 겪은 경우, 0은 그 외의 경우(정상적으로 상환한 경우)를 의미합니다. TARGET 변수의 분포를 보면, 1인 경우는 전체 중 8% 정도로 나타는데, 이를 통해 굉장히 불균형(highly unbalance)한 데이터임을 알 수 있습니다. 따라서 교차검증을 위한 샘플링을 할 때 주의해야 합니다(아래 SMOTE 내용 참고).

독립변수

데이터 설명서(data description)을 보면 120개가 넘는 변수를 보고 너무 많아 당황할 수 있습니다. 하지만 설명을 잘 읽어보면, 독립변수를 크게다음과 같은 6가지 범주로 나누어 볼 수 있습니다.

  1. 인구통계적 특성
  2. 직업 및 소득 관련특성
  3. 기본 자산 현황
  4. 거주지 관련 특성
  5. 외부 신용평가 자료
  6. 신청한 대출의 특성

이번 글에서는 인구통계적 특성, 직업 및 소득 관련특성, 기본 자산 현황을 먼저 살펴보겠습니다.

1. 인구통계적 특성

신청자의 인구통계적 특성을 파악할 수 있는 변수부터 살펴보겠습니다.

1.1. 성별(CODE_GENDER)
대출은 여자가 더 많이 받으나 미상환 비율은 남자 그룹에서 더높게 나타났습니다(남: 10%, 여: 7%).

1.2. 나이 (DAYS_BIRTH)
본 데이터셋에는 “DAYS_BIRTH” 외에도 DAYS_EMPLOYED 등 “DAYS_”로 시작되는 변수가 몇 가지 있습니다. 이런 변수들은 “대출 신청 시점- 해당 사건 발생 시점”으로 계산하기 때문에 마이너스(-) 형태로 표시됨에 주의해야 합니다. 모든 행의 값이 동일한 형태라 변환하지않아도 될 것이라 판단할 수도 있겠지만, 일수로 계산된 변수를 연수로 변환하는 것도 변수를 다양하게 활용하는 방법이 됩니다. 가령, 이 변수(DAYS_BIRTH)를 양수로 바꾸고 365로 나누게 되면 나이가 계산되고, 이를 10살 씩 묶게 되면, 연령대를 파악할 수 있습니다. 이렇게 연령대 변수를 만들어 다른 변수들에 대해 연령대별 특성이 어떻게 나타나는지 분석이 가능해집니다. 상환에 어려움을 겪는 그룹(TARGET = 1)에서는 20대의 비중이 높은 것으로 나타났습니다.

1.3. 가족 구성
대출 신청자의 가족 구성에 대한 정보는 “NAME_FAMILY_STATUS”, “CNT_FAM_MEMBERS”, “CNT_CHILDREN” 등의 변수를 통해 파악할 수 있습니다. 전체적으로 기혼인(Married), 가족 구성원은 2인인, 자녀는 없는 (결혼을 안 한 경우 포함) 대출 신청자가 많았습니다.

1.4. 교육수준 (NAME_EDUCATION_TYPE)
전반적으로 중등교육(Secondary / secondary special) 정도의 수준을 받은 사람들이 대출을 많이 신청했고, 교육수준이 낮은 그룹일수록 그룹 내 상환에 어려움을 겪는 비중(TARGET =1인 비중)도 높게 나타났습니다.

2. 직업 및 소득관련

2.1. 직업 유형 (OCCUPATION_TYPE)
저숙련 노동자(Low-skill Laborers)는 전체 대출자에서 차지하는 비중은 많지 않으나, 상환에 어려움을 겪는 비중이 가장 높은 그룹으로 나타났습니다.

2.2 고용 기간 (DAYS_EMPLOYED)
상환에 어려움을 겪는 그룹에는 근속연수가 낮은(7년 이하) 신청자가 많은 것으로 나타났습니다.

이외에도 직업 및 소득 관련 변수로는 소득 유형(NAME_INCOME_TYPE), 소득 수준(AMT_INCOME_TOTAL), 조직 유형(ORGANIZATION_TYPE) 등의 변수가 있습니다. 소득유형이나 조직유형은 범주형 데이터에 해당하는데, 각 변수가 매우 많은 하위 레벨(level)로 구성되어 있어, 이들의 특성을 자세히 살펴보고 그룹핑을 할 필요가 있습니다.

3. 기본 자산 현황

3.1 차량소유 여부(FLAG_OWN_CAR)
3.2 부동산 소유 여부(FLAG_OWN_REALTY)

차량이나 부동산 등 자산 유무에 따른 상환 문제 발생 비율은 거의 비슷하게 나타나긴 했으나, 전반적으로 자산이 없는 그룹에서 상환에 문제가 발생할 비율이 더 높았습니다. 이 두 가지 자산의 보유여부를 다시 조합하면 아래와 같이 4가지 그룹을 만들어볼 수 있습니다.

  • NO_CAR_NO_REALTY = 미상환 문제 발생 비율 8.99% (가장 높음)
  • NO_CAR_YES_REALTY = 미상환 문제 발생 비율 8.28%
  • YES_CAR_NO_REALTY = 미상환 문제 발생 비율 7.04%
  • YES_CAR_YES_REALTY = 미상환 문제 발생 비율 7.33%

특이한 점은 부동산을 보유했건, 하지 않았건 차량을 보유하지 않은 경우 상환에 문제가 발생한 비율이 높은 것으로 나타났습니다. 부동산의 가격이 높지않거나 REALTY의 형태가 우리가 생각하는것과는 조금 다를수도 있겠다는 생각이 듭니다. 신청자가 거주한 지역의 특성을 파악해 보유한 부동산의 가격을 대략적으로 파악해보는 추가 분석이 필요할 것 같습니다.

3.3. 자동차 연식(OWN_CAR_AGE)

자동차의 연식에 대한 분포를 살펴보면, 10을 중심으로 한 분포와 63 정도를 중심으로 한 분포, 크게 둘로 나뉘는 것을 확인할 수 있습니다. 데이터 설명서에 자세한 설명은 나오지 않으나, 여기서 AGE를 나타내는 숫자는 ‘년수’가 아니라 ‘개월 수’라고 보는 것이 타당하지 않을까 합니다. 어쨌든 문제없이 잘 상환한 그룹(TARGET = 0)에서는 비교적 새차를 가진 비율이 높은 것으로 나타났습니다.

3.4. 각종 연락망 보유 여부

유선전화, 핸드폰, 이메일, 직장 전화번호 등 다양한 연락처 보유 여부 역시 확인할 수 있었습니다(FLAG_MOBIL, FLAG_EMP_PHONE, FLAG_WORK_PHONE, FLAG_CONT_MOBILE, FLAG_PHONE, FLAG_EMAIL 등). 그러나 보유 여부에 따라 상환에 문제가 발생하는 비율은 크게 차이가 나지 않았습니다. 연락망 수를 합쳐서 연락망 수에 따른 문제 발생 비율도 비교해보았으나 역시 큰 차이는 없는 것으로 나타났습니다.

자, 지금까지 대출자의 인구통계적 특성, 직업 및 소득 관련특성, 기본 자산 현황 등을 파악할 수 있는 변수가 있다는 점과 각각의 변수에서 상환에 문제가 발생한 그룹의 비율이 어떻게 나타나는지를 살펴보았습니다.

다음 글에서 살펴보게 될 4. 거주지 관련 특성(집 관련 특성, 거주 지역 특성 등), 5. 외부 신용평가 자료(외부기관 평가 점수, CreditBureau 과거 기록, 주변인 신용 정보 등), 6. 신청한 대출 특성(대출 유형, 대출 규모 등)은 지금까지 살펴본 변수들 보다 상환 문제 발생 여부에 더 많은 영향을 미칠 중요 변수로 예상됩니다. 이 변수들에 대해서는 다음 글에서 자세히 살펴보도록 하겠습니다.

(2) Baseline code setting

기본적인 EDA를 통해 베이스라인 코드(전체)가 완성되었습니다.

베이스라인 중에서 함께 이야기해보고 싶은 부분을 가져와봤습니다.

SMOTE(Synthetic Minority Over-sampling Technique) / 3 Line

구분할 각 분류에 해당하는 데이터의 비율이 반반이 아닌 경우 훈련 데이터 내 비율이 높은 분류 쪽으로 결과를 내놓는 모델을 만들게 될 수 있습니다. 이런 상황을 클래스 불균형(class imbalance)이라고 하며 이를 해결하는 방법으로 가중치(weight)를 조절하거나, 더 많은 비용(cost)을 부과하거나, 훈련 데이터를 직접 조절하는 방법이 있습니다(SMOTE).

SMOTE는 비율이 낮은 분류의 데이터를 고려하여 샘플을 만들어 내는 방법입니다. 기존의 샘플을 주변의 이웃을 고려해 약간씩 이동시킨 점들을 추가하는 방식으로 동작합니다.

roc_auc_score / 12 Line

“Submissions are evaluated on area under the ROC curve between the predicted probability and the observed target.”

이번 Kaggle의 평가방식을 보면 ROC 커브 아래 면적을 구하도록 되어있습니다. AUC = AUROC (the Area Under a ROC Curve) : ROC 커브의 밑면적을 구한 값이 바로 AUC입니다. 이 값이 1에 가까울수록 성능이 좋은 것으로 판단할 수 있습니다. 1로 예측하는 기준을 쉽게 잡으면 민감도는 높아지는 대신 모든 경우를 1이라고 하므로, 특이도가 낮아집니다. 그러므로 이 두 값이 둘 다 1에 가까워야 의미가 있습니다. 민감도와 특이도는 서로 트레이드오프(trade off) 관계로 두 값의 합은 항상 1 입니다. AUC 값은 전체적인 민감도와 특이도의 상관 관계를 보여줄 수 있어 편리한 성능 척도 기준입니다.

Kaggle을 마스터하기 위한 우리의 여정이 시작되었습니다. 데이터를 보는 눈과 다양한 모델들을 배우고 익히는 좋은 기회가 될 것 같습니다. 더 나은 결과를 가지고 다시 돌아오겠습니다. 다음 편을 기대해주세요 :)

— — —

Dev와 AI에 관련된 다양하고 날 것 그대로의 글들을 아래 블로그에 정리중입니다. 궁금하시다면 한번 찾아와주세요 :)

https://parksunwoo.github.io/

--

--