Menu
CoddyTech

신용 승인

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 56번째.

협동조합 은행이 스토어 카드를 운영합니다. cards.csv에서 첫해에 카드 소지자 320명 중 79명이 결제를 연체했습니다:

결제를 제때 한 카드 소지자 241명의 부채 비율 밀도 히스토그램은 대부분 0.1~0.35에 분포하고, 연체한 79명의 히스토그램은 오른쪽으로 이동해 0.3~0.8에 분포하며 두 분포가 넓게 겹칩니다

부채는 도움이 되지만, 그룹은 서로 겹칩니다. 은행은 각 신청자의 위험도를 평가하고, 임계값을 초과하는 사람은 모두 검토를 위해 담당자에게 보냅니다.

이 규칙의 목표는 향후 연체할 사람 중 일정 비율을 찾아내는 것입니다. 검증 행에서 임계값을 선택한 다음, 테스트 행에서 한 번 평가합니다.

challenge icon

챌린지

어려움

이 프로그램은 은행이 원하는 재현율인 target을 읽습니다. 시작 코드에는 열과 가장 높은 값부터 나열된 thresholds가 있습니다.

  1. 층화 방식으로 테스트용 4분의 1을 분리한 다음, 남은 데이터에서 층화 방식으로 검증용 4분의 1을 분리합니다. 두 경우 모두 random_state=0을 사용합니다.
  2. 남은 학습 행에 파이프라인을 학습시킵니다. 숫자에는 중앙값 대체와 스케일링을 적용하고, home에는 원-핫 인코딩을 적용한 다음 로지스틱 회귀를 사용합니다.
  3. 검증 데이터에서 재현율이 target에 도달하는 첫 번째 임계값을 선택합니다.
  4. 아래와 같이 해당 임계값을 출력한 다음, 테스트 행에서의 결과를 출력합니다(소수점 이하 3자리).

다른 은행의 데이터와 0.7을 사용하면 다음과 같습니다.

Threshold: 0.3 (validation recall 0.733)
Test: caught 15 of 21 late payers, 12 false alarms
Precision: 0.556

직접 해보기

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import recall_score, precision_score, confusion_matrix

cards = pd.read_csv("cards.csv")
numbers = ["age", "income_k", "debt_ratio", "years_at_job", "late_payments", "card_limit_k"]
text = ["home"]
X = cards[numbers + text]
y = cards["fell_behind"]

target = float(input())
thresholds = [0.5, 0.45, 0.4, 0.35, 0.3, 0.25, 0.2, 0.15, 0.1]

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러