Full API¶
scitex_seizure_metrics — unified evaluation for seizure detection / forecasting.
Public API: - detection.evaluate(y_true, y_proba, threshold, fs, name) - forecasting.evaluate(alarms, seizures, policy, total_recording_time, …) - forecasting.evaluate_stream(proba, times, seizures, policy, …) - forecasting.sweep_thresholds(proba, times, seizures, policy, …) - forecasting.sweep_policies(proba, times, seizures, policies, …) - forecasting.bootstrap_ci(values, n_boot, ci, rng_seed) - bridge.sample_to_alarm(…) / bridge.alarm_to_sample(…) - surrogates.{poisson, periodic, persistence} (registered) - plots.{sensitivity_vs_fp_per_hour, sample_vs_alarm_scatter,
cadence_ablation, ioc_vs_surrogate, metric_correlation_heatmap}
Data classes: - AlarmPolicy(sph_seconds, sop_seconds, cadence_seconds,
refractory_seconds, alarm_threshold, merge_consecutive, fp_denominator)
MetricsReport (frozen single-row report; .to_frame(), .to_json())
- class scitex_seizure_metrics.AlarmPolicy(sph_seconds, sop_seconds, cadence_seconds, refractory_seconds, alarm_threshold=0.5, merge_consecutive=True, fp_denominator='interictal')[source]¶
Bases:
objectKnobs that govern how a continuous prediction stream is converted into discrete alarms, and how those alarms are matched to seizures.
Every alarm-based metric in scitex_seizure_metrics requires an explicit AlarmPolicy so reports are reproducible across papers.
- Parameters:
sph_seconds (float) – Seizure Prediction Horizon (lead time required between an alarm and the earliest valid seizure). Andrade et al. 2024.
sop_seconds (float) – Seizure Occurrence Period (validity window after SPH within which the seizure must occur).
cadence_seconds (float) – Time step between successive predictions in the continuous stream. 60 s ≈ once-per-minute, 360 s ≈ once-per- 6-min. Defines the maximum theoretical alarm rate before refractory.
refractory_seconds (float) – Minimum gap between consecutive alarms. After an alarm fires, the next earliest alarm is suppressed until this much time has passed. Common choices: SOP, 30 min, 1 h.
alarm_threshold (float) – Probability threshold above which a window’s prediction triggers an alarm-candidate.
merge_consecutive (bool) – If True, runs of contiguous above-threshold windows count as one alarm (fired at the first window).
fp_denominator (Literal['interictal', 'total']) – Whether FP/hr is normalised by total recording time or by interictal-only time (with seizure ± SOP windows removed). The Mormann tradition is “interictal”.
- class scitex_seizure_metrics.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, extras=<factory>)[source]¶
Bases:
objectSingle-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)