Skip to main content

A multi-objective multi-fairness boosting classifier

Project description

MMM-Fair is a multi-objective, fairness-aware boosting classifier originally inspired by the paper: "Multi-fairness Under Class-Imbalance"

https://link.springer.com/chapter/10.1007/978-3-031-18840-4_21

The original algorithm targeted Equalized Odds (a.k.a. Disparate Mistreatment). This MMM-Fair implementation generalizes to multiple fairness objectives:

• Demographic Parity (DP)

• Equal Opportunity (EP)

• Equalized Odds (EO)

We further improve the approach by:

  1. Flexible Base Learners: Any scikit-learn estimator (e.g. DecisionTreeClassifier, LogisticRegression, ExtraTreeClassifier, etc.) can be used as the base learner.
  2. Fairness-Weighted Alpha: The boosting weight (alpha) accounts for fairness metrics alongside classification error.
  3. Dynamic Handling of Over-Boosted Samples: Reduces excessive emphasis on specific samples once fairness goals are partially met.

Installation

pip install mmm-fair

Requires Python 3.11+.

Dependencies: numpy, scikit-learn, tqdm, pymoo, pandas, ucimlrepo, skl2onnx, etc.

Usage Overview

You can import and use MMM-Fair directly:

from mmm_fair import MMM_Fair 
from sklearn.tree import DecisionTreeClassifier

Suppose you have X (features), y (labels)

mmm = MMM_Fair(
estimator=DecisionTreeClassifier(max_depth=5),
constraints="EO",        # or "DP", "EP"
n_estimators=1000,
random_state=42,
# other parameters, e.g. gamma, saIndex, saValue...
)

mmm.fit(X, y)
preds = mmm.predict(X_test)

Fairness Constraints

• constraints="DP" → Demographic Parity

• constraints="EP" → Equal Opportunity

• constraints="EO" → Equalized Odds

Pass the relevant saIndex (sensitive attribute array) and saValue (dictionary of protected vs. non-protected group mappings) to MMM-Fair if you want it to track fairness properly for subgroups.

Train & Deploy Script

This package provides a script, train_and_deploy.py, which:

  1. Loads data (from a known UCI dataset or a local CSV).
  2. Specifies fairness constraints, protected attributes, and base learner.
  3. Trains MMM-Fair with your chosen hyperparameters.
  4. Deploys the model in ONNX or pickle format.

Example command:

using UCI library

python -m mmm_fair.train_and_deploy \
  --dataset Adult \
  --prots race sex \
  --nprotgs White Male \
  --constraint EO \
  --base_learner Logistic \
  --deploy onnx

using local "csv" data

python -m mmm_fair.train_and_deploy \
  --dataset mydata.csv \
  --target label_col \
  --prots prot_1 prot_2 prot_3 \
  --nprotgs npg1 npg2 npg3 \
  --constraint EO \
  --base_learner tree \
  --deploy onnx

Currently the fairness intervention only implemented for categorical groups. So if protected attribute is numerical e.g. "age" then for non-protected value i.e. --nprotgs provide a range like 30_60 as argument.

Additional options

If you want to select theta from Pareto optimal ensembles (default is False) set:

--pareto True

If you want to provide test data:

--test 'your_test_file.csv'

Or just test split:

--test 0.3

If you want change style (default is table, choose from {table, console, html}) of report displayed (Check FairBench Library for more details):

--report_type Console

Result: Multiple ONNX files (one per boosting round) plus a model_params.npy inside a directory. It’s then zipped into a .zip archive for distribution or analysis.

MAMMOth Toolkit Integration

For the bias exploration using MAMMOth pipeline it is really important to select 'onnx' as the '--deploy' argument. The ONNX model accelerator and model_params.npy are used to integrate with the MAMMOth-toolkit or the demonstrator app from the mammoth-commons project.

By providing the .zip archive, you can:

• Upload it to MAMMOth,

• Examine bias and performance metrics across subgroups,

• Compare fairness trade-offs with a user-friendly interface.

Example Workflow

  1. Choose Fairness Constraint: e.g., DP, EO, or EP.
  2. Define sensitive attributes in saIndex and the protected-group condition in saValue.
  3. Pick base learner (e.g., DecisionTreeClassifier(max_depth=5)).
  4. Train with a large number of estimators (n_estimators=300 or 1000) for best performance.
  5. Optionally do partial ensemble selection with update_theta(criteria="all") or update_theta(criteria="fairness") .
  6. Export to ONNX or pickle for downstream usage.

References

Multi-Fairness Under Class-Imbalance,” Roy, Arjun, Vasileios Iosifidis, and Eirini Ntoutsi. International Conference on Discovery Science. Cham: Springer Nature Switzerland, 2022.

License & Contributing

This project is released under [Apache License Version 2.0]. Contributions are welcome—please open an issue or pull request on GitHub.

Contact

For questions or collaborations, please contact arjun.roy@unibw.de Check out the source code at: GITHUB.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mmm_fair-0.3.1.tar.gz (34.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mmm_fair-0.3.1-py3-none-any.whl (32.6 kB view details)

Uploaded Python 3

File details

Details for the file mmm_fair-0.3.1.tar.gz.

File metadata

  • Download URL: mmm_fair-0.3.1.tar.gz
  • Upload date:
  • Size: 34.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for mmm_fair-0.3.1.tar.gz
Algorithm Hash digest
SHA256 3dec01f3e30942802131ff54c1615c75befc60151d873560edbfdcd043399c61
MD5 658d86fbb4a257d06f767cbd3fe081eb
BLAKE2b-256 f449db8a323ff68e46b365bf95739069b8acd5878411e6221bee81ffd51918bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for mmm_fair-0.3.1.tar.gz:

Publisher: publish.yml on arjunroyihrpa/MMM_fair

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mmm_fair-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: mmm_fair-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 32.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for mmm_fair-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cce14f3cb371f1d888508b5be80712d739e5f6950de922fb9c986d2ecaa43ff5
MD5 d0b32c5ef05ba1e1f716e27264379ea4
BLAKE2b-256 a7e5a1950c213d0ec57a123344e9c9e366576944e2d170e8b6ef5d4fa6fbb2e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for mmm_fair-0.3.1-py3-none-any.whl:

Publisher: publish.yml on arjunroyihrpa/MMM_fair

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page