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

Loading latest forecast…
Fetching the latest forecast…
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 (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.

How reliable is the summary sentence?

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 an LSTM trained on years of upstream rainfall paired with differentials at each lock.

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 is not perfect — in particular it can sometimes display an unusual jump at the very start of the forecast. Issues and improvements get written up on the substack; bug reports and ideas are very welcome on GitHub.