Seasonal rainfall outlook
Research reconstruction · not an official forecast
Average local probability
Rainfall amount
Forecast signal
Historical skill
Signal strength describes how far this forecast's probabilities depart from climatology. Historical skill describes how forecasts made the same way scored in past years. A strong signal is not a confidence rating.
All targets in this cycle
Cycle status and record
Maps
How to read this map
Grey, white and blank areas
Light grey: outside the selected area. Dark grey: inside the area but without values, for example cells where reference-period rainfall is too small for tercile categories, or (percent maps) below 10 mm. White on tercile maps: no category reaches 40%, or two categories tie. Sea cells have no CHIRPS data.
Smoothing and resolution. Maps are drawn on a 12× finer display grid with light Gaussian smoothing (σ = 0.6 grid cells); all numbers on this page use the original 0.25° grid. The model's own resolution is about 1°: each model cell covers 4×4 grid cells, so detail within a 1° box comes from local CHIRPS rainfall statistics used in the amount correction, not from the model.
Verification
Frozen forecasts compared with official CHIRPS v2.0 observations once a target period is complete. Each result is one season or month, so it shows what happened this time, not long-term reliability.
Historical performance
How forecasts made with the same method scored in past years against climatology (the observed frequency of each tercile in the training years, about one-third each). The main number is the cross-validated 1993–2016 score: each year is forecast with parameters fitted without that year. Later years are exploratory: they were seen while the method was chosen.
Historical performance by rainfall region
Methods & data
In brief
Each cycle starts from the ECMWF SEAS5 seasonal ensemble issued on the 1st of the initialization month. For every 0.25° grid cell in Ethiopia the forecast rainfall is corrected toward the CHIRPS observed mean and variability, then turned into tercile probabilities (below, near or above normal relative to the cycle's CHIRPS reference period). The probabilities are finally blended with climatology using one weight per target, chosen to give the best past scores. Climatology assigns approximately one-third probability to each tercile; the calculations use the observed category frequencies of the training reference period.
Probabilities and amounts are produced separately: the probability skill (RPSS) on this site refers to the blended probabilities, and the rainfall amount skill (CRPSS) to the amount-corrected ensemble.
The raw benchmark is the uncorrected model: raw ECMWF members counted against each cell's CHIRPS tercile limits, with no correction, smoothing or blend. For May-initialized JJAS over 2017–2025 it scores RPSS −0.41, far below climatology, which is why calibration is needed.
Data
| Source | Details |
|---|---|
| ECMWF SEAS5 | Copernicus CDS seasonal-original-single-levels, system 51, total precipitation, 1993 to the forecast year; 25 members to 2016, 51 from 2017; 1° grid |
| CHIRPS v2.0 | 0.25° daily rainfall; archive 1993–2025; verification months from the official monthly files, checked against the archive where they overlap |
| Areas | All Ethiopia (1,484 cells) and one rainfall domain per season, built from rainfall regimes: FMAM R2 (Belg), JJAS R1+R2, ONDJ R3 (Deyr). The domains are for display and summaries only; calibration uses every cell. |
Workflow (eight scripted stages)
- 1
Download
ECMWF SEAS5 (system 51) daily accumulated precipitation from the Copernicus CDS for the initialization month, 1993 to the forecast year.
download_seasonal_forecasts_daily_c3s.py - 2
Inspect
Inventory every year: initialization, lead times, member counts and accumulation increments (GRIB packing tolerance 0.2 mm).
inspect_inputs.py - 3
Prepare
De-accumulate to daily totals, sum the season and each month; CHIRPS on the same dates.
prepare_seasonal.py · run_monthly.py - 4
Regrid
Each 1° model cell is copied into its 4×4 block of 0.25° CHIRPS cells (no interpolation).
regrid_seasonal.py - 5
Calibrate
Per-cell amount correction, smoothed tercile counts and one climatology-blend weight per target.
final_shared_blend.py - 6
Evaluate
Nested cross-validation 1993–2016; exploratory fixed-fit scores for later years; whole-year significance tests.
local_blend.py · decision_gates.py - 7
Deliver
Maps, summaries and an offline gallery; forecasts frozen with SHA-256 hashes before observations are used.
run_operational.py · build_season_products.py - 8
Verify
Official CHIRPS v2.0 monthly files, checked against the archive where they overlap, scored per month and season.
prepare_verification_2026.py · verify_frozen_2026.py
Every stage is a script in scripts/; documents in docs/ record each step, issue and decision (runbook: docs/38; per-season guides: docs/40).
Equations
- Amount correction per cell, equal weight per year:
x̂ = max(0, μobs + r·(x − μmodel)),r = clip(σobs/σmodel, 0.5, 2) - Tercile probabilities from the corrected members against CHIRPS tercile limits, smoothed:
(n + 0.5)/(M + 1.5) - Climatology blend:
pfinal = (1 − λ)·pmodel + λ·pclimatology, with one λ per target fitted on leave-one-year-out RPS.
pclimatologyis, for each grid cell, the observed frequency of each tercile in the training reference years (about one-third each; it differs slightly because of sample size, category limits and ties). - Skill score:
RPSS = 1 − RPSforecast / RPSclimatology; RPSS +0.05 means a 5% lower ranked probability score than climatology. CRPSS is the same for rainfall amounts.
How the method was chosen
A change is adopted only if it improves the cross-validated 1993–2016 scores (Holm-adjusted p < 0.05 over the five JJAS targets) and does not worsen 2017–2025. Also evaluated and not adopted: regularized Dirichlet recalibration and per-cell or regime-specific blend weights.
| Candidate change | Score change 1993–2016 | Score change 2017–2025 | Decision |
|---|---|---|---|
| Fit the blend weight on Ethiopia only | +0.0003 to +0.0013 | −0.0038 to −0.0001 | Not adopted |
| Square-root amount correction (probabilities) | −0.0007 to +0.0003 | −0.0033 to −0.0006 | Not adopted |
| Remove the climatology blend | +0.0106 to +0.0316 | −0.0137 to +0.0211 | Not adopted |
| Plain climatology | +0.0017 to +0.0210 | +0.0044 to +0.0303 | Not adopted |
| Square-root amount correction (amounts, CRPS in mm) | −0.13 to −0.10 | lower in all targets | Passes for all targets; candidate for the next cycle |
Ensemble size and spread
| Target | RPS, 51 members | RPS, 25-member subsets (mean) | Spread / error (hindcast → 2017–2025) |
|---|---|---|---|
| JJAS | 0.4284 | 0.4307 | 0.72 → 0.80 |
| Jun | 0.4590 | 0.4600 | 0.68 → 0.64 |
| Jul | 0.4506 | 0.4522 | 0.74 → 0.74 |
| Aug | 0.4264 | 0.4284 | 0.78 → 0.76 |
| Sep | 0.4548 | 0.4557 | 0.78 → 0.73 |
Calibration parameters are fitted mostly on 25-member hindcasts and applied to 51-member forecasts. In 2017–2025 the 51-member forecasts scored about the same as, or slightly better than, 25-member subsets, so the transfer did not degrade scores in the years tested; this does not show it is neutral in every year or region. The corrected ensemble is under-dispersive (spread smaller than error), which the climatology blend partly offsets. Monthly and seasonal outlooks are calibrated separately: for JJAS 2026 over all Ethiopia the corrected monthly means sum to 378 mm against 375 mm for the season (+3.3 mm).
Quality control
- Every forecast file is inventoried; re-downloaded years were bit-identical, confirming SEAS5 system 51.
- Small negative daily increments (≤ 0.15 mm) are GRIB packing rounding; tolerated up to 0.2 mm and clipped, and the seasonal sum is checked.
- CHIRPS sea cells (223) are always missing; no partial season enters any fit.
- Verification observations are compared with the archive in the overlap year (tolerance 0.0001 mm/day) before use.
Limitations
- Few evaluation years and single verification seasons give wide uncertainty; regional and monthly results are noisy.
- The later evaluation years were inspected during method development; the cleanest evidence is the cross-validated 1993–2016 score.
- The 0.25° maps repeat 1° model information; they add no dynamical detail.
- All cycles are research reconstructions produced after their initialization dates, not official EMI or ICPAC forecasts.
Reproduce
git clone https://github.com/YonSci/calibrated_seasonal_rainfall.git
python -m venv .venv && .venv\Scripts\activate && pip install -r requirements.txt
set CALIBRATION_CYCLE=config\cycles\sep_2026_ondj.json
python scripts\run_operational.py --config config\cycles\sep_2026_ondj.json --workflow all
python scripts\build_site.py
Raw ECMWF and CHIRPS data are not stored in the repository. Step-by-step guides: docs/40; project status: docs/36.
Downloads
Individual maps: use Download PNG in the map viewer. Code, documentation and notebooks: GitHub repository.