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, which of them the model now uses, 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 we changed after the season, and what it measured

Six changes were tried in the engine on 2026-09-24 and 25; five were kept. Each was measured the same way the arms are judged: refit as each lab result became known and scored on the samples that came after, over the whole fleet's record. "Cost" is the decision cost from stage 2.

changewhat it doesmeasured effect
Cold starta site's first samples, before any of its results are known, are not scored against the armsSeine stack cost 73 to 48 on the warm record; 53 samples fleet-wide set aside
Units out of the waterthe installation register decides; a removed unit serves calibration, labelled "unit not deployed"; a rejected site fails the runends four weeks of bench readings served as river readings at three Paris sites
Fast site statethe most recent lab result at a site pulls the estimate toward itself, shrunk by 0.3 and fading with a 3-day half-lifefleet error 0.609 to 0.600 log10, cost 179 to 174; Seine error 0.595 to 0.576, cost unchanged; Boulder 90 to 83; DC 25 to 18
Longer rain windows96- and 120-hour rain totals were tried alongside the 24/48/72-hour ones, so a storm two to four days back would still counton their own they rank Seine exceedances better (0.69 to 0.71, Marne 0.68 to 0.76), but inside the model they changed nothing on the Seine and cost 6 points fleet-wide; not adopted, kept for a Seine-only model
Gauge dischargeriver flow from the nearest gauge, expressed against that gauge's own day-of-year climatology (stage 5); GloFAS not used as a featureBoulder cost 39 to 33, fleet 106 to 101, Seine 35 to 36 (no flow event during Paris sampling)
Basin-areal rainrain averaged over 3 to 8 upstream points per river basin (the Paris sewershed and the Seine and Yonne up to Troyes; the Marne up to Saint-Dizier), summed over 48 and 96 hours, alongside the site's own point rainon its own ranks Seine exceedances at 0.72 vs 0.70 for point rain, Paris 0.73 vs 0.69, Marne 0.76 vs 0.73; in the model, replayed: fleet cost unchanged (157), Seine stack 38 to 36, fleet error 0.523 to 0.519; kept

All five together, replayed over the whole fleet's record from April to September (427 samples after the cold-start rule, 120 exceedances): decision cost for the calibration arm 167 to 156, for the per-site regression 179 to 161, for the stack 156 to 157, which is within noise at this sample size. On the Seine the stack's cost rose from 33 to 38 and calibration's fell from 34 to 31, so the replayed record would now serve calibration at the Paris sites and keep the stack at Neuilly. None of these changes the Paris verdict on this season's record. They make the fleet's model better, and they put the Seine in a position to be judged properly when sampling resumes.

9What 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, ingest and dashboard agree on what is in the water. Done 2026-09-25: the feed applies the installation windows, the database accepts the feed's "unit not deployed" rows, and the dashboard marks a removed or stale site. A bench detector (temperature range over 24 h) would be a backstop.
  2. Score only what was served. Done 2026-09-24: a site's first samples, taken before any of its results were known, are no longer scored against the arms.
  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. In progress 2026-09-25: built and running as the shadow arm seine_pooled, alongside two other Seine candidates (a multi-route "pathway" model and an XGB exceedance classifier), with a season-tuned model evaluated for 2027; results so far in the table below.
  4. Basin signals, not point rain. Tested 2026-09-25, marginal: rain averaged over the Paris sewershed and the upper Marne and Seine (4 to 5 reanalysis points per basin) ranks Seine exceedances at 0.72 against 0.70 for rain at the site itself, at 72- to 96-hour windows; Paris 0.73 against 0.69 at 120 hours, Marne 0.76 against 0.73 at 96 hours. Real, small, and inside the noise of 19 events; the rain that matters fell over the whole basin this season, so a basin average adds little beyond a longer window. Worth revisiting with radar rainfall rather than reanalysis points. Gauge discharge at every gauged site is in (stage 8). Still open: 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. Done 2026-09-24 as the fast site state (stage 8). What remains is the day-of-week and time-of-day pattern once a season of daily Paris results exists.
  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. Interim, live 2026-09-25: on the Seine and Marne a missed exceedance is priced at five false alarms, every arm raises the alarm at the matching probability, 1/(1+5) ≈ 0.17, and the arms are compared at that price; the rest of the fleet is unchanged. Choosing the threshold on the season's record instead did not carry over from week to week (the best threshold swung between 0.20 and 0.45). The price still wants the city's agreement.
  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.

A Seine model: what the 2026 record says so far

A brief for operators and partners (everything tried, the nowcast against the operators' rules, and why the Lume saw nothing at the Seine exceedances) is at seine-2026-brief.html.

In progress, not a conclusion. Every model below starts from the site calibration (the site's own level from its lab results, including the latest one) and asks whether the sensors and rain add to it. Unless marked, each is scored on the Seine samples taken after the site's first result was known, on the live record to 09-23 (144 samples, 19 exceedances; 5 in Paris, 14 on the Marne; a few fewer where a model needs some exceedances before it can be fitted), and compared with calibration on exactly the same samples, shown in brackets. "AUC" is how well a model ranks exceedances above clean samples (0.5 is chance, 1.0 perfect); the last column is what each would have done at the Seine operating point (alarm at P ≥ 0.17); on all 144 samples calibration catches 12 with 36 false alarms.

modelhow it was scoredAUC (calibration)95% interval of the differenceat P ≥ 0.17
Pathway modelfluorescence alone, turbidity alone and both, each against the site's own two-week baseline, plus rain and flow; refit as results arrived0.61 (0.65)*log loss 0.318 vs 0.315; the sensor routes learned almost no weight6 of 11 caught, 53 false*
XGB classifierpredicts the exceedance itself from sensor, rain, flow and the last result; whole fleet; refit as results arrived0.73 (0.72)−0.07 to +0.0711 caught, 30 false
181 site baselinesevery combination of baseline window (3 days to since the last cleaning), gap, centre and form for fluorescence and turbidity, Seine-only; baseline chosen on earlier data only0.50 (0.65)†−0.36 to +0.02; the best of the 181 in hindsight (+0.06) is what shuffled sensor data also gives (p = 0.45)—
Pooled Seine regressionitem 3 above: one Seine-only regression on the residual from calibration, raw fluorescence, turbidity, rain; refit as results arrived0.76 (0.71)−0.11 to +0.15; Paris 0.67 vs 0.55, Marne 0.72 vs 0.55replay: 8 of 11 caught, 33 false (calibration 6, 33)*
Season-tuned, forecast for 202754 candidates (regression or classifier, linear or trees, Seine-only or whole fleet, three input sets, three settings each) chosen and tuned on six weeks, predicting the seventh, for every week in turn0.72 (0.72)−0.08 to +0.08; the model chosen changed from week to week13 caught, 35 false
Season-tuned in hindsightthe single best of the 54 on the whole season, then refit as results arrived: the ceiling, since the choice saw every week it is scored on0.76 (0.68)−0.01 to +0.169 caught, 28 false (calibration 9, 34)

* scored on the 2026-09-08 replay (122 samples, 11 exceedances). † 114 samples (14 exceedances): the Seine-only models need five known exceedances before they exist; the reference is a Seine-only fit to calibration's estimate. Intervals: resampling site-weeks, 2,000 draws.

What it says so far. On this season, a model tuned on everything the season taught us would be expected to do about as well as site calibration next year, not clearly better: one more exceedance caught at a similar number of false alarms (13 and 35 against 12 and 36), inside the noise of 19 events. The ceiling, tuning with hindsight, reaches 0.76 against 0.68, and the gap between the two is the price of choosing on the answer. Comparing each fluorescence and turbidity reading to the site's own baseline, whichever of 181 ways it is done, adds nothing that survives chance on this record: this season's Seine exceedances did not follow a sensor excursion the models could see.

Regression or XGB? Neither. Holding the inputs fixed and varying one thing at a time over all 54 candidates, predicting the concentration versus the exceedance changed the median log loss by 0.004, and linear versus trees by 0.002; the best of each tied (0.344). The one choice that mattered consistently was training on the whole fleet rather than the Seine alone: better in 17 of 20 otherwise identical pairs (median log loss 0.022 lower), because 19 exceedances are too few to set a model's probabilities by themselves and the rest of the fleet's roughly 140 lend them a scale. Rain and flow helped a little; the site-baseline excursions made models worse. The pooled Seine regression's lead in the table is the same size as the XGB classifier's gap to calibration, and both are noise at this sample size.

Added 2026-09-25: the fleet-trained version of item 3 (the configuration that tied for best above: the same regression with river flow added, trained on every region) runs as a fourth shadow arm, pooled_fleet, beside the Seine-only one. Still open: which of the two to carry into 2027; what the Marne autumn adds (every Seine candidate is logging from 2026-09-25); and the signals the models do not have, above all the combined-sewer-overflow and discharge logs behind the dry-weather exceedances (item 7).

With steps 1 and 2 in place, the Seine's live record can be read as a measurement of the model from here on. What it cannot yet answer is Paris, until Paris is sampled again.

Sources and reproduction