in src/smclarify/bias/metrics/common.py [0:0]
def GE(positive_label_index: pd.Series, positive_predicted_label_index: pd.Series, alpha: float) -> float:
r"""
Generalized Entropy Index (GE) with parameter alpha.
:param positive_label_index: boolean column indicating positive labels
:param positive_predicted_label_index: boolean column indicating positive predicted labels
:param alpha: parameter of the GE index.
:return: Recall Difference between advantaged and disadvantaged classes
"""
if alpha == 0 or alpha == 1:
raise NotImplementedError("Not implemented for alpha 0 or 1.")
N = positive_label_index.shape[0]
require(positive_label_index.dtype == bool, "positive_label_index must be of type bool")
require(positive_predicted_label_index.dtype == bool, "positive_predicted_label_index must be of type bool")
require(N > 0, "dataset must be non-empty")
positive_predicted_label_index = positive_predicted_label_index.astype(int)
positive_label_index = positive_label_index.astype(int)
benefit = positive_predicted_label_index - positive_label_index + 1
mean_benefit = benefit.mean()
# Benefit is a positive quantity so the mean benefit is 0 only when all
# the benefits are 0, that is, all the predictions are false negatives.
require(
mean_benefit != 0,
"All predicted labels are false negatives. There should be at least one prediction that is not false negative.",
)
benefit_mean_ratio = benefit / mean_benefit
return (benefit_mean_ratio**alpha - 1).sum() / (N * alpha * (alpha - 1))