ml-experiment-standards — Claude Code skill: leak-free ML validation
Makes the agent audit leakage, pick splits and justify metrics before a model gets trained. Useful when a result has to replicate, not just look good.
npx skills add muend/geoai-skills --skill ml-experiment-standards -a claude-codeWhat ml-experiment-standards does
The skill fires on training, validation, tuning, benchmarking, or any claim that a predictive model is ready. It starts with EDA: distributions, missingness, outliers, target balance. Metric and loss choices follow from that, so skipping it leaves the agent guessing.
Leakage gets its own pass. At each split the agent answers whether training rows carry indirect information about test samples and writes that answer into the code as a comment. Spatial data goes through spatial block CV, grouped data through GroupKFold, time series through TimeSeriesSplit. Scalers, encoders and imputers are fit on train only, which sklearn.pipeline.Pipeline handles by construction.
No metric is picked by default — one sentence of rationale is required, and every estimate needs a bootstrap CI or a spread across folds. Training scripts follow a fixed shape: a dataclass config, a set seed, and a runs/run_meta.json log. Skip the leakage audit and any uplift claim collapses, because post-split preprocessing and non-independent test units break it first.
What it helps with
- check whether test rows leak into training
- choose a split for spatial or grouped data
- justify a metric instead of defaulting to accuracy
- attach confidence intervals to model scores
- write a reproducible training script with a fixed seed
Example prompts for the agent
- Train a model on this data and show the leakage audit and split rationale first
- Verify that preprocessing is fit on train only and rewrite the pipeline
- Compare the baseline and the model across folds and tell me if the gap is real
How to install ml-experiment-standards
1Skills CLI (Vercel)
npx skills add muend/geoai-skills --skill ml-experiment-standards -a claude-code2Manually: put the files in place
~/.claude/skills/ml-experiment-standards/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/ml-experiment-standards/
1Skills CLI (Vercel)
npx skills add muend/geoai-skills --skill ml-experiment-standards -a codex2Manually: put the files in place
.agents/skills/ml-experiment-standards/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add muend/geoai-skills --skill ml-experiment-standards -a cursor2Manually: put the files in place
.cursor/skills/ml-experiment-standards/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install muend/geoai-skills ml-experiment-standards2Manually: put the files in place
.github/skills/ml-experiment-standards/SKILL.md1Skills CLI (Vercel)
npx skills add muend/geoai-skills --skill ml-experiment-standards -a gemini-cli2Platform CLI
gemini skills install https://github.com/muend/geoai-skills --path skills/ml-experiment-standardsManually: put the files in place
.devin/skills/ml-experiment-standards/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add muend/geoai-skills --skill ml-experiment-standards -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about ml-experiment-standards
How do I install ml-experiment-standards in Claude Code?
Run npx skills add muend/geoai-skills --skill ml-experiment-standards -a claude-code. The skill file lands at ~/.claude/skills/ml-experiment-standards/SKILL.md.
What does ml-experiment-standards do?
It sets the standard for an ML experiment: EDA before modeling, a leakage audit, valid splits, justified metrics with uncertainty, a reproducible script, and an honest report.
When should I not use this skill?
It is not meant for descriptive EDA or non-predictive statistical inference. Spatial statistics and geostatistics belong to other tools.
Source text
SKILL.md · MIT
---
name: ml-experiment-standards
description: >-
Always invoke for training, validating, tuning, benchmarking, or claiming
readiness of a predictive model. Covers leakage audits, spatial and grouped
splits, metrics, reproducibility, and honest reporting. Invoke especially
when spatial dependence, split design, or deployment geography is unknown;
uncertainty is a reason to use this skill. Do not trigger for descriptive
EDA or non-predictive statistical inference.
license: MIT
metadata:
author: Muhammed Enes Duran
---
# ML Experiment Standards
Purpose: every ML job (quick prototypes included) is reproducible,
leakage-free, and metric-justified. These are not optional polish; every
skipped item typically returns as "the model collapsed in production" or
"the result didn't replicate".
## 1. EDA comes first
Before any model, produce and show: distributions, missingness rates,
outliers, target balance, salient correlations. Metric and loss choice
depend on this information; a model recommendation without EDA is a guess.
## 2. Leakage audit
At every split decision, answer explicitly (and write the answer as a code
comment): "Does the training set contain indirect information about any
test sample?"
| Data type | Correct split | Why |
|---|---|---|
| Independent samples | Stratified k-fold | Preserves class ratios |
| Time series | TimeSeriesSplit / walk-forward | Future must not leak into past |
| **Spatial data** | Spatial block CV — see `references/spatial-cv-protocol.md` | Neighbors are near-duplicates |
| Grouped data (patient, parcel, scene) | GroupKFold | A group must not straddle the split |
- Scalers/encoders/imputers are **fit on train only**; the clean path is
`sklearn.pipeline.Pipeline` — CV then fits correctly by construction.
- Target-derived features (target encoding etc.) must be computed
out-of-fold, and shown to be.
The spatial protocol in `references/spatial-cv-protocol.md` is the single
canonical source for this repo — other skills link here; do not restate it.
## 3. Metric selection — justified
Never choose a metric by default; write a one-sentence rationale:
- Imbalanced classes → **F1 / AUC-PR**, not accuracy (accuracy rewards
majority-class memorization).
- Segmentation → **IoU/Dice** (pixel accuracy is inflated by background).
- Regression → RMSE (sensitive to large errors) vs MAE (robust) vs R²
(variance explained) — justify from the use case.
- Every point estimate gets uncertainty: bootstrap CI or mean ± std across
CV folds. A single number hides whether a difference is signal or noise.
## 4. Reproducibility skeleton
Every training script follows this shape (script-first; no notebook magic):
```python
"""Experiment: <name>. Goal and success criterion: <one sentence>."""
from dataclasses import dataclass, asdict
import json, random
import numpy as np
@dataclass
class Config:
seed: int = 42
lr: float = 1e-3
batch_size: int = 32
epochs: int = 100
patience: int = 10 # early stopping
def set_seed(seed: int) -> None:
random.seed(seed)
np.random.seed(seed)
# if torch: torch.manual_seed(seed); torch.cuda.manual_seed_all(seed)
def main(cfg: Config) -> None:
set_seed(cfg.seed)
... # data -> split -> pipeline -> train -> evaluate
with open("runs/run_meta.json", "w", encoding="utf-8") as f:
json.dump({"config": asdict(cfg), "metrics": metrics}, f, indent=2)
if __name__ == "__main__":
main(Config())
```
- Config lives in a dataclass/YAML, never hardcoded — sweeps and run
comparison depend on it.
- Pin library versions (`pip freeze > requirements.txt`).
- Use MLflow/W&B when available; the JSON log above is the minimum.
## 5. Deep learning extras
- **Loss rationale**: Dice/Dice+CE for imbalanced segmentation; write why.
Focal only after comparison — not a free win.
- **Augmentation rationale**: state which transforms respect the physics
of the problem (orientation-dependent tasks forbid some rotations;
multispectral forbids naive color jitter).
- **Overfitting control**: early stopping with patience + a train/val
curve in the report; no curve, no "the model is good".
- **Capacity order**: small model + simple baseline first (logistic
regression, RF); a deep model that can't beat the baseline is a data
problem, not an architecture problem.
- EO-specific chipping/inference details → `geo-deep-learning`.
## 6. System context (MLOps)
Position every model in its chain in one paragraph: data source →
cleaning → features/versioning → training → evaluation → deployment
(batch/real-time) → monitoring (data/model drift). Even for a prototype,
note "what this step becomes in production".
## 7. Report format
```
## Experiment: <name>
- Data: n=<>, split: <strategy + rationale>
- Baseline: <model> → <metric ± CI>
- Model: <model> → <metric ± CI>
- Leakage audit: <what was checked>
- Next step: <single recommendation>
```
When reporting differences, respect statistical honesty: if the gap
doesn't exceed the across-fold std, say "no clear difference" — no
p-hacking, no selective reporting.
## Execution contract
- **Workflow:** define prediction target and decision use; establish a baseline; audit leakage; create spatially valid splits; train reproducibly; quantify uncertainty; inspect errors and deployment fit.
- **Decision rules:** apply this skill only to predictive model experiments; use spatial statistics for inference, geostatistics for sampled-surface estimation, and descriptive analysis without forcing a model.
- **Verification protocol:** reproduce from a clean environment, compare against baseline across folds or seeds, inspect spatial residuals, verify split independence, and test the final decision threshold.
- **Failure modes:** invalidate uplift claims for leakage, post-split preprocessing, inappropriate metrics, non-independent test units, selective runs, or train-serving skew.
- **Deliverables:** experiment configuration, split and seed manifest, baseline and model metrics with uncertainty, leakage audit, error analysis, artifacts, and deployment caveats.
- **Source freshness:** consult [the authoritative source registry](references/authoritative-sources.md) before using version-sensitive split, metric, or reproducibility APIs.
© Muhammed Enes Duran · MIT · muend/geoai-skills