report (MetricsReport)

MetricsReport is the single flat dataclass that carries a full evaluation result for either regime. The same object exposes the detection-style ranking metrics (roc_auc / pr_auc / brier / mcc) and the forecasting-style alarm metrics (sensitivity / fp_per_hour / ioc / time_in_warning_frac), plus — since v0.2.0 — the forecasting confusion-matrix scores (specificity / ppv / npv / forecasting_f1 with the raw n_tn / n_opportunities denominators) and the observed lead time (lead_time_mean / lead_time_median; the per-seizure array lives in extras["lead_times_seconds"]). See The Alarm Confusion Matrix: Definitions and the SPH/SOP Framework for the definitions.

It serialises three ways: to_dict() (JSON-friendly), to_frame() (a one-row pandas.DataFrame that stacks cleanly across patients/folds), and to_json().

MetricsReport — frozen dataclass that carries a full evaluation result.

Designed so the same object can be: - serialised to JSON for stx.io.save(rep.to_dict(), “metrics.json”) - materialised as a one-row pandas DataFrame for stacking across patients/folds - pretty-printed for terminal logs.

class scitex_seizure_metrics.report.MetricsReport(name='', regime='', roc_auc=None, pr_auc=None, brier=None, balanced_accuracy=None, mcc=None, sensitivity=None, precision=None, f1=None, fp_per_day=None, fp_per_hour=None, n_ref_events=None, n_tp=None, n_fp=None, sph_seconds=None, sop_seconds=None, time_in_warning_frac=None, ioc=None, surrogate_sensitivity=None, specificity=None, ppv=None, npv=None, forecasting_f1=None, n_tn=None, n_opportunities=None, lead_time_mean=None, lead_time_median=None, extras=<factory>)[source]

Bases: object

Single-row evaluation result.

Fields are deliberately flat so the report stacks cleanly across patients/folds via pd.concat([r.to_frame() for r in reports]).

Parameters:
  • name (str)

  • regime (str)

  • roc_auc (float | None)

  • pr_auc (float | None)

  • brier (float | None)

  • balanced_accuracy (float | None)

  • mcc (float | None)

  • sensitivity (float | None)

  • precision (float | None)

  • f1 (float | None)

  • fp_per_day (float | None)

  • fp_per_hour (float | None)

  • n_ref_events (int | None)

  • n_tp (int | None)

  • n_fp (int | None)

  • sph_seconds (float | None)

  • sop_seconds (float | None)

  • time_in_warning_frac (float | None)

  • ioc (float | None)

  • surrogate_sensitivity (float | None)

  • specificity (float | None)

  • ppv (float | None)

  • npv (float | None)

  • forecasting_f1 (float | None)

  • n_tn (int | None)

  • n_opportunities (int | None)

  • lead_time_mean (float | None)

  • lead_time_median (float | None)

  • extras (dict[str, Any])

balanced_accuracy: float | None = None
brier: float | None = None
extras: dict[str, Any]
f1: float | None = None
forecasting_f1: float | None = None
fp_per_day: float | None = None
fp_per_hour: float | None = None
ioc: float | None = None
lead_time_mean: float | None = None
lead_time_median: float | None = None
mcc: float | None = None
n_fp: int | None = None
n_opportunities: int | None = None
n_ref_events: int | None = None
n_tn: int | None = None
n_tp: int | None = None
name: str = ''
npv: float | None = None
ppv: float | None = None
pr_auc: float | None = None
precision: float | None = None
regime: str = ''
roc_auc: float | None = None
sensitivity: float | None = None
sop_seconds: float | None = None
specificity: float | None = None
sph_seconds: float | None = None
surrogate_sensitivity: float | None = None
time_in_warning_frac: float | None = None
to_dict()[source]
Return type:

dict[str, Any]

to_frame()[source]
Return type:

DataFrame

to_json()[source]
Return type:

str