Story · from first data to the frozen model

How this project got here, and what happens next

A noisy home-built board, a public clinical dataset, and a written record of every version we tried, including the ones the rules rejected.

Part I · What we did

Every step below has a number behind it and a link to where the evidence lives.

  1. Before 17 Oct

    A board, then a better dataset

    We built a 10-bit Arduino board that reads EEG, ECG, EMG and motion. It is noisy: 58–60 % of its samples sit at the converter's limits. It proves the idea can be wired and streamed, not that it detects seizures. Model results therefore come from SeizeIT2, a public clinical dataset of 125 patients, 11,626 hours and 883 seizures, recorded with behind-the-ear EEG and wired ECG, EMG and accelerometer.

    The hardware →
  2. 17 Oct

    Fixing the data before trusting the model

    The first real files broke four assumptions. Sensor dropouts, where one or two samples are pulled to zero, became 50–200 µV spikes after filtering. Accelerometer scale differed between recordings, so every run is now calibrated to 1 g at rest. A training script could have silently removed ECG from Model B. And the false-alarm count included hours that should have been masked. All four were fixed before a single feature table was kept.

  3. 17 Oct

    Measure the timing before building on it

    In a study of 695 development seizures, focal-to-bilateral tonic-clonic seizures showed the EEG change first, followed by heart rate, accelerometer and EMG (median lags of +3.5 to +12 s). Our first hypothesis, that EEG leads heart rate in most seizures, was not supported (41–56 % by group). We narrowed it into two testable hypotheses and wrote them into the pre-registration draft before any locked-test data were opened. A second study looked for pre-seizure drift in heart rate, HRV, EMG and movement. None of the 20 tests passed, so we claim detection, not prediction.

    AI & method →
  4. 17 Oct

    The first model, and its first honest number

    Version 1 combined all four signals in one gradient-boosted model. It reached 0.44 sensitivity and an event F1 of 0.32 on development folds, and adding ECG, EMG and motion improved F1 by 0.064 over EEG alone (probability of improvement 0.998). Its false-alarm rate, however, was measured only on recordings that contain a seizure, which flattered it. We wrote that caveat into the results instead of hiding it.

    Version 1 results →
  5. 17–18 Oct

    The versions that failed

    Version 3 chose the alarm threshold by inner cross-validation. It halved false alarms, but sensitivity fell by six points, and the rule we wrote in advance rejects it: sensitivity may not drop by more than 0.02 for a gain in F1. The rejection is logged with its numbers. We then corrected the protocol. The realistic baseline is version 2 on all 8,642 development hours, and models are compared at fixed false-alarm budgets (1, 2, 5 and 10 per 24 hours) rather than at each model's own best threshold.

    The full version table →
  6. 19–21 Oct

    A defect, not an improvement

    The diagnostic behind the second rejection found that the alarm threshold was being pinned by the search grid rather than chosen from the data: candidates were spaced evenly by percentile, which near the top means enormous jumps in alarm rate, and every run in every version since the first had landed on the same candidate. Spacing the candidates by alarm rate fixed it. Because it is a defect correction and not a claimed improvement, it reset the baseline rather than counting as a win: v02g, 27 % of seizures at 1.3 false alarms a day. Version record →

  7. 21–22 Oct

    Making it honest about time

    Until then the pipeline filtered each recording as a whole, which means every alarm had quietly seen the future. The causal version (v11) only ever looks backwards: forward-only filtering, a rolling calibration, our own R-peak detector, and the alarm timestamped at the end of its window rather than the start — which also revealed that our published delays had been about four seconds early. The honest delay is about 35 seconds. The cost of the change, on development data, was 0.011 event F1, an interval that includes zero.

  8. 26 Oct

    Freeze, and a hash

    Two model lineages, their thresholds, the feature code and the analysis script were frozen and hashed — 26 files, each with its SHA-256 recorded. The pre-registration, written before any locked recording was downloaded, says what would be tested, how it would be judged and what would count as a failure. Nothing was changed afterwards. The pre-registration, and what its timestamp proves →

  9. 28 Oct

    One look

    The 29 locked patients were downloaded, their 778 annotation files hashed on arrival, the features extracted, and the analysis run once — twelve seconds after the repository was pushed to GitHub. It cannot be run again. What it found →

  10. 18 Oct

    Showing the record

    The website went live on 18 October with the full record: the rejected version, the caveats, and the plan for the test. The concept images are labelled as concept renders. They are not photographs of hardware or patients.

    Results status →

Part II · Now

28 October 2026

The locked test is spent. On 29 patients no model had ever seen, the four-signal model caught a third of the average patient’s seizures at 0.23 false alarms a day, and 77 % of convulsive ones. The project’s primary hypothesis — that four signals beat EEG alone at the same sensitivity — held on every bootstrap sample. So did the claim that a learned model beats any single-signal rule.

Two things did not go our way, and both are on the evidence page. The hypothesis that heart rate would help most on seizures without movement came out in the right direction but short of the bar we set: probability of improvement 0.881, where our rule asked for 0.90. And a finding of our own — measured on development data, and the reason EEG sits at the centre of the design — did not replicate: on the locked patients heart rate moved first, at the median, not the brain.

Sensitivity also fell, from 0.402 on development patients to 0.331 here. We cannot call that purely a generalization gap, because the two numbers come from different procedures, and we have said so rather than letting the better-looking F1 stand on its own.

What is left to test is now outside this dataset entirely.

Part III · Next (planned)

Dates are targets. Each model change is one change, judged by the rule written before it runs.

  1. By 10 Nov

    Hardware and live demonstration

    The team demonstrates the sensors and the pipeline live. The Arduino board is shown with its limits; the validation numbers come from SeizeIT2.

  2. November

    Blind third-party evaluation

    A request to the SeizeIT2 authors at KU Leuven to run the frozen model on data we have never had access to, and a Docker submission of the EEG-only model to the SzCORE benchmark, scored by an independent team. SzCORE accepts only 19-channel scalp EEG, so that second one is a transfer test of one model, not of the four-signal system, and we will report it as one. Each is submitted once, so the numbers cannot be re-tuned after they arrive. With the locked set spent, these are the only untouched tests the project still has.

  3. By 29 Nov

    Patent decision

    The method is already described publicly on this site, which limits some claims abroad. The decision is time-sensitive, and it depends on the freeze results.

The rule behind every step

Write the criterion down before the number arrives. The rejected versions stay in the record, because a project that only shows its successes cannot be checked.

Sources: project iteration log, plan and task list, and the repository history (17–28 October 2026). Figures are development-fold results unless marked as locked-test results.