Nixtla Baseline Review
Overview
Review one concrete Baseline Lab result set. Rank models from observed metrics,
show both aggregate and per-series evidence, and keep benchmark conclusions
inside the dataset, horizon, and series sample that produced them.
Prerequisites
- Provide a
results_*.csv path or a directory containing one.
- Require columns
series_id, model, sMAPE, and MASE.
- Treat this repository as a community integration, not an official Nixtla
product or an independent reproduction of an entire benchmark.
Instructions
Resolve the input with Glob. If several result files match, list their
paths and modification context and ask the user to choose; never silently
combine separate runs or pick a filename as "latest" without confirmation.
Use Read to inspect the header, representative rows, sibling summary, and
run_manifest.json or compat_info.json when present. Record the dataset,
horizon, series count, models, frequency, and seasonal period that are
actually supported by those artifacts.
Run the bundled analyzer:
python3 ${CLAUDE_SKILL_DIR}/scripts/analyze_results.py path/to/results.csv
Check the analyzer receipt for rejected rows, duplicate series/model pairs,
ties, model coverage, and non-finite values. Stop on schema or numeric
failures instead of averaging partial data.
Rank models by the metric the user requested; otherwise lead with mean and
median sMAPE, then report MASE and win counts as supporting evidence. Do not
turn a small mean difference into a categorical claim.
Inspect series where models disagree or all reported errors are high. State
patterns as hypotheses unless timestamps, seasonality, or covariates in the
source data actually support them.
Give a bounded recommendation for the observed evaluation only. Require
out-of-sample validation, cost/latency checks, and operational review before
calling any model production-ready.
Metric guardrails
- Lower sMAPE and MASE are better, but neither has a universal "good" threshold.
- Interpret MASE against the scaling denominator and seasonal period used by
the run. A model's MASE below 1 indicates lower test MAE than that in-sample
naive scale; it does not prove a fixed percentage improvement in every case.
- Do not claim a SeasonalNaive forecast must have MASE exactly 1 on held-out
data. See the result and metric contract.
Validation
- Cite the exact CSV and any manifest/summary used.
- Reconcile reported row count with series count multiplied by model coverage.
- Show ties and missing model/series combinations rather than hiding them.
- Preserve units: Baseline Lab writes sMAPE as percentage points.
- Never fabricate TimeGPT, benchmark, or production-performance results.
Output
Return scope and provenance, data-quality receipt, per-model mean/median/std-dev
sMAPE, mean/median MASE, series win counts and ties, failure cases, a scoped
recommendation, uncertainties, and reproducible next steps.
Error Handling
- No result file: explain the expected filename/schema and point to the
Baseline Lab run workflow; do not manufacture sample metrics.
- Several result files: ask the user to select or explicitly approve a
comparison across runs.
- Invalid or duplicate rows: report exact row numbers and stop aggregation.
- Missing run metadata: analyze the CSV but label dataset/horizon/frequency
unknown unless the filename or sibling artifacts establish them.
- TimeGPT requested without results: state that no comparison is available;
never infer hosted-model performance from StatsForecast rows.
Examples
Use prompts that name the evidence and comparison boundary:
Review nixtla_baseline_m4/results_M4_Daily_h7.csv. Rank by median sMAPE,
show ties and missing coverage, and keep conclusions limited to this run.
Compare AutoETS and AutoTheta using both sMAPE and MASE. Identify series where
the metrics disagree and do not use generic accuracy labels.
Resources
- Result schema and metric guardrails
- Analyzer:
scripts/analyze_results.py
- Runtime source:
005-plugins/nixtla-baseline-lab/scripts/nixtla_baseline_mcp.py
1---2name: nixtla-baseline-review3description: Analyze real sMAPE and MASE results produced by the community Nixtla Baseline Lab, compare models, and surface fragile series without inventing benchmarks. Use when reviewing StatsForecast output; trigger with "baseline review", "interpret sMAPE/MASE", or "compare AutoETS and AutoTheta".4license: MIT5---67# Nixtla Baseline Review89## Overview1011Review one concrete Baseline Lab result set. Rank models from observed metrics,12show both aggregate and per-series evidence, and keep benchmark conclusions13inside the dataset, horizon, and series sample that produced them.1415## Prerequisites1617- Provide a `results_*.csv` path or a directory containing one.18- Require columns `series_id`, `model`, `sMAPE`, and `MASE`.19- Treat this repository as a community integration, not an official Nixtla20 product or an independent reproduction of an entire benchmark.2122## Instructions23241. Resolve the input with `Glob`. If several result files match, list their25 paths and modification context and ask the user to choose; never silently26 combine separate runs or pick a filename as "latest" without confirmation.272. Use `Read` to inspect the header, representative rows, sibling summary, and28 `run_manifest.json` or `compat_info.json` when present. Record the dataset,29 horizon, series count, models, frequency, and seasonal period that are30 actually supported by those artifacts.313. Run the bundled analyzer:3233 ```bash34 python3 ${CLAUDE_SKILL_DIR}/scripts/analyze_results.py path/to/results.csv35 ```36374. Check the analyzer receipt for rejected rows, duplicate series/model pairs,38 ties, model coverage, and non-finite values. Stop on schema or numeric39 failures instead of averaging partial data.405. Rank models by the metric the user requested; otherwise lead with mean and41 median sMAPE, then report MASE and win counts as supporting evidence. Do not42 turn a small mean difference into a categorical claim.436. Inspect series where models disagree or all reported errors are high. State44 patterns as hypotheses unless timestamps, seasonality, or covariates in the45 source data actually support them.467. Give a bounded recommendation for the observed evaluation only. Require47 out-of-sample validation, cost/latency checks, and operational review before48 calling any model production-ready.4950## Metric guardrails5152- Lower sMAPE and MASE are better, but neither has a universal "good" threshold.53- Interpret MASE against the scaling denominator and seasonal period used by54 the run. A model's MASE below 1 indicates lower test MAE than that in-sample55 naive scale; it does not prove a fixed percentage improvement in every case.56- Do not claim a SeasonalNaive forecast must have MASE exactly 1 on held-out57 data. See [the result and metric contract](references/metric-contract.md).5859## Validation6061- Cite the exact CSV and any manifest/summary used.62- Reconcile reported row count with series count multiplied by model coverage.63- Show ties and missing model/series combinations rather than hiding them.64- Preserve units: Baseline Lab writes sMAPE as percentage points.65- Never fabricate TimeGPT, benchmark, or production-performance results.6667## Output6869Return scope and provenance, data-quality receipt, per-model mean/median/std-dev70sMAPE, mean/median MASE, series win counts and ties, failure cases, a scoped71recommendation, uncertainties, and reproducible next steps.7273## Error Handling7475- **No result file:** explain the expected filename/schema and point to the76 Baseline Lab run workflow; do not manufacture sample metrics.77- **Several result files:** ask the user to select or explicitly approve a78 comparison across runs.79- **Invalid or duplicate rows:** report exact row numbers and stop aggregation.80- **Missing run metadata:** analyze the CSV but label dataset/horizon/frequency81 unknown unless the filename or sibling artifacts establish them.82- **TimeGPT requested without results:** state that no comparison is available;83 never infer hosted-model performance from StatsForecast rows.8485## Examples8687Use prompts that name the evidence and comparison boundary:8889```text90Review nixtla_baseline_m4/results_M4_Daily_h7.csv. Rank by median sMAPE,91show ties and missing coverage, and keep conclusions limited to this run.92```9394```text95Compare AutoETS and AutoTheta using both sMAPE and MASE. Identify series where96the metrics disagree and do not use generic accuracy labels.97```9899## Resources100101- [Result schema and metric guardrails](references/metric-contract.md)102- Analyzer: `scripts/analyze_results.py`103- Runtime source: `005-plugins/nixtla-baseline-lab/scripts/nixtla_baseline_mcp.py`