Reportes de evaluación (clasificación/regresión/forecast) a Markdown con gráficos
Project description
evalcards
evalcards es una librería para Python que genera reportes de evaluación para modelos supervisados en Markdown, con métricas y gráficos listos para usar en informes. Soporta:
- Clasificación: binaria y multiclase (OvR) con métricas como
accuracy,balanced_accuracy,mcc,log_loss(si hay probabilidades),roc_auc/pr_auc, además de curvas ROC/PR por clase. - Regresión:
MAE,MSE,RMSE,R²,MedAE,MAPE,RMSLE. - Forecasting (series de tiempo):
MAE,MSE,RMSE,MedAE,MAPE,RMSLE, sMAPE (%) y MASE. - Clasificación multi-label: matriz de confusión y curvas ROC/PR por etiqueta si se pasan probabilidades.
- Export JSON métricas y rutas de imágenes para integración en pipelines (nuevo en v0.2.11).
Instalación
pip install evalcards
Uso rápido (Python)
from evalcards import make_report
# y_true: etiquetas/valores reales
# y_pred: etiquetas/valores predichos
# y_proba (opcional):
# - binaria: vector 1D con prob. de la clase positiva
# - multiclase: matriz (n_samples, n_classes) con prob. por clase
# - multi-label: matriz (n_samples, n_labels) con prob. por etiqueta
path = make_report(
y_true, y_pred,
y_proba=proba, # opcional
path="reporte.md", # nombre del archivo Markdown
title="Mi modelo" # título del reporte
)
print(path) # ruta del reporte generado
Qué evalúa
-
Clasificación (binaria/multiclase/multi-label) Métricas:
accuracy,precision/recall/F1(macro/weighted),balanced_accuracy,mcc,log_loss(si hay probabilidades). AUC / AUPRC:roc_aucypr_auc(binaria),roc_auc_ovr_macroypr_auc_macro(multiclase),roc_auc_macro(multi-label). Gráficos: matriz de confusión, ROC y PR (por clase en multiclase, por etiqueta en multi-label). -
Regresión Métricas:
MAE,MSE,RMSE,R²,MedAE,MAPE,RMSLE. Gráficos: Ajuste (y vs ŷ) y Residuales. -
Forecasting Métricas:
MAE,MSE,RMSE,MedAE,MAPE,RMSLE, sMAPE (%), MASE. Parámetros extra:season(p.ej. 12) einsample(serie de entrenamiento para MASE). Gráficos: Ajuste y Residuales.
Ejemplos
1) Clasificación binaria (scikit-learn)
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from evalcards import make_report
X, y = make_classification(n_samples=600, n_features=10, random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
clf = LogisticRegression(max_iter=1000).fit(X_tr, y_tr)
y_pred = clf.predict(X_te)
proba = clf.predict_proba(X_te)[:, 1]
make_report(y_te, y_pred, y_proba=proba, path="rep_bin.md", title="Clasificación binaria")
2) Multiclase (OvR)
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
@@ -107,51 +107,51 @@ X, y = make_multilabel_classification(n_samples=300, n_features=12, n_classes=4,
clf = MultiOutputClassifier(LogisticRegression(max_iter=1000)).fit(X, y)
y_pred = clf.predict(X)
# Probabilidad por etiqueta (matriz n_samples x n_labels)
y_proba = np.stack([m.predict_proba(X)[:,1] for m in clf.estimators_], axis=1)
make_report(y, y_pred, y_proba=y_proba, path="rep_multilabel.md", title="Multi-label Example", lang="en",
labels=[f"Tag_{i}" for i in range(y.shape[1])])
4) Regresión
from sklearn.datasets import make_regression
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from evalcards import make_report
X, y = make_regression(n_samples=600, n_features=8, noise=10, random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
reg = RandomForestRegressor(random_state=0).fit(X_tr, y_tr)
y_pred = reg.predict(X_te)
make_report(y_te, y_pred, path="rep_reg.md", title="Regresión")
5) Forecasting (sMAPE/MASE + métricas extra)
import numpy as np
from evalcards import make_report
rng = np.random.default_rng(0)
t = np.arange(360)
y = 10 + 0.05*t + 5*np.sin(2*np.pi*t/12) + rng.normal(0,1,360)
y_train, y_test = y[:300], y[300:]
y_hat = y_test + rng.normal(0, 1.2, y_test.size) # predicción de ejemplo
make_report(
y_test, y_hat,
task="forecast", season=12, insample=y_train,
path="rep_forecast.md", title="Forecast"
)
Salidas y PATH
- Un archivo Markdown con las métricas y referencias a imágenes.
- Imágenes PNG (confusión, ROC/PR, ajuste, residuales).
- Binaria:
confusion.png,roc.png,pr.png - Multiclase:
confusion.png,roc_class_<clase>.png,pr_class_<clase>.png - Multi-label:
confusion_<etiqueta>.png,roc_label_<etiqueta>.png,pr_label_<etiqueta>.png@@ -171,52 +171,52 @@ make_report(y_true, y_pred, path="rep.md", lang="en", title="My Model Report")
- Binaria:
- JSON (opcional): contiene
metrics,chartsymarkdown.
Entradas esperadas (formas comunes)
- Clasificación
y_true: enteros 0..K-1 (o etiquetas string).y_pred: del mismo tipo/espacio de clases quey_true.y_proba(opcional):- Binaria: vector 1D con prob. de la clase positiva.
- Multiclase: matriz
(n_samples, n_classes)con una columna por clase (mismo orden que tu modelo). - Multi-label: matriz
(n_samples, n_labels)con una columna por etiqueta (proba de pertenecer).
- Regresión / Forecast
y_true,y_pred: arrays 1D de floats.insample(forecast): serie de entrenamiento para MASE;seasonsegún la estacionalidad (ej. 12 mensual/anual).
Compatibilidad de modelos
Funciona con cualquier modelo que produzca predict (y opcionalmente predict_proba):
- scikit-learn, XGBoost/LightGBM/CatBoost, statsmodels, Prophet/NeuralProphet, Keras/PyTorch.
- Multiclase:
y_probacomo matriz (una columna por clase) ylabelspara nombres.
Roadmap
v0.3 — Salida y métricas clave
- Reporte HTML autocontenido (
format="md|html") - Export JSON** de métricas/paths (
--export-json) - Métricas nuevas (clasificación): AUPRC, Balanced Accuracy, MCC, Log Loss
- Métricas nuevas (regresión): MAPE, MedAE, RMSLE
v0.4 — Multiclase y umbrales
- ROC/PR micro & macro (multiclase) +
roc_auc_macro,average_precision_macro - Análisis de umbral (curvas precisión–recobrado–F1 vs umbral + mejor umbral por métrica)
- Matriz de confusión normalizada (global y por clase)
v0.5 — Probabilidades y comparación
- Calibración: Brier score + curva de confiabilidad
- Comparación multi-modelo en un único reporte (tabla “mejor por métrica”)
- Curvas gain/lift (opcional)
v0.6 — DX, formatos y docs
- Nuevos formatos de entrada: Parquet/Feather/NPZ
- Config de proyecto (
.evalcards.toml) para defaults (outdir, títulos, idioma) - Docs con MkDocs + GitHub Pages (guía, API, ejemplos ejecutables)
- Plantillas/temas Jinja2 (branding)
Ideas
- Soporte multi-label (completado)
- Métricas de ranking (MAP/NDCG)
- Curvas de calibración por bins configurables
- QQ-plot e histograma de residuales (regresión)
- i18n ES/EN (completado)
Documentación
Guía | Referencia de API | Changelog | Demo Visual
Licencia
MIT
Autor
Ricardo Urdaneta
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
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 evalcards-0.2.11.tar.gz.
File metadata
- Download URL: evalcards-0.2.11.tar.gz
- Upload date:
- Size: 19.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c01242223d58de534046d728a01fa9609f532ad41bdcef83cbad3f2878977b9
|
|
| MD5 |
02f3fb0f0cea6aa56736bf7b77b915e5
|
|
| BLAKE2b-256 |
65098a454ff795891c233f2631da3dbd262b496db067aaaf8ac879154fb2f50b
|
Provenance
The following attestation bundles were made for evalcards-0.2.11.tar.gz:
Publisher:
release.yml on Ricardouchub/evalcards
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evalcards-0.2.11.tar.gz -
Subject digest:
6c01242223d58de534046d728a01fa9609f532ad41bdcef83cbad3f2878977b9 - Sigstore transparency entry: 541197936
- Sigstore integration time:
-
Permalink:
Ricardouchub/evalcards@51578a8524e52f60a938320ad4892afc6066ab7a -
Branch / Tag:
refs/tags/v0.2.11 - Owner: https://github.com/Ricardouchub
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@51578a8524e52f60a938320ad4892afc6066ab7a -
Trigger Event:
push
-
Statement type:
File details
Details for the file evalcards-0.2.11-py3-none-any.whl.
File metadata
- Download URL: evalcards-0.2.11-py3-none-any.whl
- Upload date:
- Size: 11.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
981174b258674945b05d62dc1c7579e80862a5b9d048ddda858b9746e90dd7bb
|
|
| MD5 |
1374b5b1b2b5dceb5bba19dbbc3f6139
|
|
| BLAKE2b-256 |
0516d5998d0c2e060733bd51b827ad57826e5ac264669a2196415e9d68d22498
|
Provenance
The following attestation bundles were made for evalcards-0.2.11-py3-none-any.whl:
Publisher:
release.yml on Ricardouchub/evalcards
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evalcards-0.2.11-py3-none-any.whl -
Subject digest:
981174b258674945b05d62dc1c7579e80862a5b9d048ddda858b9746e90dd7bb - Sigstore transparency entry: 541197937
- Sigstore integration time:
-
Permalink:
Ricardouchub/evalcards@51578a8524e52f60a938320ad4892afc6066ab7a -
Branch / Tag:
refs/tags/v0.2.11 - Owner: https://github.com/Ricardouchub
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@51578a8524e52f60a938320ad4892afc6066ab7a -
Trigger Event:
push
-
Statement type: