Raw model output on the native 0.25° grid — no MOS, no bias correction, no post-processing. Scores understate operational forecast quality. Read the fairness statement →

CastCheck methodology v0.2 · data through 2026-08-30

How far off was each weather model?

Over all available history, across 23 U.S. stations, the most accurate raw daily maximum temperature forecast 1 day ahead is GraphCast (IFS init): mean absolute error 5.22 °F [5.01, 5.48], bias -5.16 °F, on n = 32 scored days.

Scope: raw model output on the native 0.25° grid, daily maximum/minimum taken as the max/min of the four common 6-hourly samples, scored against the first final NWS Daily Climate Report, errors computed in °C and shown in °F (methodology v0.2).

Lead day 1 — daily maximum temperature

all available history, all stations pooled, 12Z initialization, bilinear interpolation. Lower MAE is better; bias is positive when the model is too warm. Every number links to its permanent page. Skill is measured against persistence; skill, debiased repeats it after removing each station's constant offset, which is why a station with a steady warm bias can look skill-less in one column and skilful in the other. Under n: the mean number of stations behind each scored day, and how many of those days carry a QC flag on the observation.
rankModel MAE °FBias °F ±3 °F Skill Skill, debiased nvs leader
1 GraphCast (IFS init)graphcast_ifs 5.22 [5.01, 5.48] -5.16 [-5.43, -4.94] 21% -0.74 +0.61 3223 stns · 2 QC lowest MAE in this view
NCEP GFSgfs 2.78 [2.64, 2.92] -0.93 [-1.33, -0.48] 62% -0.03 +0.10 2923 stns · 2 QC
ECMWF AIFS Singleaifs_single 3.52 [3.37, 3.70] -3.14 [-3.40, -2.94] 43% -0.31 +0.42 2923 stns · 2 QC
ECMWF IFS HRESifs_hres 3.65 [3.47, 3.85] -3.22 [-3.47, -2.95] 44% -0.37 +0.26 2423 stns · 2 QC
Pangu-Weather (IFS init)pangu_ifs 3.70 [3.36, 4.03] -3.03 [-3.44, -2.63] 41% -0.20 +0.39 223 stns · 2 QC
FourCastNet v2 (GFS init)fourcastnet_gfs 3.91 [3.51, 4.31] -3.58 [-3.67, -3.49] 46% -0.27 +0.87 223 stns · 2 QC
Pangu-Weather (GFS init)pangu_gfs 4.07 [3.79, 4.36] -3.34 [-3.77, -2.91] 35% -0.32 +0.35 223 stns · 2 QC
FourCastNet v2 (IFS init)fourcastnet_ifs 4.08 [3.83, 4.34] -3.76 [-3.83, -3.70] 43% -0.32 +0.90 223 stns · 2 QC
Persistence (baseline)persistence · baseline 4.84 [4.63, 5.08] -0.04 [-0.17, 0.09] 47% 97223 stns · 7 QC
Aurora (IFS init)aurora_ifs 5.62 [5.36, 5.88] -5.62 [-5.88, -5.36] 22% -0.82 +0.61 223 stns · 2 QC
GraphCast (GFS init)graphcast_gfs 5.86 [5.47, 6.24] -5.86 [-6.24, -5.47] 15% -0.90 +0.42 223 stns · 2 QC
Aurora (GFS init)aurora_gfs 6.53 [6.26, 6.79] -6.53 [-6.79, -6.26] 11% -1.11 +0.60 223 stns · 2 QC

+ model too warm · − model too cold · bias interval includes zero · ★ lowest MAE · = not distinguishable from the leader · ▼ significantly worse · n < 30 greyed and unranked · CI is a 95 % moving-block bootstrap interval.

Lead day 3 — daily maximum temperature

all available history, all stations pooled, 12Z initialization, bilinear interpolation. Lower MAE is better; bias is positive when the model is too warm. Every number links to its permanent page. Skill is measured against persistence; skill, debiased repeats it after removing each station's constant offset, which is why a station with a steady warm bias can look skill-less in one column and skilful in the other. Under n: the mean number of stations behind each scored day, and how many of those days carry a QC flag on the observation.
rankModel MAE °FBias °F ±3 °F Skill Skill, debiased nvs leader
1 GraphCast (IFS init)graphcast_ifs 5.51 [5.18, 5.86] -5.40 [-5.77, -5.06] 21% -0.27 +0.66 3023 stns lowest MAE in this view
NCEP GFSgfs 3.10 [2.70, 3.48] -0.80 [-1.50, -0.09] 57% +0.14 +0.25 2723 stns · 2 QC
ECMWF IFS HRESifs_hres 3.65 [3.52, 3.80] -2.89 [-3.05, -2.55] 46% -0.03 +0.51 2223 stns · 2 QC
ECMWF AIFS Singleaifs_single 3.69 [3.50, 3.93] -3.25 [-3.54, -3.06] 40% -0.02 +0.60 2723 stns · 2 QC
Persistence (baseline)persistence · baseline 7.24 [6.87, 7.62] -0.11 [-0.47, 0.22] 34% 97023 stns · 7 QC

Lead day 5 — daily maximum temperature

all available history, all stations pooled, 12Z initialization, bilinear interpolation. Lower MAE is better; bias is positive when the model is too warm. Every number links to its permanent page. Skill is measured against persistence; skill, debiased repeats it after removing each station's constant offset, which is why a station with a steady warm bias can look skill-less in one column and skilful in the other. Under n: the mean number of stations behind each scored day, and how many of those days carry a QC flag on the observation.
rankModel MAE °FBias °F ±3 °F Skill Skill, debiased nvs leader
1 GraphCast (IFS init)graphcast_ifs 5.54 [4.96, 6.02] -5.17 [-5.73, -4.39] 24% -0.10 +0.59 3023 stns · 2 QC lowest MAE in this view
NCEP GFSgfs 3.35 [3.02, 3.54] -1.13 [-1.87, -0.07] 56% +0.15 +0.36 2523 stns · 2 QC
ECMWF IFS HRESifs_hres 3.73 [3.54, 3.86] -2.64 [-3.21, -2.21] 45% +0.03 +0.53 2023 stns · 2 QC
ECMWF AIFS Singleaifs_single 3.85 [3.71, 4.02] -3.35 [-3.69, -3.02] 38% +0.02 +0.60 2423 stns · 2 QC
Persistence (baseline)persistence · baseline 7.84 [7.44, 8.22] -0.19 [-0.73, 0.29] 30% 96823 stns · 7 QC

Lead day 7 — daily maximum temperature

all available history, all stations pooled, 12Z initialization, bilinear interpolation. Lower MAE is better; bias is positive when the model is too warm. Every number links to its permanent page. Skill is measured against persistence; skill, debiased repeats it after removing each station's constant offset, which is why a station with a steady warm bias can look skill-less in one column and skilful in the other. Under n: the mean number of stations behind each scored day, and how many of those days carry a QC flag on the observation. in the rank column means fewer than 30 scored days, so the group is published but not ranked.
rankModel MAE °FBias °F ±3 °F Skill Skill, debiased nvs leader
NCEP GFSgfs 3.84 [3.59, 4.05] -1.19 [-1.67, -0.17] 51% +0.08 +0.19 2323 stns · 2 QC
ECMWF IFS HRESifs_hres 4.06 [3.37, 4.45] -3.08 [-3.85, -2.22] 43% +0.06 +0.32 1722.9 stns · 2 QC
ECMWF AIFS Singleaifs_single 4.33 [4.04, 4.63] -3.83 [-4.17, -3.52] 38% -0.03 +0.56 2323 stns · 2 QC
GraphCast (IFS init)graphcast_ifs 5.67 [4.92, 6.37] -5.16 [-6.08, -3.87] 26% -0.08 +0.40 2823 stns · 3 QC
Persistence (baseline)persistence · baseline 8.15 [7.72, 8.56] -0.28 [-0.92, 0.35] 29% 96623 stns · 7 QC

Every model × every lead day

MAE in °F with the bias underneath, all available history, 12Z, bilinear, daily maximum. The sparkline is the same model's MAE across lead days 1–9 on a shared vertical scale.

Model d1d2d3d4d5d6d7d8d9lead 1–9
ECMWF AIFS Singleaifs_single 3.52-3.14 · n=29 3.63-3.30 · n=28 3.69-3.25 · n=27 3.70-3.20 · n=26 3.85-3.35 · n=24 4.16-3.52 · n=24 4.33-3.83 · n=23 4.69-4.22 · n=22 5.16-4.70 · n=21 ECMWF AIFS Single MAE by lead day 1 to 9
Aurora (GFS init)aurora_gfs 6.53-6.53 · n=2 6.80-6.80 · n=1 Aurora (GFS init) MAE by lead day 1 to 9
Aurora (IFS init)aurora_ifs 5.62-5.62 · n=2 5.26-5.22 · n=1 Aurora (IFS init) MAE by lead day 1 to 9
FourCastNet v2 (GFS init)fourcastnet_gfs 3.91-3.58 · n=2 3.68-3.68 · n=1 FourCastNet v2 (GFS init) MAE by lead day 1 to 9
FourCastNet v2 (IFS init)fourcastnet_ifs 4.08-3.76 · n=2 3.43-3.39 · n=1 FourCastNet v2 (IFS init) MAE by lead day 1 to 9
NCEP GFSgfs 2.78-0.93 · n=29 2.98-0.96 · n=28 3.10-0.80 · n=27 3.25-1.04 · n=26 3.35-1.13 · n=25 3.77-1.47 · n=24 3.84-1.19 · n=23 4.23-1.38 · n=22 4.90-1.52 · n=21 NCEP GFS MAE by lead day 1 to 9
GraphCast (GFS init)graphcast_gfs 5.86-5.86 · n=2 6.34-6.34 · n=1 GraphCast (GFS init) MAE by lead day 1 to 9
GraphCast (IFS init)graphcast_ifs 5.22-5.16 · n=32 5.36-5.29 · n=31 5.51-5.40 · n=30 5.47-5.25 · n=30 5.54-5.17 · n=30 5.53-4.93 · n=29 5.67-5.16 · n=28 6.26-5.61 · n=27 6.63-5.77 · n=26 GraphCast (IFS init) MAE by lead day 1 to 9
ECMWF IFS HRESifs_hres 3.65-3.22 · n=24 3.65-3.05 · n=22 3.65-2.89 · n=22 3.63-2.75 · n=21 3.73-2.64 · n=20 3.79-2.55 · n=19 4.06-3.08 · n=17 4.21-3.02 · n=17 4.82-3.57 · n=15 ECMWF IFS HRES MAE by lead day 1 to 9
Pangu-Weather (GFS init)pangu_gfs 4.07-3.34 · n=2 3.84-3.31 · n=1 Pangu-Weather (GFS init) MAE by lead day 1 to 9
Pangu-Weather (IFS init)pangu_ifs 3.70-3.03 · n=2 3.60-2.79 · n=1 Pangu-Weather (IFS init) MAE by lead day 1 to 9
Persistence (baseline)persistence 4.84-0.04 · n=972 6.60-0.07 · n=971 7.24-0.11 · n=970 7.57-0.15 · n=969 7.84-0.19 · n=968 7.97-0.23 · n=967 8.15-0.28 · n=966 8.25-0.32 · n=965 8.31-0.35 · n=964 Persistence (baseline) MAE by lead day 1 to 9

Where the errors are

Mean bias in °F of each station's best model, lead day 1, daily maximum, all window, 12Z, bilinear125°W115°W105°W95°W85°W75°W65°W25°N30°N35°N40°N45°N50°NKATL Atlanta Hartsfield: bias -2.04 °F, n = 2KATLKAUS Austin Bergstrom: bias -1.11 °F, n = 29KAUSKBOS Boston Logan: bias -0.95 °F, n = 2KBOSKDCA Washington Reagan: bias -1.69 °F, n = 2KDCAKDEN Denver Intl: bias -3.33 °F, n = 2KDENKDFW Dallas-Fort Worth: bias +0.88 °F, n = 29KDFW+KEWR Newark Liberty: bias +0.39 °F, n = 2KEWR+KIAH Houston Bush: bias -0.20 °F, n = 29KIAHKLAS Las Vegas Harry Reid: bias -3.83 °F, n = 2KLASKLAX Los Angeles Intl: bias +0.57 °F, n = 29KLAX+KMIA Miami Intl: bias -1.63 °F, n = 29KMIAKMSP Minneapolis-St Paul: bias +2.21 °F, n = 29KMSP+KMSY New Orleans Intl: bias -2.73 °F, n = 2KMSYKNYC New York Central Park: bias -1.03 °F, n = 2KNYCKOKC Oklahoma City: bias +1.78 °F, n = 29KOKC+KORD Chicago O'Hare: bias -0.81 °F, n = 2KORDKPHL Philadelphia Intl: bias -1.13 °F, n = 2KPHLKPHX Phoenix Sky Harbor: bias -2.58 °F, n = 29KPHXKSAN San Diego Lindbergh: bias -2.57 °F, n = 2KSANKSAT San Antonio Intl: bias -1.31 °F, n = 29KSATKSEA Seattle-Tacoma: bias -0.73 °F, n = 24KSEAKSFO San Francisco Intl: bias -2.01 °F, n = 2KSFOKTTN Trenton Mercer: bias -0.91 °F, n = 2KTTN
Each station's best model at lead day 1 (all available history, 12Z, bilinear, daily maximum): dot area grows with the number of scored days, fill is the mean bias (warm = model too warm, cool = too cold, grey = interval includes zero). There is no coastline because CastCheck ships no third-party boundary file; the frame is a latitude/longitude graticule. Hover a dot for its numbers.
The same data as a table
StationBest model MAE °FBias °F n
KATL Atlanta Hartsfield FourCastNet v2 (IFS init)2.04 -2.04 2
KAUS Austin Bergstrom NCEP GFS1.58 -1.11 29
KBOS Boston Logan Pangu-Weather (IFS init)2.17 -0.95 2
KDCA Washington Reagan Pangu-Weather (GFS init)1.69 -1.69 2
KDEN Denver Intl Pangu-Weather (IFS init)3.33 -3.33 2
KDFW Dallas-Fort Worth NCEP GFS1.83 +0.88 29
KEWR Newark Liberty Pangu-Weather (IFS init)1.41 +0.39 2
KIAH Houston Bush NCEP GFS1.28 -0.20 29
KLAS Las Vegas Harry Reid Aurora (IFS init)3.83 -3.83 2
KLAX Los Angeles Intl ECMWF AIFS Single1.48 +0.57 29
KMIA Miami Intl NCEP GFS1.90 -1.63 29
KMSP Minneapolis-St Paul NCEP GFS2.53 +2.21 29
KMSY New Orleans Intl FourCastNet v2 (IFS init)2.73 -2.73 2
KNYC New York Central Park Aurora (IFS init)1.03 -1.03 2
KOKC Oklahoma City NCEP GFS2.61 +1.78 29
KORD Chicago O'Hare FourCastNet v2 (GFS init)0.81 -0.81 2
KPHL Philadelphia Intl Pangu-Weather (GFS init)1.13 -1.13 2
KPHX Phoenix Sky Harbor NCEP GFS2.76 -2.58 29
KSAN San Diego Lindbergh FourCastNet v2 (IFS init)2.57 -2.57 2
KSAT San Antonio Intl NCEP GFS1.65 -1.31 29
KSEA Seattle-Tacoma ECMWF IFS HRES1.99 -0.73 24
KSFO San Francisco Intl FourCastNet v2 (GFS init)2.01 -2.01 2
KTTN Trenton Mercer GraphCast (GFS init)0.91 -0.91 2

Data availability

Each model is scored only over its own available period (2024-01-02 → 2026-08-30); the windows above are therefore not identical across models. Pairwise comparisons on the permanent-link pages use common days only.

ModelPeriod Scored daysCoverage
ECMWF AIFS Single 2026-08-02 → 2026-08-3029
Aurora (GFS init) 2026-08-29 → 2026-08-302
Aurora (IFS init) 2026-08-29 → 2026-08-302
FourCastNet v2 (GFS init) 2026-08-29 → 2026-08-302
FourCastNet v2 (IFS init) 2026-08-29 → 2026-08-302
NCEP GFS 2026-08-02 → 2026-08-3029
GraphCast (GFS init) 2026-08-29 → 2026-08-302
GraphCast (IFS init) 2026-01-02 → 2026-08-3032
ECMWF IFS HRES 2026-08-02 → 2026-08-3024
Pangu-Weather (GFS init) 2026-08-29 → 2026-08-302
Pangu-Weather (IFS init) 2026-08-29 → 2026-08-302
Persistence (baseline) 2024-01-02 → 2026-08-30972

Stations