Flag Predictor

An AI-powered 10-day forecast of the river height differential and OURCs flag colours for the Isis, Godstow and Wallingford stretches of the Thames. Trained on historical rainfall + river data and run hourly with the latest rainfall ensemble forecasts.

Latest Experimental Forecasts

Preview: what is new here. The main forecast is here.
  • Official OURCs flag as a big tile, with cards for the chance it changes today or by the end of tomorrow, and where the differential is heading. The chance comes from the OURCs flag history: flags change almost only in daylight, go up within an hour or two of the differential crossing a line, and come down later, once it is clearly below the line, so the flag can lag the differential.
  • Black flag (Isis): a card appears only when Black is close, from a forecast of the Iffley Lock level.
  • Lock-keeper jumps: for the first three days the forecast moves in held levels and daytime jumps, as the weirs are adjusted, instead of a smooth line. Each forecast outcome is reshaped, not changed: jumps come mostly mid-morning to early afternoon, bigger when the river has further to go, so this sharpens when a band changes, not how high the river gets.
  • Gauge outages: a stretch whose gauges are offline shows no flag-change forecast; when they come back, the gap is bridged.
Loading latest forecast…
Fetching the latest forecast…

Flag alerts on your phone

A notification when the official flag changes, or is likely to change today or by tomorrow (60% or more), and when Black is likely on the Isis.

Alerts store only an anonymous push address for this device and the stretches you choose. Turn off deletes it.

About these forecasts

How do I read the chart?

The chart shows the recent observed river height differential (the black line) and a 10-day probabilistic forecast. Each thin purple line is one possible future driven by a different rainfall forecast; the bold purple line is their average, and the purple shading is the likely range (rain and model error together). Horizontal bands shade the flag bands, daily rainfall is shown as bars on the right axis, and the dashed red line marks "now". For Isis and Godstow, the stacked chart underneath shows the chance that the river will be in each flag band at each point in the next 10 days.

Flag bands and the official flag

The coloured bands are ranges of the differential that roughly match the OURCs flags. They are not the flag: OURCs sets the flag by hand (on the Isis by counting the bucks at Iffley weir; at Godstow from the lock differential, since September 2024), and the official flag is shown above the chart, from ourcs.co.uk. Comparing the two since 2019, the flag and the band agree about 80–87% of the time. Going up, the flag usually changes within an hour or two of the band, in daylight. Coming down it lags: it usually waits until the river is a few centimetres below the line and has stayed there for a few daylight hours (at Godstow, Red often stays until the differential is near 0.6). Flag changes almost always happen between 8am and 8pm. When the two disagree, the official-flag card says so.

Black (Isis) is not a band: in big floods the differential stops rising (around 0.95), so the page watches the river level at Iffley Lock instead. Since 2019 the official flag has gone Black once Iffley reached about 0.42 m and come back to Red once it fell below about 0.22 m, which matches the flag in 98% of Red/Black hours. Iffley's level 1–48 hours ahead is forecast from its level and trend now, the Isis and Godstow differentials now, and the rain that has fallen and is forecast (the differential forecasts do not help: Iffley is also fed by the Cherwell). A Black card appears only when Black is close: the flag is Black, Iffley is within a few centimetres of the line, or there is at least a 10% chance of Black by the end of tomorrow.

How do I read the chart?

The chart shows the recent observed river height differential (the black line) and a 10-day probabilistic forecast (the blue spaghetti). Each thin blue line is one possible future trajectory driven by a different rainfall ensemble member; the bold purple line is the ensemble mean and is the single most likely outcome. Horizontal bands shade the flag colours, daily rainfall is shown as bars on the right axis, and the dashed red line marks "now". For Isis and Godstow, the stacked chart underneath shows the probability that the river will be in each flag colour at each point in the next 10 days.

What is the shaded band?

The 50 blue lines only show how much the rainfall forecasts disagree. Even with the rain exactly right the model is sometimes wrong, and in the first day or two that is most of the real uncertainty, because the rain forecasts barely disagree yet. The purple shading adds that in. The model was re-run every 6 hours over periods it was never trained on (2023, and November 2024 to January 2026) using the rain that actually fell, and every one of those forecasts' errors was kept. For today's forecast, each rain line borrows the errors of past forecasts that started from a similar situation (similar river level, trend, recent and forecast rain, and time of year). The outer shading holds 80% of the resulting outcomes and the inner shading 50%. The flag probabilities underneath are worked out from the same outcomes, so they include the model's own uncertainty too. That is why they can show a small chance of a higher flag even when every rain line stays in the current one.

What are the flag cards, and why does the forecast jump?

The river does not rise and fall smoothly. Much of each change comes as a sudden jump when a lock keeper adjusts the weir gates, mostly between 8am and 4pm and mostly when the river is already heading somewhere. The model itself is smooth: when it isn't sure whether a jump comes this morning or tomorrow morning, it spreads the change over both, so on its own it puts flag changes at any time of day. For the first three days, every possible outcome is therefore turned into held levels and jumps. Each hour, the chance of a jump depends on how far that outcome says the river still has to move over the next day, the time of day, weekends, the trend over the past day, recent rain, how long since the last jump, and whether this stretch or a neighbouring one jumped in the last three hours; how big a jump is (keepers often overshoot) comes from past jumps. These rules were learned from the 15-minute river record and the model's own forecasts from 2019 to 2024 (without 2023), and checked on 2023 and on November 2024 to January 2026. Each outcome still ends up where it was heading, so this mostly changes when the flag is forecast to change, not how high the river gets.

The cards above the summary give the share of those outcomes in which the flag changes, and stays changed for at least three hours, today or by the end of tomorrow (UK time). In the check years, when a card would have said "very likely" (over 80%), the change happened about 9 times in 10; "likely" (60–80%) about 6 to 7 times in 10. Those checks used the rain that actually fell, so with forecast rain the cards will be a little less certain. The first card is the official flag: a model of when the flag gets changed (how far past the line the river is, for how long, the time of day and weekends), fitted on the OURCs flag history (the Isis since November 2021; Godstow since September 2024, when its flag started being set from this differential), is run along every outcome starting from the flag flying now; its chance of the flag coming down is then adjusted, because on its own it was too cautious about that in the check years. The second card is the differential: which band it is forecast to be in.

How have earlier forecasts done?

Under each chart you can look back. Past forecast: drag the slider to any forecast from the last few weeks (one is saved every 6 hours) and see what it said against what the river then did, with its typical error and how often it had the flag right. Forecasts of now: what every forecast from the last ten days said the latest reading would be. Forecasts saved before the model-error band was added only show the rain spread, not the model-error band.

How reliable is the summary sentence?

The summary sentence is written automatically from the average forecast (the purple line), starting from the latest river reading, so it includes the first few hours. How certain it says it is comes from the spread of the forecast. It's meant to give a general idea of the next 10 days, not a precise prediction. The summary sentence is simply a short description of the forecast, without any human intervention. The certainty bounds are just based off the spread of the forecast. Importantly, the summary sentence is based off the change from the first (+2h) prediction, so it doesn't take into account the initial jump at t=0. This summary sentence is meant to give a general idea of the forecast, which is probably more reliable than the prediction chart itself.

Where does the data come from?

Historical river levels and rainfall come from the Environment Agency's flood-monitoring and hydrology APIs. Rainfall forecasts come from the ECMWF AI Forecasting System (ECMWF-AIFS) via Open-Meteo. The model is physics-based: a small neural network reads the recent past and sets the starting state of a rainfall-runoff model (soil wetness, fast and slow runoff stores, groundwater and the river channel). Forecast rain is routed through those stores hour by hour, and a rating curve that only ever increases turns river flow into the differential. The forecast is the average of five independently trained copies.

Why hasn't the forecast updated recently?

Usually it's just a temporary glitch in an Environment Agency sensor going briefly offline; the page will fall back to the latest successful forecast. If a sensor has been offline for more than four hours the page flags the forecast as stale. Updates are also scheduled hourly via GitHub Actions and sometimes queue up, so refreshes may not land exactly on the hour.

Is the forecast reliable?

Please treat this as experimental. The model starts exactly at the latest observation and cannot rise without rain, but it can overshoot after heavy rain and still misses some sudden weir changes. Issues and improvements get written up on the substack; bug reports and ideas are very welcome on GitHub.