python 3.12.13, scikit-learn 1.9.1, pandas 3.0.6 rows 1000, bad 300 (30%), features 18 cost-optimal threshold for calibrated probabilities: 1/(1+5) = 0.167 Test cost per applicant over 20 stratified 70/30 splits (lower is better) strategy mean min max bad caught good rejected default 0.5 0.866 0.740 0.990 48% 13% cost theory 0.167 0.545 0.450 0.643 86% 48% TunedThresholdClassifierCV 0.547 0.450 0.640 89% 55% all rejected 0.700 0.700 0.700 100% 100% tuned on the test set (leak) 0.507 0.410 0.573 Thresholds chosen per split TunedThresholdClassifierCV mean 0.138, range 0.090 to 0.191 tuned on the test set mean 0.149, range 0.070 to 0.250 Average cost curve: at 0.50 0.866, at 0.17 0.545, lowest 0.536 at 0.15