Menu
CoddyTech

Phê duyệt tín dụng

Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 56 trên 58.

Một ngân hàng hợp tác xã phát hành thẻ mua sắm. Trong cards.csv, 79 trong số 320 chủ thẻ đã chậm thanh toán trong năm đầu tiên:

Biểu đồ mật độ tỷ lệ nợ của 241 chủ thẻ thanh toán đúng hạn, chủ yếu nằm trong khoảng từ 0.1 đến 0.35, và 79 chủ thẻ chậm thanh toán, phân bố lệch sang phải về phía khoảng từ 0.3 đến 0.8, với vùng chồng lấn rộng

Nợ giúp ích, nhưng các nhóm bị chồng lấn. Ngân hàng sẽ chấm điểm rủi ro của từng người nộp đơn và chuyển hồ sơ của những người vượt ngưỡng cho nhân viên xem xét.

Quy tắc của nó: phát hiện một tỷ lệ nhất định những người sẽ trả trễ trong tương lai. Chọn ngưỡng trên các hàng xác thực, rồi đánh giá ngưỡng đó một lần trên các hàng kiểm tra.

challenge icon

Thử thách

Khó

Chương trình đọc mức độ bao phủ (recall) mà ngân hàng mong muốn, target. Phần khởi đầu liệt kê các cột và thresholds, theo thứ tự từ cao nhất.

  1. Tách một phần tư dữ liệu làm test theo cách phân tầng, rồi tách một phần tư dữ liệu còn lại làm validation cũng theo cách phân tầng. Cả hai lần đều dùng random_state=0.
  2. Huấn luyện pipeline trên các hàng còn lại dùng để huấn luyện: điền giá trị trung vị và chuẩn hóa các số, mã hóa one-hot cho home, rồi dùng hồi quy logistic.
  3. Trên tập validation, chọn ngưỡng đầu tiên có độ bao phủ đạt target.
  4. In ngưỡng đó, rồi in kết quả trên các hàng test khi dùng ngưỡng này, như bên dưới (3 chữ số thập phân).

Với một ngân hàng khác và 0.7:

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

Tự làm thử

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]

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học có giám sát

Tự luyện tập: Trình biên dịch Python online