6
6
from jpype import JInt
7
7
from org .kie .trustyai .explainability .metrics import FairnessMetrics
8
8
9
- from trustyai .model import Output , Value , PredictionProvider , Model
10
- from trustyai .utils .data_conversions import pandas_to_trusty
9
+ from trustyai .model import Value , PredictionProvider , Model
10
+ from trustyai .utils .data_conversions import (
11
+ pandas_to_trusty ,
12
+ OneOutputUnionType ,
13
+ one_output_convert ,
14
+ )
11
15
12
16
ColumSelector = Union [List [int ], List [str ]]
13
17
14
18
15
19
def _column_selector_to_index (columns : ColumSelector , dataframe : pd .DataFrame ):
20
+ if len (columns ) == 0 :
21
+ raise ValueError ("Must specify at least one column" )
22
+
16
23
if isinstance (columns [0 ], str ): # passing column
17
24
columns = dataframe .columns .get_indexer (columns )
18
25
indices = [JInt (c ) for c in columns ] # Java casting
@@ -22,14 +29,15 @@ def _column_selector_to_index(columns: ColumSelector, dataframe: pd.DataFrame):
22
29
def statistical_parity_difference (
23
30
privileged : pd .DataFrame ,
24
31
unprivileged : pd .DataFrame ,
25
- favorable : List [ Output ] ,
32
+ favorable : OneOutputUnionType ,
26
33
outputs : Optional [List [int ]] = None ,
27
34
) -> float :
28
35
"""Calculate Statistical Parity Difference between privileged and unprivileged dataframes"""
36
+ favorable_prediction_object = one_output_convert (favorable )
29
37
return FairnessMetrics .groupStatisticalParityDifference (
30
38
pandas_to_trusty (privileged , outputs ),
31
39
pandas_to_trusty (unprivileged , outputs ),
32
- favorable ,
40
+ favorable_prediction_object . outputs ,
33
41
)
34
42
35
43
@@ -39,31 +47,33 @@ def statistical_parity_difference_model(
39
47
model : Union [PredictionProvider , Model ],
40
48
privilege_columns : ColumSelector ,
41
49
privilege_values : List [Any ],
42
- favorable : List [ Output ] ,
50
+ favorable : OneOutputUnionType ,
43
51
) -> float :
44
52
"""Calculate Statistical Parity Difference using a samples dataframe and a model"""
53
+ favorable_prediction_object = one_output_convert (favorable )
45
54
_privilege_values = [Value (v ) for v in privilege_values ]
46
55
_jsamples = pandas_to_trusty (samples , no_outputs = True )
47
56
return FairnessMetrics .groupStatisticalParityDifference (
48
57
_jsamples ,
49
58
model ,
50
59
_column_selector_to_index (privilege_columns , samples ),
51
60
_privilege_values ,
52
- favorable ,
61
+ favorable_prediction_object . outputs ,
53
62
)
54
63
55
64
56
65
def disparate_impact_ratio (
57
66
privileged : pd .DataFrame ,
58
67
unprivileged : pd .DataFrame ,
59
- favorable : List [ Output ] ,
68
+ favorable : OneOutputUnionType ,
60
69
outputs : Optional [List [int ]] = None ,
61
70
) -> float :
62
71
"""Calculate Disparate Impact Ration between privileged and unprivileged dataframes"""
72
+ favorable_prediction_object = one_output_convert (favorable )
63
73
return FairnessMetrics .groupDisparateImpactRatio (
64
74
pandas_to_trusty (privileged , outputs ),
65
75
pandas_to_trusty (unprivileged , outputs ),
66
- favorable ,
76
+ favorable_prediction_object . outputs ,
67
77
)
68
78
69
79
@@ -73,17 +83,18 @@ def disparate_impact_ratio_model(
73
83
model : Union [PredictionProvider , Model ],
74
84
privilege_columns : ColumSelector ,
75
85
privilege_values : List [Any ],
76
- favorable : List [ Output ] ,
86
+ favorable : OneOutputUnionType ,
77
87
) -> float :
78
88
"""Calculate Disparate Impact Ration using a samples dataframe and a model"""
89
+ favorable_prediction_object = one_output_convert (favorable )
79
90
_privilege_values = [Value (v ) for v in privilege_values ]
80
91
_jsamples = pandas_to_trusty (samples , no_outputs = True )
81
92
return FairnessMetrics .groupDisparateImpactRatio (
82
93
_jsamples ,
83
94
model ,
84
95
_column_selector_to_index (privilege_columns , samples ),
85
96
_privilege_values ,
86
- favorable ,
97
+ favorable_prediction_object . outputs ,
87
98
)
88
99
89
100
@@ -92,7 +103,7 @@ def average_odds_difference(
92
103
test : pd .DataFrame ,
93
104
truth : pd .DataFrame ,
94
105
privilege_columns : ColumSelector ,
95
- privilege_values : List [ Any ] ,
106
+ privilege_values : OneOutputUnionType ,
96
107
positive_class : List [Any ],
97
108
outputs : Optional [List [int ]] = None ,
98
109
) -> float :
0 commit comments