Update bias_auc.py
Browse files- bias_auc.py +20 -18
bias_auc.py
CHANGED
|
@@ -120,25 +120,25 @@ class BiasAUC(evaluate.Metric):
|
|
| 120 |
# subgroup positive
|
| 121 |
elif subgroup in target and label == target_class:
|
| 122 |
yield label, result[target_class]
|
| 123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
def _auc_by_group(self, target, label, output, subgroup):
|
| 125 |
""" Compute bias AUC metrics
|
| 126 |
"""
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
bpsn_auc_score = roc_auc_score(y_trues, y_preds)
|
| 133 |
-
|
| 134 |
-
y_trues, y_preds = zip(*self._genreate_bnsp(target, label, output, subgroup))
|
| 135 |
-
bnsp_auc_score = roc_auc_score(y_trues, y_preds)
|
| 136 |
|
| 137 |
-
|
| 138 |
-
return {'Subgroup' : subgroup_auc_score,
|
| 139 |
-
'BPSN' : bpsn_auc_score,
|
| 140 |
-
'BNSP' : bnsp_auc_score}
|
| 141 |
-
|
| 142 |
def _update_overall(self, result, labels, outputs, power_value=-5):
|
| 143 |
"""Compute the generalized mean of Bias AUCs"""
|
| 144 |
result['Overall'] = {}
|
|
@@ -149,9 +149,11 @@ class BiasAUC(evaluate.Metric):
|
|
| 149 |
mean_value = np.power(np.sum(metric_values)/(len(result) - 1), 1/power_value)
|
| 150 |
result['Overall'][f"{metric} generalized mean"] = mean_value
|
| 151 |
y_preds = [output[1] for output in outputs]
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
|
|
|
|
|
|
| 155 |
|
| 156 |
def _compute(self, target, label, output, subgroups=None):
|
| 157 |
if subgroups is None:
|
|
|
|
| 120 |
# subgroup positive
|
| 121 |
elif subgroup in target and label == target_class:
|
| 122 |
yield label, result[target_class]
|
| 123 |
+
|
| 124 |
+
def _get_auc_score(self, gen_func, *args, **kwargs):
|
| 125 |
+
try:
|
| 126 |
+
y_trues, y_preds = zip(*self.gen_func(args))
|
| 127 |
+
score = roc_auc_score(y_trues, y_preds)
|
| 128 |
+
except ValueError:
|
| 129 |
+
print(f"Sample not sufficient for target clases '{args[-1]}' subgroup metric (need correct and incorrect predictions for '{args[-1]}')")
|
| 130 |
+
score = np.nan
|
| 131 |
+
return score
|
| 132 |
+
|
| 133 |
def _auc_by_group(self, target, label, output, subgroup):
|
| 134 |
""" Compute bias AUC metrics
|
| 135 |
"""
|
| 136 |
+
return {
|
| 137 |
+
'Subgroup' : self._get_auc_score(self._genreate_subgroup, target, label, output, subgroup),
|
| 138 |
+
'BPSN' : self._get_auc_score(self._genreate_bpsn, target, label, output, subgroup),
|
| 139 |
+
'BNSP' : self._get_auc_score(self._genreate_bnsp, target, label, output, subgroup)
|
| 140 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
def _update_overall(self, result, labels, outputs, power_value=-5):
|
| 143 |
"""Compute the generalized mean of Bias AUCs"""
|
| 144 |
result['Overall'] = {}
|
|
|
|
| 149 |
mean_value = np.power(np.sum(metric_values)/(len(result) - 1), 1/power_value)
|
| 150 |
result['Overall'][f"{metric} generalized mean"] = mean_value
|
| 151 |
y_preds = [output[1] for output in outputs]
|
| 152 |
+
try:
|
| 153 |
+
result['Overall']["Overall AUC"] = roc_auc_score(labels, y_preds)
|
| 154 |
+
except ValueError:
|
| 155 |
+
result['Overall']["Overall AUC"] = np.nan
|
| 156 |
+
return result
|
| 157 |
|
| 158 |
def _compute(self, target, label, output, subgroups=None):
|
| 159 |
if subgroups is None:
|