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
groupindexing must be contiguous starting at 0. Ifnp.max(group) > n_groups-1, aValueErroris raised.For callable predictors, pass the callable directly as
predictor. For scikit-learn API, pass alambdatopredict_probaordecision_functionas appropriate.Use
tolerance=0.0for 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.