MZQMohd Zamin Quadri
All work

TUM project seminar

Uncertainty Quantification in Hydrology

How much can a river model be trusted?

Role
Group contributor; individual ownership of assignment results is not claimed
Classification
Group coursework
Institution
Technical University of Munich
Inspect repository
Two perturbations of one calibrated event, on one scale. The rain barely moves it; the ruler the discharge was measured with moves it 356 times as far.The seminar's fitted stage-discharge rating curve, drawn from its own two blended power laws. Perturbing the precipitation across two thousand series barely moves the objective. The curve resets, and the same experiment is run on the water level instead: an identical fifty-centimetre interval is projected through the curve at base stage and at the peak, and comes out as a discharge band of 8.6 in one place and 338 in the other. Recalibration recovers almost none of it, and the loss from perturbing the measurement is 356 times the loss from perturbing the rain. No forecast, horizon or coverage claim is made anywhere.
  1. Problem

    A well-fitted model can hide large uncertainty.

  2. How it was solved

    Our group perturbed its inputs and measured the damage.

    1. Calibrate
    2. Perturb
    3. Sensitivity
  3. Result

    NSE 0.908

    best fit in the group seminar

  4. Built with

    • Python
    • NumPy
    • SciPy
    See the evidence on GitHub
The seminar's fitted stage-discharge rating curve, drawn from its own two blended power laws. Perturbing the precipitation across two thousand series barely moves the objective. The curve resets, and the same experiment is run on the water level instead: an identical fifty-centimetre interval is projected through the curve at base stage and at the peak, and comes out as a discharge band of 8.6 in one place and 338 in the other. Recalibration recovers almost none of it, and the loss from perturbing the measurement is 356 times the loss from perturbing the rain. No forecast, horizon or coverage claim is made anywhere.

TUM project seminar / Hydrology

Disturb the rain and a calibrated model barely notices. Disturb the ruler the river was measured with and the calibration collapses.

Best seminar resultNSE 0.908

A calibrated model, and the two ways of disturbing it

near the optimumacross the spacerefitting does not recover itHBV baselineA conceptual rainfall-runoffmodel over one high-flow…CalibrationEighteen parameters fitteduntil the hydrograph matches…Local sensitivityOne parameter at a time, inthe neighbourhood of the…Global sensitivityAcross the whole parameterspace, which ranks them…Perturb the inputsThe rainfall going in, and thestage the discharge was…Two envelopesOne barely opens. The otherswallows the calibrated run…
The two sensitivity analyses sit side by side because they disagree about which parameter matters. The return path is the rescue that fails: recalibrating against the perturbed series recovers only part of the loss.

This diagram in words

  1. HBV baseline source — A conceptual rainfall-runoff model over one high-flow event.
  2. Calibration process — Eighteen parameters fitted until the hydrograph matches. The fit is not the problem.
    SciPy (QMC sampling)
  3. Local sensitivity process — One parameter at a time, in the neighbourhood of the optimum.
  4. Global sensitivity process — Across the whole parameter space, which ranks them differently.
    NumPy
  5. Perturb the inputs gate — The rainfall going in, and the stage the discharge was inferred from.
  6. Two envelopes artifact — One barely opens. The other swallows the calibrated run entirely.
    Matplotlib
Technical questionThe gauge is uncertain by the same 25 cm wherever the river is. What does that become in discharge, and why does the answer depend on where you measure?

Measurement uncertainty

±25 cm

Fixed. The same at 250 cm as at 560.

Discharge interval

8.63 m3/s

17.9 to 26.6 at a water level of 300 cm.

The error did not grow — the transformation amplified it. The curve is nearly flat at low water and steep at the top, so the same 50 cm of gauge uncertainty spans 8.633 m3/s at a base stage of 300 cm and 337.68 at 525. The local exponent runs from about 2.35 to 8.48 across that range. Nothing here is a forecast: it is a fixed measurement uncertainty pushed through a fitted stage-discharge relationship.

Evaluated from the seminar’s own fitted parameters. Source: results/assignment5/results_fiting_curve.txt
Water levelGauge uncertaintyDischarge intervalWidth
Low flow · 260 cm±25 cm12.33 – 19.53 m3/s7.20
Base stage · 300 cm±25 cm17.95 – 26.58 m3/s8.63
Peak stage · 525 cm±25 cm269.49 – 607.17 m3/s338

01 / 12One eventA short, rainfall-dominated high-flow event, at an hourly step.

Model
HBV001aLumped conceptual rainfall-runoff
Time step
HourlyTemperature, precipitation, potential evapotranspiration
Event
One high-flow eventone catchment, one episode
Qtime
Perturb the rain2,000 precipitation series. NSE 0.907715 becomes 0.907298; 834 of them came out better than the reference by chance.
Qtime
Perturb the ruler2,000 series from moving the measured water level plus or minus 25 cm. NSE 0.907715 becomes 0.759226; 0 of them beat the reference.

Both panels are on the same discharge scale, and both bands are drawn at their measured widths. Moving the water level costs 356.1x more than moving the rainfall, because discharge is never measured directly; it is inferred from stage through a fitted curve whose local exponent rises from 2.35 to 8.48 as the river rises, so one fixed gauge error buys 39x more error at the flood peak than at baseflow. Refitting the model to each corrupted series recovers 5.76% of the loss and still never beats the reference: you cannot calibrate your way out of an error in the thing you are calibrating against.

The chain behind those two panels: HBV001a, a lumped conceptual rainfall-runoff model with 18 parameters, calibrated by Differential Evolution over 600 generations and 75,480 model evaluations; then sensitivity analysis, locally around that optimum and globally with Sobol indices under Saltelli sampling; then the two perturbation studies above. The two Sobol configurations disagree about which parameter dominates , sl0_fcy sampled narrowly against lrr_dre sampled across the full space, and their total indices sum to 1.856 rather than 1, so most of the variance sits in interactions rather than in any single parameter.

Calibrated baseline
NSE 0.907715
After precipitation noise
NSE 0.907298
After rating-curve error
NSE 0.759226
Rating curve fit
R2 0.998705
  • Group courseworkThree contributors across five assignments; individual ownership of any single result is not claimed.
  • Course inputs are not redistributableThe forcing series, catchment area and the hmg package holding HBV001A are course-provided. The scientific runs cannot be reproduced from the public repository alone.
  • The event shape here is schematicNo observed hydrograph is reproduced. The rating curve, the perturbation and every metric are the repository's own; the trajectory they act on is a placeholder.
  • The README and the code disagreeThe README describes a plus/minus 15 cm water-level perturbation. The module bounds and the results file both record plus/minus 25 cm; 15 survives only as a stale default argument. The figures here follow the code.
  • Random error onlyThe precipitation study perturbs without systematic bias, which its own summary notes is the more consequential case and was not tested.
  • One event, one catchmentA single short high-flow event. Nothing here establishes that the same ordering holds for longer records or other catchments.
Read the full background

Problem

Why this work exists

A calibrated hydrological model can still hide large uncertainty from forcing data, rating curves, parameters, and model structure.

Contribution

What I can claim

Contributed within a three-person TUM seminar team to a progressive workflow covering differential-evolution calibration, sensitivity analysis, precipitation perturbation, and rating-curve uncertainty. Individual assignment ownership is not claimed.

Method

Where an interval comes from

An uncertainty band is not produced by widening a line.

  1. Simulate

    Several members are run from the same starting point under different assumptions.

  2. Diverge

    They agree near the start and separate through the middle of the horizon, which is where the modelled system is genuinely hardest.

  3. Summarise

    The spread is collapsed into a band.

  4. What this does not show

    An ensemble only explores the assumptions it was given. Agreement between members is not evidence of correctness - it can equally mean they share a blind spot.

How it was built

System

Workflow and decisions

  1. 1HBV baseline
  2. 2Parameter calibration
  3. 3Local sensitivity
  4. 4Global sensitivity
  5. 5Input and output uncertainty
  • Python
  • NumPy
  • SciPy (QMC sampling)
  • pandas
  • Matplotlib
  • LaTeX

Evidence

What is actually versioned

Best seminar resultNSE 0.908

Versioned group-seminar result for the calibrated HBV baseline.

Central findingOutput uncertainty dominates

The seminar report finds rating-curve uncertainty more consequential than the tested precipitation noise.

How the work is checked

Quality controls

How the work is checked

  • Versioned reports, figures, and result artifacts
  • Explicit environment variables replace machine-specific data paths
  • Repository integrity checker validates key seminar artifacts
  • Team authorship and unavailable course inputs are documented

Limitations

Where the evidence stops

  • Group coursework; individual ownership of each result is not established
  • Course-provided forcing data and the hmg package are not redistributable
  • Full scientific reruns require authorized course inputs
What this changed in my practice

What this changed in my practice

Calibration quality cannot stand in for uncertainty analysis; observation and transformation errors can dominate parameter uncertainty.