Model evaluation
Use when choosing metrics, validating models, or interpreting results. Covers metric selection by problem type, cross-validation strategy, calibration, confusion-matrix analysis, and avoiding misleading scores.From its SKILL.md
npx -y skills add param087/agent-ml-skills --skill model-evaluationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
2.9 KB, 635 tokens by cl100k_base, as published. Nobody here has run it
Model Evaluation
Overview
The wrong metric on the wrong split produces confident, wrong conclusions. Evaluation is about choosing a metric that matches the business cost, validating it on a split that mirrors production, and reporting it honestly with uncertainty.
When to use
- Selecting how to score a model.
- A model "looks great" but you're unsure it's real.
- Comparing candidate models for promotion.
Metric selection
| Problem | Default metric | Use when |
|---|---|---|
| Balanced classification | ROC-AUC, accuracy | classes ~balanced |
| Imbalanced classification | PR-AUC, F1, recall@k | rare positives (fraud, disease) |
| Probabilistic output | Log loss, Brier, calibration | you need trustworthy probabilities |
| Ranking | NDCG, MAP, MRR | recommendation/search |
| Regression | MAE (robust), RMSE (penalize big errors) | match error cost |
| Regression, multiplicative | MAPE / RMSLE | errors scale with magnitude |
Cross-validation strategy
- Default:
StratifiedKFoldfor classification. - Time series:
TimeSeriesSplit— never shuffle; train on past, validate on future. - Grouped data (multiple rows per user):
GroupKFoldso the same group never spans train and test. - Small data: repeated CV; report mean ± std.
Honest reporting
from sklearn.model_selection import cross_val_score, StratifiedKFold
import numpy as np
cv = StratifiedKFold(5, shuffle=True, random_state=42)
scores = cross_val_score(model, X, y, cv=cv, scoring="average_precision")
print(f"PR-AUC: {scores.mean():.3f} ± {scores.std():.3f}") # always report spread
Beyond a single number
- Confusion matrix / classification report at the chosen threshold — accuracy hides per-class failure.
- Threshold tuning — default 0.5 is rarely optimal; pick it from the PR curve to match precision/recall needs.
- Calibration —
CalibratedClassifierCVor reliability curves when probabilities feed decisions. - Slice metrics — evaluate on subgroups to catch fairness/robustness gaps.
Pitfalls
- Accuracy on imbalanced data — 99% accuracy by predicting the majority class. Use PR-AUC/recall.
- Tuning the threshold on the test set — do it on validation.
- Shuffling time-series CV — leaks the future, inflates scores, collapses in production.
- Reporting a point estimate with no variance — a 0.2% gain inside ±1.5% noise is not a gain.
- Evaluating on the data you tuned on — keep a final untouched test set.
Hand-off
A defensible metric + validated score with uncertainty, plus a chosen decision threshold, for experiment-tracking to log and stakeholders to trust.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.