Este projeto demonstra a aplicação de métricas de fairness em modelos de Machine Learning usando o dataset Pima Diabetes.
pip install -r requirements.txtpython demo_pima_diabetes.pyEste script irá:
- Carregar o dataset Pima Diabetes
- Criar atributos sensíveis (grupos de idade e IMC)
- Treinar múltiplos modelos (Logistic Regression, Random Forest, Gradient Boosting)
- Calcular métricas de fairness (ABLNI)
- Gerar visualizações na pasta
outputs/ - Criar relatórios em HTML e texto
Todos os arquivos são salvos na pasta outputs/:
01_subgroup_results_rf.png- Resultados por subgrupo02_comprehensive_dashboard.png- Dashboard completo de fairness03_calibration_curves.png- Curvas de calibração por subgrupo04_decision_curves.png- Curvas de decisão (net benefit)05_model_comparison.png- Comparação entre modelos06_threshold_sensitivity.png- Análise de sensibilidade ao threshold07_intersectional_heatmap.png- Heatmap de grupos interseccionais
model_comparison.csv- Comparação quantitativa de modelossubgroup_detailed_results.csv- Métricas detalhadas por subgrupothreshold_sensitivity.csv- Análise de diferentes thresholds
fairness_report.html- Relatório interativo em HTMLfairness_report.txt- Relatório em texto simples
fairness/
├── fairness_metrics.py # Implementação da métrica ABLNI
├── fairness_visualization.py # Ferramentas de visualização
├── demo_pima_diabetes.py # Script de demonstração
├── test_fairness_metrics.py # Testes unitários
├── requirements.txt # Dependências
├── README.md # Este arquivo
└── outputs/ # Pasta com resultados (gerada automaticamente)
ABLNI (Adjusted Intersectional Net Benefit) é uma métrica de fairness que:
- Avalia equidade entre subgrupos interseccionais
- Considera o net benefit clínico de cada subgrupo
- Pondera falsos positivos e verdadeiros positivos
- Retorna um score de 0 a 1 (valores maiores = mais equidade)
- ≥ 0.90: EXCELENTE - Alta equidade
- 0.80-0.89: BOM - Equidade aceitável
- 0.70-0.79: MODERADO - Disparidades notáveis
- < 0.70: CRÍTICO - Intervenção necessária
from fairness_metrics import AdjustedIntersectionalNetBenefit
import pandas as pd
# Seus dados
y_true = [0, 1, 0, 1, ...]
y_pred_proba = [0.2, 0.8, 0.3, 0.7, ...]
sensitive_attrs = pd.DataFrame({
'age_group': ['young', 'old', ...],
'gender': ['F', 'M', ...]
})
# Calcular fairness
ablni = AdjustedIntersectionalNetBenefit(threshold=0.5)
score = ablni.fit(y_true, y_pred_proba, sensitive_attrs)
print(f"ABLNI Score: {score:.3f}")
print(ablni.get_summary_report())
ablni.plot_subgroup_results()from fairness_visualizations import FairnessComparator
comparator = FairnessComparator()
comparator.add_model('Model A', y_true, y_pred_a, sensitive_attrs)
comparator.add_model('Model B', y_true, y_pred_b, sensitive_attrs)
comparator.plot_comparison()
# Obter tabela de comparação
comparison_table = comparator.get_comparison_table()
print(comparison_table)pytest test_fairness_metrics.py -vO dataset Pima Diabetes contém informações de 768 pacientes mulheres de herança Pima:
- Features: Gravidez, glucose, pressão arterial, BMI, idade, etc.
- Target: Presença de diabetes (binário)
- Uso: Previsão de diabetes tipo 2
Neste projeto, criamos grupos sensíveis baseados em:
- Idade: younger vs older (mediana)
- IMC: normal_bmi vs high_bmi (mediana)
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
MIT License
Para dúvidas ou sugestões, entre em contato com a equipe LABDAPS.
Nota: Este é um projeto educacional para demonstrar análises de fairness em modelos de ML clínicos.