-
Notifications
You must be signed in to change notification settings - Fork 5
/
measures.py
31 lines (29 loc) · 1.61 KB
/
measures.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
def equalized_odds_measure_TP(data, model, sensitive_features, ylabel, rev_pred=1):
'''
True positive label for the groups defined by the values of the "sensible_features",
with respect to the "model" on the "data".
:param data: the data where to evaluate the True Positive Rate (Equal Opportunity).
:param model: the model that has to be evaluated.
:param sensitive_features: the features used to split the data in groups.
:param ylabel: the POSITIVE label (usually +1).
:param rev_pred: an option to reverse the outputs of our model.
:return: a dictionary with keys the sensitive_features and values dictionaries containing the True Positive Rates
of the different subgroups of the specific sensitive feature.
'''
predictions = model.predict(data.data) * rev_pred
truth = data.target
eq_dict = {}
for feature in sensitive_features:
eq_sensible_feature = {}
values_of_sensible_feature = list(set(data.data[:, feature]))
for val in values_of_sensible_feature:
eq_tmp = None
positive_sensitive = np.sum([1.0 if data.data[i, feature] == val and truth[i] == ylabel else 0.0
for i in range(len(predictions))])
if positive_sensitive > 0:
eq_tmp = np.sum([1.0 if predictions[i] == ylabel and data.data[i, feature] == val and truth[i] == ylabel
else 0.0 for i in range(len(predictions))]) / positive_sensitive
eq_sensible_feature[val] = eq_tmp
eq_dict[feature] = eq_sensible_feature
return eq_dict