def test_avg_odds_diff_edge_4(self): # Data: edge case of 1 y_true = np.array([0, 0, 0, 1, 1, 1, 1, 0]) y_pred = np.array([1, 1, 1, 1, 0, 0, 0, 0]) is_member = np.array([1, 1, 1, 1, 0, 0, 0, 0]) # Metric metric = BinaryFairnessMetrics.AverageOdds() # Score assert metric.get_score(y_true, y_pred, is_member) == 1
def test_avg_odds_diff_normal_list(self): # Data: medium number y_true = [0, 1, 0, 1, 1, 1, 1, 0] y_pred = [0, 0, 1, 0, 0, 1, 1, 1] is_member = [1, 1, 1, 1, 0, 0, 0, 0] # Metric metric = BinaryFairnessMetrics.AverageOdds() # Score score = metric.get_score(y_true, y_pred, is_member) assert np.isclose(score, -0.5833, atol=0.01)
def test_avg_odds_diff_edge_3(self): # Data y_pred = np.array([0, 0, 0, 0, 0, 0, 0, 0]) is_member = np.array([0, 0, 0, 0, 1, 1, 1, 1]) # both homogeneous y_true = np.array([0, 0, 0, 0, 1, 1, 1, 1]) # Metric metric = BinaryFairnessMetrics.AverageOdds() # Score with self.assertWarns(UserWarning): assert metric.get_score(y_true, y_pred, is_member) is None
def test_avg_odds_diff_edge_1(self): # Data: edge case - homogeneous ground truth within group - returns None # unprivileged homogeneous y_true = np.array([0, 0, 0, 1, 1, 1, 1, 1]) y_pred = np.array([0, 0, 0, 0, 0, 0, 0, 0]) is_member = np.array([0, 0, 0, 0, 1, 1, 1, 1]) # Metric metric = BinaryFairnessMetrics.AverageOdds() # Score with self.assertWarns(UserWarning): assert metric.get_score(y_true, y_pred, is_member) is None
def test_avg_odds_diff_normal_invalid(self): # Data: medium number my_df = pd.DataFrame.from_dict({ 'y_true': [0, 1, 0, 1, 1, 1, 1, 0], 'y_pred': [0, 0, 1, 0, 0, 1, 1, -1], 'is_member': [1, 1, 1, 1, 0, 0, 0, 0] }) # Metric metric = BinaryFairnessMetrics.AverageOdds() # Score with self.assertRaises(ValueError): metric.get_score(my_df['y_true'], my_df['y_pred'], my_df['is_member'])
def test_avg_odds_diff_normal_df(self): # Data: medium number my_df = pd.DataFrame.from_dict({ 'y_true': [0, 1, 0, 1, 1, 1, 1, 0], 'y_pred': [0, 0, 1, 0, 0, 1, 1, 1], 'is_member': [1, 1, 1, 1, 0, 0, 0, 0] }) # Metric metric = BinaryFairnessMetrics.AverageOdds() # Score score = metric.get_score(my_df['y_true'], my_df['y_pred'], my_df['is_member']) assert np.isclose(score, -0.5833, atol=0.01)