Virridy Home | Lume — Water Quality Sensing Water for Carbon

Seine nowcast, 2026 season — what the record says

Paris (four sites on the Seine and the Villette basin) and the Marne (three sites, Syndicat Marne Vive). Written 2026-09-24 by OpenCurrent, after the Paris bathing season closed. Frozen: every number below is computed from the published decision record, the 2026-09-08 full-history replay, the Pumphaus installation register, the units' own diagnostics and Open-Meteo archive rainfall. Nothing is estimated.

The short version. The nowcast did not help the Seine decision this season. On the region's own scoreboard every version of the model costs more than never raising an alarm, and the best of them only edges ahead once each site's first days are set aside, by a margin inside noise. That is not a tuning problem: Paris gave us 87 lab samples and 5 exceedances in three weeks, then the units came out of the water. What the season did establish is which signals carry information on the Seine, what in the pipeline still has to change, and what a Seine that decision makers could use would need. Those are below.

What the nowcast is, for readers new to it

Every hour, for every site in the fleet, the nowcast publishes an estimate of the E. coli concentration in the water and a probability that it is above that site's action limit (900 CFU/100 mL on the Seine and Marne, the EU bathing-water threshold). If that probability is 0.35 or higher the site shows an alert. Several versions of the model, called arms, run side by side:

calibration
a prior for the site (from satellite and landscape data, pooled with the region) plus a slowly updated site offset learned from that site's own lab results. It has no sensor input, so it barely moves between lab samples.
stack
calibration plus a machine-learned correction from the Lume sensor (tryptophan-like fluorescence, turbidity, temperature) and recent rain, trained on the whole fleet's paired samples.
regression
a small per-site linear model on the sensor features, using only that site's own samples.

Two words are kept apart throughout. A sample is the bottle of water taken at the site on a given morning. Its result is the lab's E. coli count for that bottle, which comes back one to two days later. The arms are judged the honest way: when a result comes back, it is scored against what each arm had already published at the hour the sample was taken. A missed exceedance costs 3 points, a false alarm 1. Per site, the arm with the lowest cost is the one whose estimate the dashboard shows (the served arm). Arms never see the result they are being judged on.

"Never alarm" is the reference in every table: a model that stays silent pays 3 per exceedance and nothing else. At an 11% exceedance rate, an alarm only pays for itself when more than a quarter of the alarms it raises turn out to be right.

1The deployment and the lab record

Each panel is one site: lab results on a log scale (red triangles are exceedances, green dots are under the limit), the dashed line is the 900 limit, the thin line is the estimate the nowcast was serving each hour (from the full-history replay, through 2026-09-08, and cut at the unit's removal), the shaded band is the window in which the Pumphaus register says the unit was in the water, and the grey stripe marks each site's first days, when samples were being taken but no result from that site had come back yet (see stage 2). Hover any point for the numbers.

Sites, units and sampling
siteunitin waterlab samplesexceedancesnotes

Paris sampling stopped on 2026-08-27, the day the register records the Bercy, Bras Marie and Grenelle units being removed. Villette stays in with a weekly sample. The Marne programme continues. Bercy and Bras Marie were cleaned on 2026-08-18, which stepped their fluorescence up 2 to 4 fold.

2The scoreboard

Decision cost (3 per missed exceedance + 1 per false alarm) on the published record, by arm, against the never-alarm reference. Lower is better. Hover a bar for the miss and false-alarm split.

Scoreboard as a table
poolsamplesexceedancesnever alarmcalibrationstackregression

Where the cost comes from

Cost against alarm threshold, warm record only

Alarm if the arm's published probability is at or above the threshold. The production threshold is 0.35. The horizontal rule is never-alarm.

Reading the numbers

Seine samples scored
live record, 7 sites
exceedances
at 900 CFU/100 mL
never-alarm cost
3 per exceedance
best arm, warm record
stack at 0.35

Five Paris exceedances and fourteen on the Marne, nine of them at Neuilly. Five of the Neuilly nine came in one storm week (08-28 to 09-01).

3What the sensors saw

How well does one measurement, on its own, rank the exceedances above the clean samples? The score is the area under the ROC curve: 0.5 is a coin toss, 1.0 is perfect. "Raw" uses the value as measured. "Within site" first removes each site's own average, so a feature only scores if it moves within a site when that site exceeds, rather than merely being higher at the site that exceeds most. Both are shown because the Marne site with the most exceedances is also the most turbid and the most fluorescent, which flatters the raw column.

Could a Seine-specific model do better? Somewhat, on ranking; not demonstrably on the decision. A small logistic model on fluorescence, 24-hour turbidity, 48-hour rain and temperature, refit only from Seine samples as each result became known and judged walk-forward on the 103 later samples, ranks exceedances at 0.70 against the stack's 0.59, and its cost sits between 20 and 26 depending on threshold, against never-alarm at 24 and the stack at 28. With eight exceedances in the test window, five of them one storm, that is a lead worth pursuing as a shadow arm through the Marne autumn, not a result to ship.

4Rain, and the lag

Daily rainfall from the Open-Meteo archive at Paris and three points up the Marne and Seine, with the exceedance days marked. The nowcast's rain features are 24, 48 and 72 hour totals at the site itself, taken at the hour of the sample.

5River flow: a dry season, and a feature for next year

Flow at the Paris-Austerlitz gauge on the Seine and the Gournay gauge on the Marne (Vigicrues, daily means), against the day-of-year climatology of the same reach from a 39-year GloFAS record (median and the 10th to 90th percentile band). Red rules mark days with an exceedance on that river; the shaded span is the Paris sampling window.

6Units on a shelf

The three Paris units kept transmitting after they were removed on 08-27, and the nowcast kept treating them as in the water: its registry knows when a unit was installed but not when it was removed, and its health check only asks whether readings are fresh. The units' own temperature record settles it. Every unit in a river swings several degrees over a few days; the three Paris units read a constant 23.3 °C, identical to each other, for as long as we looked.

Hourly mean board temperature from unit diagnostics, 2026-09-18 to 09-24. The Bercy, Bras Marie and Grenelle traces lie on top of one another at 23.3 °C. Villette (Paris, still in the basin) and Neuilly (Marne) for comparison.

So from 08-27 until the ingest cut them off on 09-23, the dashboard published "sensor+rain, health ok" estimates for Bercy, Bras Marie and Grenelle that were computed from a room. The Grenelle alert that stood on the dashboard in the last week of September was the regression arm reacting to a shelf. None of this touched the scoreboard above: every Paris lab sample predates the removal.

7Notes

8What it would take to serve decision makers on the Seine

The Paris decision is binary and daily: is the bathing site open this morning, at 900 CFU/100 mL, with lab results that arrive a day or two late. The city already closes on rain. A nowcast earns a place in that decision only if it calls the morning better than "closed if it rained, otherwise yesterday's result", and can show it on a season of paired data. In order:

  1. Registry and ingest agree on what is in the water. Read the Pumphaus installation windows in the feed, publish no sensor estimate for a unit outside its window, fail the run when the database rejects a registered site, and add a bench detector (temperature range over 24 h) as a backstop.
  2. Score only what was served. Leave a site's samples out of the arms' record until its first lab result is known, or score the held state, so the scoreboard measures the product people saw.
  3. A Seine regime of its own. A pooled Seine model on raw fluorescence, turbidity and lagged rain, trained on Seine samples only, run as a shadow arm through the Marne autumn and the 2027 Paris season. Do not expect the Boulder-trained stack to transfer.
  4. Basin signals, not point rain. Rain over the sewershed and the upper Marne and Seine at 1 to 5 day lags; gauge discharge as a standardized feature at every site (Vigicrues for the Seine and Marne, USGS in the US; stage 5), with a one-time Banque Hydro export for the Seine's climatology; and the combined-sewer-overflow and dry-weather discharge logs the city's own bathing programme runs on, if the operators will share them.
  5. Use the city's daily lab results as a feature. Paris samples every weekday morning. The last known result, and the day-of-week and time-of-day pattern, are free information that the current 30-day site offset throws away. A site state that moves in hours is the cheapest change with a plausible payoff.
  6. A Seine operating point. The 3:1 cost and the 0.35 threshold were set for Boulder's limit and base rate. Paris needs its own price for a wrongly open beach against a wrongly closed one, agreed with the city, and the threshold set on the Seine record alone.
  7. Explain the dry-weather exceedances on the Marne and at Bercy with the customer before promising to catch them.
  8. Deploy before the season. Units in the water from April and samples from May, so 2027 opens with a warm record instead of a cold start.

Until steps 1 and 2 are done, the Seine's live record should not be read as a measurement of the model.

Sources and reproduction