Casa Blanca Weather

Methods and verification
For hydrologists, meteorologists and anyone who wants the details. Station ISTANF10, Stanford, Western Cape.

Casa Blanca Weather combines four global weather models, corrects each against three years of readings from one farm weather station in Stanford, and blends them. This page describes exactly what is done, how well it has worked on a year of data the corrections never saw, and where it falls short.

Download this page as a PDF

1. The station

Instrument. Ambient Weather WS-2902 (station ISTANF10), Casa Blanca Farmstead, Stanford, Western Cape; lat −34.4417, lon 19.4583. The integrated sensor array (thermo-hygrometer in a small passive radiation shield, cup anemometer, wind vane, tipping-bucket rain gauge, solar/UV sensor) is mounted at about 2.5 m, north-oriented, in the most open spot of a ½-acre farmstead. Windbreak trees line the perimeter, especially to the south. Record from 27 June 2023 (first full day 28 June), 5-minute data from the Ambient Weather Network API.

Comparison with WMO siting. WMO guidance (CIMO Guide) puts air temperature at 1.25–2 m in a ventilated screen over short grass, and wind at 10 m over open, level terrain with obstacles at a distance of at least ten times their height. This station meets neither: temperature is measured at 2.5 m (above the standard height) in a compact passive shield, and the anemometer is at 2.5 m and sheltered by trees and farm buildings. The readings are therefore site-representative (what this farmstead experiences) but not WMO-comparable. The wind sensor records about 0.4 × the ECMWF 10 m gust and rarely sees south to west afternoon winds, which the trees block or deflect.

Rain gauge. The WS-2902 gauge is a small, uncalibrated tipping bucket on the same mast (rim ≈ 2.5 m rather than the usual 0.3–1 m). Expect under-catch in wind (the rim is exposed) and in heavy rain (tips are missed while the bucket moves), possible loss of very light drizzle, and no snow/hail capability. We have not compared it with a standard gauge. Daily totals are built from the device's daily counter, corrected for the midnight carry-over and counter resets; days with fewer than 260 of 288 records or where the daily and cumulative counters disagree are excluded, never filled.

2. Models

3. Method

3.1 Per-model temperature correction (MOS-style linear regression)

For each model, the error (station − forecast) of the daily high and low is regressed on: a separate intercept per season (DJF, MAM, JJA, SON); forecast cloud fraction (daytime for the high, 00–08 h for the low); for the low, forecast night-time 10 m wind; for the high, (forecast high − 20 °C). The fit is robust least squares (three passes, trimming residuals beyond 3 × MAD). Training: complete station days up to 30 Sep 2025 (high-temperature training days: ECMWF 809, GFS 607, ICON 607, UKMO 160), using day-before forecasts where genuine and same-day forecasts otherwise.

Extra terms were tested out of sample and not kept because they did not improve the test year: a calm-clear night term in the low (forecast night wind < 10 km/h and cloud < 30 %); a hot-day term in the high (forecast high ≥ 30 °C); an offshore (NW–N–NE) warm-day term (forecast high ≥ 25 °C). Their coefficients are fixed at zero.

3.2 Adjustments applied to the blend

3.3 Blend

“Our forecast” is the equal-weight mean of the corrected models available at each lead (all four to day 5, then ECMWF, GFS, ICON on day 6 and ECMWF, GFS from day 7). No weights are fitted. The likely range drawn in the charts is the spread of the corrected models.

3.4 Rain

Rain is locally corrected, per model: a day is wet if the model's rain reaches a seasonal threshold chosen on training data to maximise the Heidke skill score for station ≥ 0.5 mm; wet-day amounts are then mapped by seasonal quantile mapping (1 % quantiles, station vs model, training years). The blend amount is the mean of the corrected models. The chance of rain shown is the mean of (a) the share of models above their wet threshold and (b) ECMWF's precipitation probability, recalibrated with a reliability table from the same-day archive.

3.5 Wind gusts

Station daily max gust is regressed linearly on each model's daily max 10 m gust (ECMWF: 0.407 × gust − 0.92 km/h; GFS 0.371 × gust + 5.65; ICON 0.394 × gust + 1.17; UKMO 0.332 × gust + 3.62), then averaged. This is the “Sheltered” gust. Because the regression is fitted on mostly ordinary days it shrinks towards typical values: on the 5 test-year days with a station gust ≥ 40 km/h the blend was 13.8 km/h too low on average. The strong-wind flag therefore fires at a tuned 35 km/h (test year: 2 of 5 events caught, 0 false alarms). “Open ground” is the raw ECMWF gust.

3.6 Confidence percentages

A day counts as a hit when the corrected high and low are both within ±2 °C of the station. Hit rates were measured by lead on 1 Oct 2025 – 26 Sep 2026 (out of sample) by re-issuing the forecast from archived model runs (day 1: 71%, day 7: 34%). Each day's value is adjusted by model spread: the days at each lead are split into terciles of corrected-model spread and the tercile's hit rate is used (bins of ≥ 30 days). Days 8–10 have no archive and are extrapolated (weighted least squares, logit(hit rate) = a + b*lead over measured leads 1-7); they are marked with an asterisk. Values are rounded to 5 % and clamped to 10–95 %.

4. Verification

Train/test split. All corrections were fitted on data up to 30 Sep 2025 and are verified on the following year, 1 Oct 2025 – 25 Sep 2026, which they never saw. Scores are bias / MAE / share within ±2 °C of the station on complete days, day-ahead forecasts (issued the day before).

4.1 Temperature, day-ahead, test year

ModelRawCorrectedn
biasMAE±2°biasMAE±2°
ECMWFhi-1.261.7761%+0.261.2782%359
ECMWFlo+1.401.7562%+0.171.2978%359
GFShi-1.301.7164%+0.421.2380%359
GFSlo+1.672.2750%-0.191.4670%359
ICONhi-3.003.0727%+0.341.3677%355
ICONlo+1.681.8659%-0.181.2781%355
UKMOhi-1.371.8459%+0.181.2181%314
UKMOlo-0.401.5970%-0.331.5571%315
Mean of 4hi-1.761.9654%+0.251.0886%312
Mean of 4lo+1.051.5270%-0.131.2280%313

°C; hi/lo = daily high/low; ±2° = share of days within ±2 °C. “Corrected” = per-model correction (3.1) only. Mean of 4 = equal-weight mean on days with all four models. Source: summary.md.

As published (blend + adjustments of 3.2, test year): day-ahead high MAE 1.01 °C (bias +0.04), low 1.21 (bias -0.13), n = 359; same-day issue high 0.98, low 0.86 (the morning nowcast gives the low a small cold bias, -0.41). Raw ECMWF day-ahead: high 1.77, low 1.75.

4.2 By lead time (published blend)

Lead (days)01234567
High MAE °C0.911.011.121.211.341.511.942.19
Low MAE °C0.891.211.271.341.401.541.721.81
Both within ±2 °C77%71%68%64%59%51%43%34%
n days360360360360360360360358

Re-issued from archived runs, 1 Oct 2025 – 26 Sep 2026. Source: confidence.json.

Wind: station daily max gust, day-ahead, test year: blend MAE 3.7 km/h (bias -2.4) vs raw ECMWF 22.8 km/h (bias +22.8, mostly the site effect), n = 359.

4.3 Rain

Test year 1 Oct 2025 – 25 Sep 2026: 359 valid station days (1 excluded, no gap-filling), 731 mm observed, 81 days ≥ 1 mm, 42 days ≥ 5 mm, 19 days ≥ 10 mm. Lead 0 is the archived same-day run. Leads with an archive so far: day 0, 1, 2, 3 (days 5, 7 pending).

≥ 1 mmLeadPODFARFreq. biasETSHSSevents / n
Our forecast00.860.271.190.570.7281 / 359
Our forecast10.840.281.160.550.7074 / 337
Our forecast20.830.361.290.460.6369 / 323
Our forecast30.770.371.230.420.6075 / 338
ECMWF raw00.790.271.090.520.6881 / 359
ECMWF raw10.820.261.110.560.7274 / 337
ECMWF raw20.740.311.070.460.6369 / 323
ECMWF raw30.680.351.050.390.5675 / 338
Persistence00.460.541.000.170.3081 / 358
Persistence10.290.721.030.040.0873 / 336
Persistence20.230.781.030.010.0169 / 322
Persistence30.200.790.96-0.01-0.0275 / 337

Wet-day contingency at ≥ 1 mm. Persistence = last station day known at issue time.

≥ 5 mmLeadPODFARFreq. biasETSHSSevents / n
Our forecast00.640.210.810.510.6842 / 359
Our forecast10.580.250.780.450.6236 / 337
Our forecast20.540.320.800.390.5635 / 323
Our forecast30.570.380.920.370.5437 / 338
ECMWF raw00.480.290.670.360.5342 / 359
ECMWF raw10.500.100.560.440.6136 / 337
ECMWF raw20.460.240.600.360.5335 / 323
ECMWF raw30.410.290.570.310.4837 / 338
Persistence00.310.691.000.120.2242 / 358
Persistence10.220.791.060.060.1236 / 336
Persistence20.090.910.97-0.01-0.0235 / 322
Persistence30.140.860.950.020.0437 / 337

Wet-day contingency at ≥ 5 mm (small sample: about 35–42 events).

AmountsLeadMAE wetbias wettotal ration wet
Our forecast04.40-2.480.8181
Our forecast14.07-1.940.8874
Our forecast24.23-1.420.9869
Our forecast35.09-2.910.8475
ECMWF raw04.89-3.640.6981
ECMWF raw14.52-3.130.7274
ECMWF raw25.11-3.220.7569
ECMWF raw35.29-3.550.7175
Climatology07.00-6.640.9781
Climatology16.78-6.401.0074
Climatology27.00-6.621.0169
Climatology36.78-6.391.0275
Persistence08.60-4.091.0081
Persistence19.23-5.011.0373
Persistence28.30-7.310.8569
Persistence39.47-6.160.8375

mm. Wet day = station ≥ 1 mm; total ratio = forecast total / observed total over all days. Climatology = station monthly mean daily rain (training years). Individual GFS, ICON and UKMO scores, raw and corrected, are in rain_verification.md.

Chance of rain (event: station ≥ 0.5 mm, same-day, n = 359): Brier score 0.066 for the site's chance, 0.088 for raw ECMWF probability and 0.193 for station monthly climatology (Brier skill +0.66 and +0.54). The Open-Meteo previous-runs archive carries no probabilities, so the chance cannot yet be verified beyond day 0; the recalibration table overlaps the test year, so this score is partly in-sample.

Forecast chancen daysmean forecastobserved frequency
0-10%2170.010.03
10-20%190.170.16
20-30%40.250.00
30-40%130.330.00
40-50%80.440.25
50-60%60.560.50
60-70%120.650.50
70-80%180.760.61
80-90%90.830.89
90-100%530.960.98

Reliability, day 0. Mid-range bins hold only 4–19 days each.

Reading the rain results. The corrected blend detects more wet days than raw ECMWF but also over-forecasts them at ≥ 1 mm (frequency bias above 1); skill falls with lead time, and persistence has little skill beyond day 0. Totals are under-forecast overall (total ratio 0.81–0.98 across days 0–3), but not uniformly: by season the day-1 ratio runs from 0.73 to 1.19; and heavy days are clearly too low: on the 15 day-1 days with ≥ 10 mm the gauge averaged 25.5 mm against 18.3 mm forecast. With a single uncalibrated gauge that probably under-catches, the true under-forecast of heavy rain may be larger than shown.

5. Limitations

6. Data and contact

Help us check our rain gauge. If you run a standard or calibrated rain gauge in or near Stanford, we would love to compare daily totals. Co-located comparisons (a standard gauge a few metres from ours) are especially welcome, as are any checks of our temperature and wind against reference instruments.

Data: 5-minute station records from 27 June 2023 and all archived forecasts and verification files are can be shared as CSV/JSON on request. Please contact Casa Blanca Farmstead, Stanford.

Page last updated Sun 27 Sep 2026, 18:08 SAST. Numbers are regenerated from the verification files at each daily rebuild.