@@ -597,18 +597,25 @@ def test_precision_recall_curve_toydata():
597
597
def test_score_scale_invariance ():
598
598
# Test that average_precision_score and roc_auc_score are invariant by
599
599
# the scaling or shifting of probabilities
600
+ # This test was expanded (added scaled_down) in response to github
601
+ # issue #3864 (and others), where overly aggressive rounding was causing
602
+ # problems for users with very small y_score values
600
603
y_true , _ , probas_pred = make_prediction (binary = True )
601
604
602
605
roc_auc = roc_auc_score (y_true , probas_pred )
603
- roc_auc_scaled = roc_auc_score (y_true , 100 * probas_pred )
606
+ roc_auc_scaled_up = roc_auc_score (y_true , 100 * probas_pred )
607
+ roc_auc_scaled_down = roc_auc_score (y_true , 1e-6 * probas_pred )
604
608
roc_auc_shifted = roc_auc_score (y_true , probas_pred - 10 )
605
- assert_equal (roc_auc , roc_auc_scaled )
609
+ assert_equal (roc_auc , roc_auc_scaled_up )
610
+ assert_equal (roc_auc , roc_auc_scaled_down )
606
611
assert_equal (roc_auc , roc_auc_shifted )
607
612
608
613
pr_auc = average_precision_score (y_true , probas_pred )
609
- pr_auc_scaled = average_precision_score (y_true , 100 * probas_pred )
614
+ pr_auc_scaled_up = average_precision_score (y_true , 100 * probas_pred )
615
+ pr_auc_scaled_down = average_precision_score (y_true , 1e-6 * probas_pred )
610
616
pr_auc_shifted = average_precision_score (y_true , probas_pred - 10 )
611
- assert_equal (pr_auc , pr_auc_scaled )
617
+ assert_equal (pr_auc , pr_auc_scaled_up )
618
+ assert_equal (pr_auc , pr_auc_scaled_down )
612
619
assert_equal (pr_auc , pr_auc_shifted )
613
620
614
621
0 commit comments