How we score
Hindcast checks its own forecasts against what actually happened, every night, for every area people look at. This page explains exactly how, so you can judge the numbers yourself.
Areas, not addresses
Everything works on an 11 km grid (0.1° of latitude and longitude). Your browser rounds your location to the grid before it sends anything, so we score and serve areas, never exact places.
The models
We use seven forecast models through Open-Meteo: ECMWF IFS and ECMWF AIFS (Europe), GFS, HRRR and NBM (United States), ICON (Germany) and GEM (Canada). HRRR and NBM cover North America only, and HRRR looks about two days ahead, so some areas and days have fewer models.
Our forecast archive and lead time
Four times a day we save every model’s forecast for every area we track. “3 days ahead” means: for every hour of a local day, we take the saved forecast made closest to 72 hours before that hour (always within 3 hours of it), then take that day’s high, low, rain total and peak wind. We score lead times of 1, 2, 3, 5 and 7 days. A new area builds its record from the day we start tracking it: next-day scores after the first full day, 7-day scores after a week.
What actually happened
We use the nearest weather station within 25 km of the area’s center whose height is within 150 m of the area’s (the median elevation of nine points across it): a National Weather Service station in the US, and elsewhere the nearest airport weather report (METAR) that NOAA publishes for airports worldwide. A station far below a city would make every forecast there look too warm, so we skip it. Where there’s no station that close, we don’t score the area: the forecast and model agreement still work, but there’s nothing trustworthy to check against. Every score lists which station it used and for how many days.
Rain amounts come from the stations’ hourly reports in North America. Most stations elsewhere report only whether rain, drizzle or snow was falling, so there we score rain or no rain, but not the amount.
Stations report hourly, so a day’s high is the warmest hourly reading. We compute the forecast’s high the same way, so the comparison is fair.
Metrics
| Number | What it means |
|---|---|
| Within ±2°F | Share of days the forecast high (or low) landed within 2°F (1.1°C) of what was observed. |
| Average miss | Mean absolute error: the typical size of the miss, ignoring direction. |
| Runs warm / cold | Bias: the average signed error. Positive means the model forecast too warm. |
| Rain calls | A day counts as rainy at 0.01 in (0.25 mm) or more. We count hits, misses, false alarms and correct dry calls. |
The blend and its weights
The headline forecast blends all available models. Each model’s weight for a given variable and lead time comes from its average miss over the last 60 scored days in that area: weight is proportional to 1 / (average miss)². With few days of evidence that would chase luck, so we shrink the weights toward equal: the skill-based share is n / (n + 20) for n scored days, and below 10 days every model counts equally.
When we score the blend for a past day, we use the weights that were actually in force when that forecast was made, never today’s weights, so the blend can’t grade itself with hindsight. Any day rebuilt after the fact is weighted equally and marked “reconstructed”.
Confidence labels
| Variable | Models agree | Some disagreement | Models split |
|---|---|---|---|
| Temperature (highest minus lowest model) | ≤ 3°F | 3–7°F | > 7°F |
| Rain (share of models showing it) | ≥ 80% or ≤ 20% | 21–39% or 61–79% | 40–60% |
| Wind (highest minus lowest model) | ≤ 5 mph | 5–10 mph | > 10 mph |
Pro shows, for each day, how many of the seven models show more than 0.1 in (2.5 mm) of rain or a low at or below freezing. With seven models that’s a rough guide, not a calibrated probability, and we label it that way.
Known limits
A single station can be unrepresentative of an 11 km area, especially near coasts and mountains. Airports are often a little outside town. Thirty days is a small sample. We show the counts behind every percentage for this reason.