Quickstart
This guide demonstrates postprocessing a trained model to satisfy a fairness constraint.
Minimal example
import numpy as np
from sklearn.linear_model import LogisticRegression
from error_parity import RelaxedThresholdOptimizer
# Assume X, y, group are numpy arrays
# group must be encoded as integers 0..G-1
model = LogisticRegression().fit(X, y)
fair_clf = RelaxedThresholdOptimizer(
predictor=lambda X: model.predict_proba(X)[:, -1],
constraint="equalized_odds",
tolerance=0.05,
)
fair_clf.fit(X=X, y=y, group=group)
y_pred = fair_clf(X=X_test, group=group_test)
Notes
group
indexing must be contiguous starting at 0. Ifnp.max(group) > n_groups-1
, aValueError
is raised.For callable predictors, pass the callable directly as
predictor
. For scikit-learn API, pass alambda
topredict_proba
ordecision_function
as appropriate.Use
tolerance=0.0
for strict parity; higher tolerance allows more disparity.
Next steps
Explore Using the RelaxedThresholdOptimizer for options (costs, norms, diagnostics).
Compute a Postprocessing frontier (Pareto curve) to visualize the fairness–performance frontier.
Evaluate metrics and uncertainty with Evaluation and metrics.