Fairness-aware classification with XGBoost
- Dominant language
- C++
- Stars
- 28.8k
- Forks
- 8.9k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 54
Description
Hi XGBoost community!
I'd like to add the implementation for our paper [FairXGBoost: Fairness-aware Classification in XGBoost](https://arxiv.org/abs/2009.01442) by way of a custom objective function. I'd like to add the functionality through an additional ``fair_classification_obj.cc`` file in order to provide support for distributed execution as well (which, AFAIK, is not possible with the python custom objective implementation)
The catch here is that the custom objective function requires access to the sensitive feature (such as race/gender). I'd like to start out with the straightforward implementation where I add an extra field to the MetaInfo class and subsequently read the values into it through either the CSV parser (for CSV files) or through the ``MetaTryLoadFloatInfo`` method, with a separate file containing the sensitive features. I've tested the latter method and it seems to work fine (until and unless you add arguments to the file name such as ``agaricus.txt.train?indexing_mode=1``. The former method involving the CSV parser seems to require changes to the parser (which would end up changing DMLC-Core) - not sure if that is something that is acceptable.
At this point, I am not concerned about the privacy of the sensitive features. However, I wanted to check with the community if there is a way to design this so that in the future, we could extend this to a setting where XGBoost can privately access the sensitive features (either through cryptographic methods or through differential privacy).
TLDR:
1. Want to implement this objective into the repo - what's the best way to store and handle the sensitive features?
2. If reading sensitive features from CSV files is to be supported, can I make changes to dmlc-core?
Thanks!
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.