Transparency · Open data

How flow, comfort and difficulty are calculated

Behind every real-time gauge lie three calculations : the few-day flow forecast, thermal comfort (windchill, hypothermia risk) and the navigation difficulty score. Here, with no black box, is how they work : their data, their formulas, and above all their limits.

Most kayak websites simply display a flow figure, without saying where it comes from or how a forecast is obtained. We do the opposite : out of a concern for transparency, and since information that your safety depends on must be verifiable, here we document, step by step, the three models that feed our river dashboards : the flow forecast, the Thermal Comfort Index and the Difficulty Score. These models do not replace judgement : they help anticipate a trend, never decide in your place.

Part 1 — The flow forecast

Let's start with the most structuring calculation : estimating how a river's flow will evolve over the coming days.

The input data: nothing invented

Our model creates no data : it combines existing measurements. Two sources feed it :

  • The flow measured at a station, published by the Public Service of Wallonia (SPW) through its hydrometric network. This is the official reference figure, and we archive it day after day in our database.
  • The precipitation forecast over the catchment, with a reliability index specific to each forecast day.

From these two ingredients, the model estimates how the flow will evolve over the coming days. The physical principle is simple : without rain, a river slowly returns towards its seasonal average ; with rain, it rises all the more strongly when its basin is already wet. The whole task comes down to quantifying these two movements honestly.

Step 1 — The historical baseline

First we compute the « normal » flow of the moment, from the measured history. We take the average of the last 60 days (M₆₀) and the average of the last 7 days (M₇), then combine them by weighting the recent trend heavily :

baseline = (M₆₀ + 2 × M₇) / 3

Why this double weight on the last 7 days ? Because a mid-mountain river changes regime as the seasons pass. By weighting towards the recent, the baseline stays responsive to transitions (snowmelt, a drought setting in, the rains returning) without overreacting to an isolated spike, which the long average smooths out. Only plausible values (flow between 0.5 and 200 m³/s) go into the calculation, so that sensor artefacts are excluded.

Step 2 — Basin wetness

The same rainfall does not produce the same effect depending on whether the soil is dry or saturated. On a dry basin, the water infiltrates and the flow barely moves ; on an already soaked basin, it runs off and the flow climbs quickly. We estimate this state with a wetness modulator, computed as the ratio between the current flow and the baseline, clamped between 0.5 and 1.5 :

wetness (w) = clamp( current_flow / baseline , 0.5 , 1.5 )

This modulator then adjusts the runoff coefficient K, specific to each river, which translates a depth of rainfall into a rise in flow. It starts from a reference value K_base multiplied by the wetness, then is itself clamped between a floor (dry basin) and a ceiling (saturated basin) :

K = clamp( K_base × w , K_dry , K_saturated )

Update of 26 August 2026 : K_base, K_dry and K_saturated were recalibrated river by river from our own history of measured flow (several months of readings every 15 minutes). The generic values used until then overestimated the rise in flow by a factor of 5 to 9 compared with what was actually observed after a comparable rain event : we divided them by roughly 7, and differentiated them by catchment size and the intrinsic responsiveness of each watercourse (the Amblève, more deeply incised, reacts faster than the Viroin, for instance). A daily rise cap was also added, calculated on the real 97th percentile of the variations observed on each river : even if a weather forecast announces exceptional rain, the model can no longer run away beyond what has already been seen in our data.

Step 3 — Runoff from the forecast rainfall

Rain does not turn into flow instantly : there is a basin response time. We model it with a simple lag : the flow on a given day responds 60% to that day's rain and 40% to the previous day's. Everything is weighted using K (the wetness coefficient) and the reliability of that day's weather forecast :

runoff = ( rain_day × 0.60 + rain_prev × 0.40 ) × K × reliability

In practice : the stronger and more reliable the rain forecast, and the wetter the basin, the larger the expected rise in flow. And if the weather forecast is uncertain, its influence is automatically reduced : we do not make a piece of data say more than it is worth.

Step 4 — The return to the average

In the absence of rain, a river does not stay frozen : it gradually drops back towards its average. We model this decay with a factor of 0.75 applied each day to the gap between the previous day's flow and the baseline :

decayed_flow = baseline + ( flow_prev − baseline ) × 0.75

In other words, each day without rain, the flow closes roughly a quarter of the gap separating it from its normal value. A flood thus subsides over a few days, a low-water level rises gently : this is the behaviour actually observed on the Semois.

Step 5 — A final forecast that reality keeps within bounds

The forecast for a day is the sum of the decayed flow (return to the average) and the runoff (rainfall input). But we do not let it diverge : it is clamped by physical limits calibrated on the official navigability thresholds of each river — a floor (half the minimum threshold) and a ceiling (double the maximum threshold) :

forecast_flow = clamp(decayed_flow + runoff, floor, ceiling)

An essential detail : the value for the current day is never a forecast. It is always the most recent actual measurement from the SPW station. The model applies only to the following days. On our dashboards you can therefore always tell apart what is measured from what is estimated.

A concrete example

Take a Semois whose baseline currently stands at 1.3 m³/s (late summer, low water), with a current flow of 1.3 m³/s (Semois K_base = 0.07). The wetness modulator is 1.3 / 1.3 = 1.0, giving a runoff coefficient K = 0.07 × 1.0 = 0.07. Tomorrow 16 mm of rain is forecast with a reliability of 75%, following 3.5 mm today.

The next day's calculation unfolds as follows : the decayed flow stays close to the baseline → 1.3 + (1.3 − 1.3) × 0.75 = 1.3 m³/s. The runoff adds (16 × 0.60 + 3.5 × 0.40) × 0.07 × 0.75 ≈ 0.64 m³/s. The next day's forecast is therefore about 1.9 m³/s (1.3 + 0.64) — a noticeable but realistic rise, compared with the old coefficients which, for this same scenario, would have announced more than 4 m³/s. Every number remains traceable : that is the whole point of a legible model.

The self-learning loop: how we measure our own errors

A transparent model must also be verifiable over time. Every forecast we publish is archived (calculation date, target day, forecast rain, predicted flow) are stored in our database. Each night, the previous day's forecasts are compared with the actually measured flow for that day, and record the gap. This memory of our own errors is what allowed us to identify, in mid-August 2026, the optimistic bias corrected above : without it, we would have had no objective way to know that the model was wrong, nor by how much. It also lets us keep refining every coefficient over the coming months, as the history grows.

Why a simple model rather than an « AI »?

Stacking an opaque neural network on top of this data would be tempting. We chose the opposite, and on purpose. A physical and interpretable model has three decisive advantages in a safety context : it is explainable (each output is justified by a formula), it fails predictably (we know why it is wrong, usually because of a bad rain forecast), and it stays robust even with a limited history, whereas a learned model would need years of data and could hallucinate aberrant values.

Each coefficient — the 1/3-2/3 weighting of the baseline, the 0.75 decay factor, the 60/40 split of the runoff — has a physical meaning and can be discussed, adjusted, audited. In our eyes, that is the condition for information on which one accepts to stake the safety of paddlers. Sophistication is not an end in itself : verifiable reliability is.

Archiving: the memory of the river

The whole model rests on one condition : having a clean history of the flow. With each refresh, the SPW measurement is recorded in our tables (etat_navigation_semois, and the equivalent for each river), keeping only physically plausible values. This memory, built day after day, is what allows us to compute a representative baseline and to adapt the model to the particularities of each watercourse. Without it, no serious forecast would be possible : a river can only be understood over time.

These archived data also feed our threshold tables and our open exports. The loop is virtuous : the richer the history, the more accurate the baseline, and the more the forecast matches the actual behaviour observed in the field.

Part 2 — Thermal comfort (windchill)

A favourable flow says nothing about the feel on the water. In a cool wind, the sensation of cold can be far more severe than the thermometer suggests : this is what's called windchill. We use the official wind chill formula adopted by weather services (the same one used by Environment Canada), which combines air temperature and wind speed :

if wind < 4.8 km/h : felt = temperature
else : felt = 13.12 + 0.6215×T − 11.37×V^0.16 + 0.3965×T×V^0.16

Below 4.8 km/h, the wind's effect on heat loss is considered negligible : the felt temperature simply equals the air temperature. Above that, the formula reflects a real physical phenomenon : the wind strips away the thin layer of air warmed by the body, speeding up heat loss. Example : at 12°C with 25 km/h of wind, the felt temperature drops to around 8.3°C — a gap of nearly 4 degrees, which concretely changes the gear you need.

This felt temperature is only half the equation : we cross it with the actual water temperature, measured at the station, to determine a risk level and matching equipment advice :

  • High hypothermia risk — felt temperature below 0°C or water below 8°C : full neoprene wetsuit mandatory, outing reserved for equipped experts.
  • Cold water — felt temperature below 8°C or water below 12°C : life jacket mandatory, caution recommended.
  • Storm reported : paddling not advised regardless of temperatures.
  • Correct conditions — felt temperature below 15°C : standard gear, life jacket recommended.
  • Ideal conditions — above that : light clothing, life jacket and water shoes are enough.

This is the engine that feeds the live felt-temperature figure shown on each river dashboard, next to water and air temperature.

Part 3 — Comfort Index and Difficulty Score

Beyond flow and felt temperature taken in isolation, we compute two summary indicators to answer, at a glance, the question "should I go out today ?". They rest on different logics, and we say so honestly : they are not two ways of measuring the same thing.

The Comfort Index (out of 100) starts from a perfect score and subtracts penalties based on the day's measured conditions :

comfort = 100 − 20 (if flow outside 5-25 m³/s) − 30 (if water < 12°C) − 10 (if air > 30°C) − 15 (if wind > 20 km/h)

The result is capped at 0 if the river is closed to navigation — comfort then no longer makes sense, and the index says so plainly. Example : open river, flow at 18 m³/s (within the ideal zone, no penalty), water at 10°C (−30), calm wind : the Comfort Index shows 70/100, and the "hypothermia risk" flag explains the drop.

The Difficulty Score (also out of 100, but where a high score signals a more demanding outing) follows a separate multi-factor logic : a "flow" sub-score (low, ideal, fast, or dangerous in flood) weighted at 60 %, combined with a "weather" sub-score (strong wind, precipitation, cold temperature) weighted at 40 % :

difficulty = (flow_score × 0.60) + (wind_score + rain_score + temp_score) × 0.40

With a safety override : in case of a forecast storm or flood-level flow, the score jumps straight to 100, without waiting for the weighted average. The final score sorts the outing into four levels : easy (≤25), moderate (≤50), difficult (≤75) or very difficult / dangerous (>75). For transparency : our open-data export (JSON-LD Dataset) uses, to keep the export simple, an approximation of the difficulty score equal to 100 minus the Comfort Index ; the detailed multi-factor calculation above is the one used by our real-time weather analysis tools. Both remain consistent in spirit — a less comfortable river is, almost always, also the more difficult one.

The limits, stated honestly

No model can predict a river's future with certainty, and claiming otherwise would be dangerous. Here is what the flow forecast does not do : it does not capture the very localised storms that can swell a tributary within hours ; it depends entirely on the quality of the weather forecast, whose uncertainty grows with the horizon ; it ignores structure operations (dams, sluices) and certain snowmelt phenomena. Hence its reliability is excellent at 24 h and degrades beyond that.

We also resist the temptation to over-promise precision. A forecast expressed to the nearest tenth of a cubic metre per second can give a false sense of certainty ; in reality the meaningful information is the direction and magnitude of the change — is the river rising sharply, drifting back to normal, or holding steady? That is why our dashboards favour a readable trend over a spurious decimal, and why we always pair the number with a plain-language navigation status. Honesty about uncertainty is, in our view, part of the safety message itself : a paddler who understands that a three-day forecast is indicative, not guaranteed, makes better decisions than one lulled by a falsely precise figure.

Windchill, for its part, is a standard meteorological formula : it describes an average felt sensation, not your individual one (acclimatisation, physical effort or clothing all make it vary). The Comfort Index and the Difficulty Score are simple, deliberately legible rules : they replace neither a full weather bulletin, nor your own assessment of the terrain, nor a guide's experience. None of these three calculations knows your exact local conditions or your personal skill level.

Our golden rule, which we repeat everywhere : you book on a trend, but you paddle on a measurement. The forecast serves to plan an outing and to avoid a pointless trip ; the final decision to put in is always taken on the actual flow of the day, the measured felt temperature and the official navigation status. If conditions are not met, our cancellation policy protects you.

Why publish this method?

Because trust is built on transparency. When it comes to safety, an opaque figure is worth nothing : you must be able to know where it comes from and what it is worth. By documenting these three models, we let everyone — paddler, rescuer, journalist, fellow operator — understand, verify and challenge our work, including when we correct our own mistakes, as we did on 26 August 2026. This approach extends our commitment to open data built around the official SPW thresholds, which are already published and exportable. See also our changelog for the full history of changes.

These models can be improved and keep evolving with the seasons and with field observations. They come from years of paddling on the Semois and from daily monitoring of the region's hydrological data, and we offer this know-how freely in the service of your safety.

How to read the forecast on our dashboards

On each river dashboard, the forecast can be read in seconds. The value for the day, highlighted, is the latest SPW measurement : it is the one that counts. The following days show the estimate produced by the model : there you see the trend — flow rising after forecast rain, stabilising, or dropping back towards the average. A forecast that crosses a navigability threshold is flagged, to warn you that a window is opening or closing. Alongside it, the felt temperature (windchill), the Comfort Index and the Difficulty Score are recalculated live with every refresh of the weather data.

The right reflex : use the forecast to choose the best day of the week and skip a trip when the trend is clearly unfavourable, then confirm on the morning itself against the actual flow. Always compare this reading with the water temperature and the weather of the day : together, this information — flow, felt temperature, comfort, difficulty — gives you a complete and honest picture of the coming conditions, without ever replacing your own caution.

Frequently asked questions

How is the flow forecast calculated?

We combine a historical average of the flow (60 days, weighted towards the last 7) and the estimated runoff from forecast rainfall, modulated by basin wetness. The result is then clamped by the physical thresholds and by a daily rise cap calibrated on our real history. The value for the day remains the actual measurement.

What data is it based on?

The flow that the SPW measures at a station (archived), and precipitation forecasts weighted by their reliability. No data is invented.

Is it 100% reliable?

No. It is an estimate: excellent at 24 h, but degrading beyond that, and blind to very localised storms and to operations on structures. You book on a trend, but you paddle on a measurement.

Does it work for the other rivers?

Yes: Semois, Lesse, Ourthe, Amblève, Viroin and Bocq, each with its own parameters (thresholds, history, runoff coefficients). Bounds are calibrated on each river's official SPW thresholds.

How is thermal comfort (windchill) calculated?

We use the official wind chill formula (air temperature + wind speed), which has no effect below 4.8 km/h of wind. This felt sensation is crossed with the actual water temperature to set the displayed risk level (hypothermia, cold water, correct, ideal).

How does the Comfort Index differ from the Difficulty Score?

The Comfort Index starts at 100 and subtracts penalties (flow outside the ideal zone, cold water, heat, strong wind). The Difficulty Score weights a flow sub-score and a weather sub-score 60/40, and jumps automatically to 100 in case of storm or flood. Both are recalculated in real time.

See the models at work

Real-time measured flow, forecast trend, felt temperature, comfort and difficulty on our dashboards.

📊 Semois dashboard

Google Reviews

Recommended Business
4.6
Based on 1,282 reviews