Classification Metrics#
[1]:
import numpy as np
from langfair.metrics.classification import ClassificationMetrics
1. Introduction#
Large language models (LLMs) used in classification use cases should be assessed for group fairness (if applicable). Similar to traditional person-level classification challenges in machine learning, these use cases present the risk of allocational harms. LangFair offers the following classification fairness metrics from the LLM fairness literature:
Predicted Prevalence Rate Disparity (Feldman et al., 2015; Bellamy et al., 2018; Saleiro et al., 2019)
False Negative Rate Disparity (Bellamy et al., 2018; Saleiro et al., 2019)
False Omission Rate Disparity (Bellamy et al., 2018; Saleiro et al., 2019)
False Positive Rate Disparity (Bellamy et al., 2018; Saleiro et al., 2019)
False Discovery Rate Disparity (Bellamy et al., 2018; Saleiro et al., 2019)
2. Assessment#
[2]:
# Simulate dataset for this example. In practice, users should replace this data with predicted classes generated by the LLM,
# corresponding ground truth values, and corresponding protected attribute group data.
sample_size = 10000
groups = np.random.binomial(n=1, p=0.5, size=sample_size)
y_pred = np.random.binomial(n=1, p=0.3, size=sample_size)
y_true = np.random.binomial(n=1, p=0.3, size=sample_size)
Classification Metrics#
ClassificationMetrics()
- Pairwise classification fairness metrics (class)
Class parameters:
metric_type
- ({‘all’, ‘assistive’, ‘punitive’, ‘representation’}, default=’all’) Specifies which metrics to use.
Methods:
evaluate
- Returns min, max, range, and standard deviation of metrics across protected attribute groups.Method Parameters:
groups
- (array-like) Group indicators. Must contain exactly two unique values.y_pred
- (array-like) Binary model predictions. Positive and negative predictions must be 1 and 0, respectively.y_true
- (array-like) Binary labels (ground truth values). Positive and negative labels must be 1 and 0, respectively.ratio
- (boolean) Indicates whether to compute the metric as a difference or a ratio
Returns:
Dictionary containing fairness metric values (Dictionary).
Generate an instance of class ClassificationMetrics
using default metric_type='all'
, which includes “assistive”, “punitive”, and “representation” metrics.
[3]:
cm = ClassificationMetrics(metric_type='all')
[4]:
# Metrics expressed as ratios (target value of 1)
cm.evaluate(groups=groups, y_pred=y_pred, y_true=y_true, ratio=True)
[4]:
{'FalseNegativeRateParity': 0.9683960547735326,
'FalseOmissionRateParity': 0.9682772917805723,
'FalsePositiveRateParity': 0.9832027144990514,
'FalseDiscoveryRateParity': 0.9750294817188464,
'PredictedPrevalenceRateParity': 1.010318056277584}
[5]:
# Metrics expressed as differences (target value of 0)
cm.evaluate(groups=groups, y_pred=y_pred, y_true=y_true, ratio=False)
[5]:
{'FalseNegativeRateParity': 0.022435421009698087,
'FalseOmissionRateParity': 0.009568167034658404,
'FalsePositiveRateParity': 0.005089653684952955,
'FalseDiscoveryRateParity': 0.01776013575685509,
'PredictedPrevalenceRateParity': 0.0030867911196673647}