Evaluation Semantics¶
This page defines what each metric means, how it is computed, and when results are comparable.
Per-Event NLL¶
The primary benchmark metric is per-event negative log-likelihood:
- N is the total number of events across all test sequences.
p(t, s | history)is the joint intensity or density evaluated at each observed event.- Lower NLL is better.
This is the value stored in RunResult.test_nll and reported in benchmark tables.
Exact vs Approximate NLL¶
| NLL type | What it means | Families |
|---|---|---|
| Exact | True log-likelihood of the point process | auto_stpp, deep_stpp, nsmpp, njsde, neural_*, factorized families |
| Approximate (score-matching) | Score-matching surrogate for the log-likelihood | smash |
| Approximate (ELBO) | Evidence lower bound on the log-likelihood | diffusion_stpp |
Exact and approximate NLL measure likelihood differently; the Model Capability Matrix lists which kind each preset reports.
Normalization and Comparability¶
RunResult.norm_stats records whether normalization was applied and the scaling parameters:
{
"normalize": true,
"time_mean": 5.2,
"time_std": 3.1,
"loc_mean": [0.5, 0.5],
"loc_std": [0.3, 0.3]
}
NLL values are comparable across presets only when all use the same normalization setting. The bench command enforces this via the execution contract.
To convert normalised NLL to original-coordinate NLL:
Metric Profiles¶
Seahorse gates metrics behind explicit profiles so expensive sampling or grid work is always opt-in:
| Profile | Metrics computed | Requires |
|---|---|---|
core |
test_nll, temporal_nll, spatial_nll, mean_seq_nll |
Exact or approximate NLL |
nll |
Extended NLL-family checks | Exact NLL |
predictive |
CRPS, energy score, MAE, RMSE, coverage | Next-event sampling |
generative |
Distribution metrics over full rollouts | Generative sampling |
autoregressive |
Fixed-prefix degradation metrics | Generative sampling |
surface |
Intensity/density grid diagnostics | Intensity surface query |
full |
All registered benchmark metrics | All of the above |
Predictive Metrics¶
Predictive metrics use sampled next-event predictions. They measure how well a model predicts the next event given the observed history:
| Metric | Temporal | Spatial |
|---|---|---|
| CRPS | Continuous ranked probability score | — |
| Energy score | — | Multivariate energy score |
| MAE | Mean absolute error in time | Mean absolute error in space |
| RMSE | Root mean squared error in time | Root mean squared error in space |
| Coverage | Marginal calibration (temporal) | — |
Unavailable Metrics¶
When a metric is marked available: false in metrics.json, it means the model does not support the required capability — not that evaluation failed. Common reasons:
| Reason | What to do |
|---|---|
missing NLL capability |
Model uses a surrogate objective; switch to a profile the model supports |
missing sampling capability |
Model does not implement sample_next; check the capability matrix |
missing surface capability |
Model does not expose an intensity grid; try a different preset |
heavy artifacts not planned |
You requested a metric that needs sampling but used --metric-profile core; re-run with --metric-profile predictive |
Temporal vs Spatial NLL¶
For factorized families (poisson_gmm, hawkes_gmm, etc.), the joint log-likelihood decomposes:
Seahorse reports temporal_nll and spatial_nll separately for these families. Non-factorized families report only the joint test_nll.