Menu
CoddyTech

Одобрение кредита

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 56 из 58.

Кооперативный банк выпускает карту для покупок. В файле cards.csv 79 из 320 держателей просрочили платежи в течение первого года:

Гистограммы плотности коэффициента задолженности для 241 держателя, которые своевременно вносили платежи, в основном от 0.1 до 0.35, и 79 держателей, допустивших просрочку, с распределением, смещённым вправо, к диапазону от 0.3 до 0.8, при значительном перекрытии

Долг помогает, но группы пересекаются. Банк оценит риск каждого заявителя и направит на проверку специалисту всех, чей показатель превышает пороговое значение.

Его правило: выявлять заданную долю будущих должников. Выберите порог на строках валидационной выборки, а затем оцените его один раз на строках тестовой выборки.

challenge icon

Задание

Сложно

Программа считывает желаемую банком полноту, target. В заготовке перечислены столбцы и thresholds в порядке убывания.

  1. Отдели стратифицированную тестовую четверть, затем стратифицированную валидационную четверть от оставшихся данных; для обеих используй random_state=0.
  2. Обучи конвейер на оставшихся строках для обучения: заполни пропуски медианой и масштабируй числовые данные, примени one-hot-кодирование к 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