Skip to main content

Library to creat causal model and mitigate the bias.

Reason this release was yanked:

issues

Project description

FLAI : Fairness Learning in Artificial Intelligence

Upload Python Package

Python library developed by Rubén González during his phD. research. His mission? To mitigate bias and discrimination through the application of causal algorithms.

Demo

Overview

Overview

FLAI is a Python library designed with two key functionalities: building a causal algorithm and mitigating biases within it.

  1. Causal Algorithm Creation: This library facilitates the development of a reliable causal algorithm, setting the stage for impartial data analysis.

  2. Bias Mitigation: Fairness is pursued in two significant areas - In-Training and Pre-Training.

    In-Training Mitigation

    The library includes features that allow the user to adjust the causal algorithm in two essential ways:

    • Graph Relationship Modification: Relationships within the graph can be modified to establish a more balanced structure.
    • Probability Table Modification: The probability table can be adjusted to prevent propagation or amplification of existing biases.

    Pre-Training Mitigation

    With the mitigated causal algorithm, a bias-free dataset can be generated. This dataset can be used for the training of other algorithms, enabling the bias mitigation process to extend to the initial stages of new model development.

Installation

FLAI can be easily installed using pip, Python's package installer. Open your terminal or command prompt and type the following command:

pip install flai-causal

Features

Causal Creation

from FLAI import data
from FLAI import causal_graph
import pandas as pd

df = pd.read_pickle('../Data/adult.pickle')
flai_dataset = data.Data(df, transform=True)
flai_graph = causal_graph.CausalGraph(flai_dataset, target = 'label')
flai_graph.plot(directed = True)

Original Graph

Causal Mitigation

Relations Mitigation

flai_graph.mitigate_edge_relation(sensible_feature=['sex','age'])

Mitigated Graph.

Table Probabilities Mitigation

flai_graph.mitigate_calculation_cpd(sensible_feature = ['age','sex'])

Inference

Assess the impact of sensitive features before mitigation. Sex, Age and Label 0 is the unfavorable value.

flai_graph.inference(variables=['sex','label'], evidence={})
flai_graph.inference(variables=['age','label'], evidence={})
sex label p
0 0 0.1047
0 1 0.2053
1 0 0.1925
1 1 0.4975
age label p
0 0 0.0641
0 1 0.1259
1 0 0.2331
1 1 0.5769

Assess the impact of sensitive features after mitigation. Changes in sex or age not affect the output.

mitigated_graph.inference(variables=['sex','label'], evidence={})
mitigated_graph.inference(variables=['age','label'], evidence={})
sex label p
0 0 0.1498
0 1 0.3502
1 0 0.1498
1 1 0.3502
age label p
0 0 0.1498
0 1 0.3502
1 0 0.1498
1 1 0.3502

Fair Data

fair_data = flai_graph.generate_dataset(n_samples = 1000, methodtype = 'bayes')

Correlation in original and Fair Data.

Train Algorithm With Fair Data.

from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split

mitigated_X = fair_data.data[['age', 'sex', 'credit_history','savings','employment' ]]
mitigated_y = fair_data.data[['label']]
mitigated_X_train, mitigated_X_test, mitigated_y_train, mitigated_y_test = train_test_split(mitigated_X,
                                                           mitigated_y, test_size=0.7, random_state=54)
model_mitigated = XGBClassifier()
model_mitigated.fit(mitigated_X_train, mitigated_y_train)
metrics = mitigated_dataset.fairness_metrics(target_column='label', predicted_column = 'Predicted',
                            columns_fair = {'sex' : {'privileged' : 1, 'unprivileged' : 0},
                                            'age' : {'privileged' : 1, 'unprivileged' : 0}})
Metrics Performance
ACC TPR FPR FNR PPP
model 0.7034 0.97995 0.94494 0.02005 0.96948
sex_privileged 0.7024 0.97902 0.94363 0.02098 0.96841
sex_unprivileged 0.7044 0.98087 0.94626 0.01913 0.97055
age_privileged 0.7042 0.97881 0.94118 0.02119 0.96758
age_unprivileged 0.7026 0.98109 0.94872 0.01891 0.97139
Metrics Fairness
EOD DI SPD OD
sex_fair_metrics 0.00185 1.00221 0.00214 0.00448
age_fair_metrics 0.00228 1.00394 0.00382 0.00981
Shap Results
import shap

explainer_original = shap.Explainer(model_original)
explainer_mitigated = shap.Explainer(model_mitigated)
shap_values_orignal = explainer_original(original_dataset.data[
                                               ['sex', 'race','age','education']])
shap_values_mitigated = explainer_mitigated(original_dataset.data[
                                               ['sex', 'race', 'age','education']])
shap.plots.beeswarm(shap_values_orignal)
shap.plots.bar(shap_values_orignal)    

shap.plots.beeswarm(shap_values_mitigated)
shap.plots.bar(shap_values_mitigated)

shap values.

Citation

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

FLAI_CAUSAL-1.0.7.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

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

FLAI_CAUSAL-1.0.7-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file FLAI_CAUSAL-1.0.7.tar.gz.

File metadata

  • Download URL: FLAI_CAUSAL-1.0.7.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for FLAI_CAUSAL-1.0.7.tar.gz
Algorithm Hash digest
SHA256 cab00b78132d555c7aaf82706ddacf01eb4c7243de6daa3be2d3ff4459729329
MD5 42594f8511c148f907cb0eb4fa0a9ae9
BLAKE2b-256 592cca2371370ccb9b64b3cdc91af1814f322b62574ac2098738876d029f40a9

See more details on using hashes here.

File details

Details for the file FLAI_CAUSAL-1.0.7-py3-none-any.whl.

File metadata

  • Download URL: FLAI_CAUSAL-1.0.7-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for FLAI_CAUSAL-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 d0f32456960d35c0f3edcd08fcca4c6963dcd8a0e64346d41bc77617fae97cfa
MD5 c1f0cdbf9a688ca7d4a194b24e1049b8
BLAKE2b-256 539014abd3d158d25045735431e3a755149a3006f75c11fbcdfaa970224d3ed6

See more details on using hashes here.

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