πŸ§ͺ Interactive Demo with Real Data

Explore FLAI in Action

Discover how FLAI detects, measures and mitigates algorithmic bias using the same datasets and examples from the official repository. From two-dimensional metrics to fair data generation.

πŸ“Š Two-Dimensional Metrics
πŸ”„ Complete Workflow
πŸ“š Case Studies
πŸ’» Live Code

🎯 Two-Dimensional Metrics: Equity vs Equality

FLAI introduces the first metric that conceptually distinguishes between two types of discrimination:

πŸ“ Equality (EQA)

Statistical Parity: Do groups achieve the same outcomes?

Measures whether the proportion of positive outcomes is similar across groups.

EQA = |P(Y=1|G=0) - P(Y=1|G=1)|

βš–οΈ Equity (EQI)

Equal Opportunity: Do groups have the same opportunities?

Measures whether true positives are detected equally across both groups.

EQI = |P(ΕΆ=1|Y=1,G=0) - P(ΕΆ=1|Y=1,G=1)|

πŸ” Example: Adult Dataset (Income Prediction)

We compare groups by gender in predicting income >50K:

-0.04
EQI (Equity)
0.08
EQA (Equality)
0.09
Fairness Global
0.50
Disparate Impact

πŸ’‘ Interpretation

Negative EQI: Women have lower true positive rate (less opportunity)

Positive EQA: Difference in overall distribution of positive predictions

Fairness = √(0.08² + 0.04²) = 0.09: Moderate level of bias detected

πŸ”„ Complete Mitigation Workflow

FLAI implements a comprehensive process from detection to mitigation:

πŸ” Bias Detection

Load the dataset and calculate two-dimensional fairness metrics

flai_dataset = data.Data(df, transform=True)
🧠 Causal Modeling

Build a Bayesian graph that explains causal relationships

flai_graph = CausalGraph(flai_dataset, target='label')
βš–οΈ Mitigation

Adjust causal relationships and probability tables

flai_graph.mitigate_edge_relation(sensible_feature=['sex','age'])
πŸ“Š Data Generation

Create synthetic datasets free from bias

fair_data = flai_graph.generate_dataset(n_samples=1000)

πŸ“ˆ Mitigation Results: Adult Dataset

Metric Original Post-Mitigation Improvement
EQI (Equity) -0.04 0.00 βœ… Eliminated
EQA (Equality) 0.08 0.00 βœ… Eliminated
Fairness Global 0.09 0.00 βœ… Perfect
Accuracy 0.758 0.746 πŸ“Š Slight reduction

Progress Visualization

β†’

From detected bias to complete fairness

πŸ“š Real Case Studies

We explore the same datasets used in the research:

πŸ‘₯ Adult Census Dataset

Objective: Predict income >50K based on demographic characteristics

Sensitive variable: Gender, Age

Findings: Significant bias against women and young people

df_f, datos_f = flai_dataset.fairness_eqa_eqi(
    features=['education'], 
    target_column='income', 
    column_filter=['gender'],
    plot=True
)

Result: EQI=-0.04, EQA=0.08, F=0.09

βš–οΈ COMPAS Recidivism

Objective: Predict criminal recidivism risk

Sensitive variable: Race

Findings: Racial discrimination in justice algorithms

compas_graph = CausalGraph(compas_data, target='risk_score')
compas_graph.mitigate_calculation_cpd(
    sensible_feature=['race']
)

Impact: 85% reduction in racial bias

πŸ’³ German Credit Dataset

Objective: Bank credit decisions

Sensitive variable: Gender, Age

Findings: Bias against young women

fair_credit_data = credit_graph.generate_dataset(
    n_samples=1000,
    methodtype='bayes'
)

Result: Fair dataset for training new models

πŸ† Scientific Validation

These results have been peer-reviewed and published in:

  • Engineering Applications of Artificial Intelligence (2025)
  • Future Generation Computer Systems (2024)
  • International Journal of Interactive Multimedia and AI (2024)

πŸ’» Test FLAI in Your Browser

Run real FLAI code using PyScript. Data is processed entirely in your browser:

🐍 Executable Python Code

# Simulate FLAI behavior with synthetic data
import pandas as pd
import numpy as np
import random

# Function to simulate FLAI's EQA-EQI metric
def calculate_fairness_flai(data, group_col, target_col):
    groups = data[group_col].unique()
    if len(groups) != 2:
        return "Error: Need exactly 2 groups"
    
    g0, g1 = groups[0], groups[1]
    
    # Calculate EQA (Equality) - Statistical Parity
    rate_g0 = data[data[group_col] == g0][target_col].mean()
    rate_g1 = data[data[group_col] == g1][target_col].mean()
    eqa = abs(rate_g1 - rate_g0)
    
    # Simulate EQI (Equity) - Equal Opportunity
    # In real data, this would require ground truth
    eqi = abs(np.random.normal(0, 0.02))  # Simulated
    
    # Global fairness
    fairness = np.sqrt(eqa**2 + eqi**2)
    
    return {
        'EQA (Equality)': round(eqa, 3),
        'EQI (Equity)': round(eqi, 3),
        'Global Fairness': round(fairness, 3),
        'Privileged Group': f"{g1} (rate: {rate_g1:.3f})",
        'Unprivileged Group': f"{g0} (rate: {rate_g0:.3f})"
    }

# Generate synthetic data similar to Adult dataset
np.random.seed(42)
random.seed(42)

sample_data = pd.DataFrame({
    'gender': np.random.choice(['Female', 'Male'], 1000, p=[0.4, 0.6]),
    'education': np.random.choice([0, 1, 2, 3], 1000, p=[0.3, 0.3, 0.3, 0.1]),
    'high_income': np.random.choice([0, 1], 1000, p=[0.7, 0.3])
})

# Introduce artificial bias: males have higher probability of high income
male_mask = sample_data['gender'] == 'Male'
sample_data.loc[male_mask, 'high_income'] = np.random.choice(
    [0, 1], male_mask.sum(), p=[0.6, 0.4]  # 40% vs 30%
)

print("=== FLAI DEMO: Bias Detection ===\\n")
print("πŸ“Š Synthetic Dataset Generated:")
print(f"   β€’ Size: {len(sample_data)} records")
print(f"   β€’ Females: {(sample_data['gender']=='Female').sum()}")
print(f"   β€’ Males: {(sample_data['gender']=='Male').sum()}")
print()

# Calculate fairness metrics
result = calculate_fairness_flai(sample_data, 'gender', 'high_income')

print("πŸ” Fairness Analysis (FLAI Method):")
for key, value in result.items():
    print(f"   β€’ {key}: {value}")

print()
print("πŸ“‹ Interpretation:")
if result['Global Fairness'] > 0.05:
    print("   ⚠️  BIAS DETECTED - Mitigation required")
    print("   πŸ”§ Recommendation: Apply causal mitigation with FLAI")
else:
    print("   βœ… Fair dataset - No significant bias detected")

print()
print("πŸš€ To use FLAI in your project:")
print("   pip install flai-causal")
print("   # See complete examples at GitHub.com/rugonzs/FLAI")

⚑ Technology Used

This demo uses PyScript/Pyodide to run real Python in the browser. The shown code is an educational simulation of FLAI's behavior.

For complete analysis with real data, install FLAI in your local Python environment.

πŸš€ Ready to Get Started?

πŸ“¦ Installation

Install FLAI in your Python project:

pip install flai-causal

πŸ“– Documentation

Explore complete examples and tutorials:

Ver Docs

πŸ“„ Research

Read the papers that support FLAI:

Ver Papers