A lender approves personal loans and prices them off a predicted default probability. That number does not just rank applicants, it sets the interest rate and the amount held in reserve, so being right about the ordering is not enough: when the model says 8%, roughly 8 in 100 of those loans have to actually default. You will build the scorecard, discover that the standard fix for class imbalance destroys exactly this property, and then decide where to set the approval cutoff in dollars rather than in F1.
Establish the default rate and check whether the missing delinquency dates are missing at random.
Implement explore_credit(train_df) returning a dict with:
The last three numbers are the point. The column is not missing because of a data-collection failure; it is missing because the event never happened, and those applicants are the safest ones in the book. Filling it with the median moves the safest cohort into the middle of the risk distribution.
Evaluated server-side against a hidden test set.