Comprehensive ML model evaluation: performance, robustness, fairness, calibration, explainability, data quality and complexity in one report.
Project description
ai-critic
Avaliação completa de modelos ML — muito além da acurácia.
pip install ai-critic
Por que usar?
Acurácia isolada mente. Um modelo pode ter 99 % de acurácia e ainda assim:
- estar vazando o alvo (data leakage),
- colapsar sob ruído mínimo nos dados de produção,
- ser injusto com algum grupo demográfico,
- ter probabilidades completamente mal calibradas,
- depender de uma única feature que é um proxy do target.
ai-critic quantifica 7 dimensões independentes e entrega um
relatório unificado, acionável e JSON-pronto — em uma linha.
Início rápido
import ai_critic
from ai_critic.reporters import print_report
# modelo já treinado (sklearn-compatible)
report = ai_critic.audit(model, X, y)
print_report(report)
Saída:
══════════════════════════════════════════════════════════════
MODEL AUDIT REPORT
Problem type : multiclass_classification
Overall score: 0.944 ✅ PASS
══════════════════════════════════════════════════════════════
Dimension Score Verdict Summary
──────────────────────────────────────────────────────────────
explainability 0.713 ✅ pass Gini concentration 0.53 | ...
calibration 0.935 ✅ pass Mean ECE: 0.022
performance 0.954 ✅ pass Accuracy 0.960 | F1-macro 0.960 | MCC 0.940
robustness 0.980 ✅ pass Noise drop 0.027 | Dropout drop 0.031
data_quality 1.000 ✅ pass Missing 0.0% | Duplicates 0.7%
complexity 1.000 ✅ pass Feature/sample ratio: 0.03
fairness 1.000 ✅ pass Max gap: 0.000
══════════════════════════════════════════════════════════════
Funciona com pandas DataFrames
Passe um DataFrame diretamente — os nomes das colunas aparecem no relatório:
import pandas as pd
import ai_critic
df = pd.read_csv("dados.csv")
X = df.drop("target", axis=1)
y = df["target"]
report = ai_critic.audit(model, X, y)
Fairness com features sensíveis nomeadas
report = ai_critic.audit(
model, X, y,
sensitive_features=["genero", "faixa_etaria", "regiao"]
)
O relatório mostrará o gap de performance por grupo usando os nomes reais das colunas.
Relatório HTML
from ai_critic.reporters import save_html_report
report = ai_critic.audit(model, X, y)
save_html_report(report, "audit_report.html")
# → abre no browser, dark theme, sem dependências externas
Gate de CI/CD
Bloqueia deploy de modelos abaixo do limiar:
report = ai_critic.audit(model, X, y)
ai_critic.gate(report, min_score=0.75) # levanta RuntimeError se falhar
CLI
# Audita um modelo pickled contra um CSV
ai-critic score model.pkl dados.csv --target target_col
# Com relatório HTML + gate de CI
ai-critic score model.pkl dados.csv \
--target target_col \
--sensitive genero,regiao \
--report audit.html \
--gate 0.75
# Saída JSON completa
ai-critic score model.pkl dados.csv --target y --json
Relatório como dict / JSON
import json
d = report.to_dict()
print(json.dumps(d, indent=2))
Pesos customizados
report = ai_critic.audit(
model, X, y,
weights={"robustness": 2.0, "fairness": 1.5}
)
Execução paralela
report = ai_critic.audit(model, X, y, parallel=True)
Evaluadores customizados
from ai_critic.core.base import BaseEvaluator
from ai_critic.core.types import DimensionResult, ProblemType, Verdict
class MyEvaluator(BaseEvaluator):
name = "my_check"
weight = 1.0
depends_on = [] # ou ["performance"] se precisar do resultado anterior
def evaluate(self, model, X, y, problem_type, context=None):
score = 0.95 # sua lógica aqui
return DimensionResult(
name=self.name,
score=score,
verdict=self._score_to_verdict(score),
summary="Tudo certo.",
)
report = ai_critic.audit(model, X, y, evaluators=[..., MyEvaluator()])
As 7 dimensões
| Dimensão | O que mede |
|---|---|
| performance | Accuracy, F1-macro, MCC, R², RMSE — métricas reais, não apenas acurácia |
| robustness | Degradação sob ruído gaussiano (4 intensidades), dropout de features, injeção de outliers |
| explainability | Importância por permutação, índice de Gini de concentração, detecção de features dominantes |
| calibration | ECE, MCE, Brier Score — as probabilidades do modelo são confiáveis? |
| data_quality | Missing values, duplicatas, features constantes, outliers, leakage por correlação, imbalance |
| fairness | Disparidade de performance entre grupos categóricos, Disparate Impact Ratio, nomes de colunas |
| complexity | Profundidade de árvores, ratio features/amostras, latência de inferência |
Score e veredito
Cada dimensão retorna um score de 0.0 a 1.0 e um veredito:
| Score | Veredito |
|---|---|
| ≥ 0.75 | ✅ pass |
| 0.50 – 0.75 | ⚠️ warning |
| < 0.50 | ❌ fail |
O overall score é a média ponderada pelos weight de cada evaluador.
Compatibilidade
Funciona com qualquer estimador sklearn-compatible, incluindo:
scikit-learn(RandomForest, SVM, LogisticRegression, etc.)XGBoost(XGBClassifier,XGBRegressor)LightGBM(LGBMClassifier,LGBMRegressor)CatBoost(CatBoostClassifier,CatBoostRegressor)- Qualquer objeto com
.predict()e opcionalmente.predict_proba()
Integração com MLflow
import mlflow
import ai_critic
with mlflow.start_run():
report = ai_critic.audit(model, X_test, y_test)
mlflow.log_metric("audit_overall_score", report.overall_score)
for name, dim in report.dimensions.items():
mlflow.log_metric(f"audit_{name}", dim.score)
Licença
MIT
Changelog
Ver CHANGELOG.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_critic-4.0.0.tar.gz.
File metadata
- Download URL: ai_critic-4.0.0.tar.gz
- Upload date:
- Size: 26.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
138aa40c104fd7750e8a9b4735be241615ca4cbfd6b0e22f38ff8600d27c4f77
|
|
| MD5 |
ca56d7898ac31d519d7eabc4b647a964
|
|
| BLAKE2b-256 |
a06a06c90577d6c4250329626bb537d4f58df28720b039d022f39f4e405231f7
|
File details
Details for the file ai_critic-4.0.0-py3-none-any.whl.
File metadata
- Download URL: ai_critic-4.0.0-py3-none-any.whl
- Upload date:
- Size: 30.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47e06757cf0fe1cdf5066545e4d279314f927cd350f62e568e14a18466198677
|
|
| MD5 |
53858961212f14c1286db1efdfe22f64
|
|
| BLAKE2b-256 |
c4503340cd47c4c3e9bbf6c142d2f361335e940cd28f89ad99c70bd5aaafc64e
|