{
  "schema_version": 1,
  "study_id": "world-cities-week-2026-09-21",
  "station": "EGLL",
  "location": "London Heathrow",
  "unit": "mm",
  "capture_dates": "September 21\u201327, 2026",
  "names": {
    "visualCrossing": "Visual Crossing",
    "pirateWeather": "Pirate Weather",
    "openMeteo": "Open-Meteo",
    "metNorway": "MET Norway",
    "nationalWeatherService": "NWS",
    "weatherKit": "Apple Weather"
  },
  "observation_source": "NOAA NCEI GHCNh",
  "observation_source_url": "https://www.ncei.noaa.gov/oa/global-historical-climatology-network/hourly/access/by-year/2026/psv/GHCNh_UKI0000EGLL_2026.psv",
  "observation_snapshot": "2026-10-01T03:35:23.872112+00:00",
  "observation_cutoff": "2026-09-30T14:10:00Z",
  "observation_sha256": "4815dec54bf6c368096ac939a05c6a2bcaa05a0c239254e3788f514fa9ddf1b5",
  "forecast_sha256": "20f0fa0cf54f032ae4d5efabacfc108a9f29b3748e70976aacb09777d2ad7dad",
  "results": {
    "all": {
      "n": 266,
      "unique_observations": 139,
      "observed_mean": 0.13157894736842105,
      "valid_from": "2026-09-22T01:00:00Z",
      "valid_through": "2026-09-28T14:00:00Z",
      "scores": [
        {
          "provider": "visualCrossing",
          "mae": 0.13270676691729325,
          "bias": -0.12894736842105264,
          "rmse": 0.5541029463808778
        },
        {
          "provider": "pirateWeather",
          "mae": 0.1387218045112782,
          "bias": -0.12443609022556391,
          "rmse": 0.5577276668553748
        },
        {
          "provider": "openMeteo",
          "mae": 0.13721804511278196,
          "bias": -0.12593984962406016,
          "rmse": 0.5576198074172583
        },
        {
          "provider": "metNorway",
          "mae": 0.13270676691729325,
          "bias": -0.13045112781954887,
          "rmse": 0.5566076087111889
        },
        {
          "provider": "weatherKit",
          "mae": 0.1356015037593985,
          "bias": -0.12755639097744362,
          "rmse": 0.5570062971256196
        }
      ]
    },
    "wet": {
      "n": 31,
      "unique_observations": 16,
      "observed_mean": 1.1290322580645162,
      "valid_from": "2026-09-22T06:00:00Z",
      "valid_through": "2026-09-27T12:00:00Z",
      "scores": [
        {
          "provider": "visualCrossing",
          "mae": 1.1225806451612903,
          "bias": -1.1225806451612903,
          "rmse": 1.6226223299974802
        },
        {
          "provider": "pirateWeather",
          "mae": 1.1290322580645162,
          "bias": -1.1290322580645162,
          "rmse": 1.6299614086070835
        },
        {
          "provider": "openMeteo",
          "mae": 1.1290322580645162,
          "bias": -1.1290322580645162,
          "rmse": 1.6299614086070835
        },
        {
          "provider": "metNorway",
          "mae": 1.1290322580645162,
          "bias": -1.1290322580645162,
          "rmse": 1.6299614086070835
        },
        {
          "provider": "weatherKit",
          "mae": 1.1290322580645162,
          "bias": -1.1290322580645162,
          "rmse": 1.6299614086070835
        }
      ]
    },
    "dry": {
      "n": 235,
      "unique_observations": 123,
      "observed_mean": 0.0,
      "valid_from": "2026-09-22T01:00:00Z",
      "valid_through": "2026-09-28T14:00:00Z",
      "scores": [
        {
          "provider": "visualCrossing",
          "mae": 0.002127659574468085,
          "bias": 0.002127659574468085,
          "rmse": 0.014586499149789458
        },
        {
          "provider": "pirateWeather",
          "mae": 0.008085106382978723,
          "bias": 0.008085106382978723,
          "rmse": 0.04031788579394532
        },
        {
          "provider": "openMeteo",
          "mae": 0.006382978723404256,
          "bias": 0.006382978723404256,
          "rmse": 0.03859224924939799
        },
        {
          "provider": "metNorway",
          "mae": 0.0012765957446808512,
          "bias": 0.0012765957446808512,
          "rmse": 0.014586499149789458
        },
        {
          "provider": "weatherKit",
          "mae": 0.004553191489361702,
          "bias": 0.004553191489361702,
          "rmse": 0.02674545099519113
        }
      ]
    }
  },
  "method": {
    "interval_seconds": 3600,
    "lead_hours": [
      12,
      36
    ],
    "lead_reference": "interval start minus actual response receipt",
    "missing_as_zero": false,
    "trace_policy": "Exclude censored trace amounts",
    "forecast_interval_end_offsets_seconds": {
      "visualCrossing": 0,
      "pirateWeather": 3600,
      "openMeteo": 0,
      "metNorway": 3600,
      "weatherKit": 3600
    },
    "excluded_providers": {
      "nationalWeatherService": "Saved forecasts have rain probability, not amounts."
    },
    "weighting": "Identical capture/hour cases for all five providers; repeated forecasts are not independent observations.",
    "scope": "Heathrow only. Liquid-equivalent precipitation amounts, not rain probabilities or minute-by-minute timing. No global rain winner."
  }
}
