{"castcheck_version":"0.3.3","schema_version":"0.3","methodology_version":"0.3.1","generated_at":"2026-10-28T17:03:06+00:00","computed_at":"2026-10-28T17:03:06+00:00","data_through":"2026-10-28","next_update":"2026-10-29T11:00:00+00:00","window":{"type":"90d","days":90,"start":"2026-07-31","end":"2026-10-28"},"units":{"mae":"degC","bias":"degC","rmse":"degC","mae_ci_low":"degC","mae_ci_high":"degC","bias_ci_low":"degC","bias_ci_high":"degC","mae_diff":"degC","ci_low":"degC","ci_high":"degC","n":"days","n_common":"days","n_debiased":"days","hit1f":"fraction","hit2f":"fraction","hit3f":"fraction","hit1f_ci_low":"fraction","hit1f_ci_high":"fraction","skill_persistence":"fraction","skill_persistence_debiased":"fraction","skill_ci_low":"fraction","skill_ci_high":"fraction","mae_persistence_common":"degC","mae_debiased":"degC","p_boot":"probability","init_hour":"UTC hour","lead_day":"days"},"method":{"ci":"circular moving-block bootstrap on each group's own realized date axis","resamples":1000,"level":0.95,"block":"7 days","min_n":30,"ci_min_n":28,"ci_min_blocks":4,"ci_absent":"null when n < ci_min_n or fewer than ci_min_blocks blocks","proportions":"Wilson score intervals (hit rates), not bootstrapped","skill_denominator":"mae_persistence_common on n_common days","debiasing":"out-of-sample: bias of the trailing 30 scored days before each day, min 15","multiplicity":"pairwise carries distinguishable_uncorrected, p_boot and distinguishable_holm; only the Holm flag is marked on the site","skill_min_n_common":10,"skill_reliable":"false when n_common < 10; the value is still published, but the site shows an em dash for it","ref":"https://castcheck.zifanzhang.com/methodology/"},"truth":{"source":"observed 2 m temperature at 00/06/12/18 UTC (routine METAR within +/-35 min) for t2* and for tmax_s/tmin_s; NWS Daily Climate Report (CLI), first final issuance after local midnight, for tmax_cli/tmin_cli","fallback":["CF6 monthly summary","hourly station observations (flagged)"],"policy":"first-final; later corrections are stored but never change a published score"},"license":"CC-BY-4.0 (CastCheck derived data); see /data/ for upstream licences","site":"https://castcheck.zifanzhang.com","scope":"station_id=ALL; window=90d; init_hour=00Z; method=bilinear","attribution":"None of these cuts is attributed to a cause. See METHODOLOGY §10.2 for the three candidate explanations and the analyses that would separate them.","hourly_bias":{"variables":["t2_00z","t2_06z","t2_12z","t2_18z"],"hours_utc":[0,6,12,18],"lead_day":1,"rows":[{"model_id":"ifs_hres","bias":[-0.835,-0.382,-0.291,0.104],"n":[87,88,88,87]},{"model_id":"aifs_single","bias":[-0.47,-0.88,-0.848,-0.024],"n":[87,88,88,87]},{"model_id":"gfs","bias":[-0.191,0.104,0.376,0.64],"n":[87,88,88,87]},{"model_id":"graphcast_ifs","bias":[-1.561,-0.941,-0.537,-0.586],"n":[86,87,87,86]},{"model_id":"graphcast_gfs","bias":[-1.811,-0.931,-0.481,-1.162],"n":[56,56,56,56]},{"model_id":"pangu_ifs","bias":[-1.588,-0.994,-0.459,0.459],"n":[84,85,85,84]},{"model_id":"pangu_gfs","bias":[-1.49,-0.836,-0.19,0.336],"n":[56,56,56,56]},{"model_id":"fourcastnet_ifs","bias":[-0.54,-0.81,-0.806,-0.357],"n":[87,88,88,87]},{"model_id":"fourcastnet_gfs","bias":[-0.671,-0.893,-0.896,-0.541],"n":[56,56,56,56]},{"model_id":"aurora_ifs","bias":[-1.433,-0.831,-0.486,-0.719],"n":[82,83,83,82]},{"model_id":"aurora_gfs","bias":[-1.823,-0.9,-0.471,-1.299],"n":[56,56,56,56]},{"model_id":"persistence","bias":[0.122,0.116,0.11,0.106],"n":[89,90,90,89]}]},"bias_by_lead":{"variable":"t2","lead_days":[1,2,3,4,5,6,7,8,9],"rows":[{"model_id":"ifs_hres","bias":[-0.353,-0.33,-0.316,-0.333,-0.286,-0.182,-0.173,-0.145,-0.077],"mae":[1.408,1.503,1.613,1.723,1.91,2.134,2.355,2.502,2.747],"n":[87,86,85,84,83,82,81,80,79]},{"model_id":"aifs_single","bias":[-0.556,-0.557,-0.533,-0.513,-0.45,-0.475,-0.646,-0.634,-0.281],"mae":[1.295,1.351,1.415,1.532,1.66,1.847,2.091,2.315,2.51],"n":[87,86,85,84,83,82,81,80,79]},{"model_id":"gfs","bias":[0.227,0.216,0.271,0.236,0.181,0.229,0.196,0.056,-0.331],"mae":[1.57,1.627,1.749,1.894,2.13,2.374,2.623,2.966,3.194],"n":[87,86,85,84,83,82,81,80,79]},{"model_id":"graphcast_ifs","bias":[-0.909,-0.95,-0.936,-0.927,-0.945,-0.905,-1.015,-1.081,-1.047],"mae":[1.464,1.546,1.609,1.728,1.875,2.059,2.307,2.565,2.759],"n":[86,86,86,86,86,86,86,86,86]},{"model_id":"graphcast_gfs","bias":[-1.096,-1.183,-1.245,-1.287,-1.213,-1.2,-1.198,-1.281,-1.361],"mae":[1.65,1.773,1.874,1.964,2.115,2.266,2.491,2.786,2.953],"n":[56,55,54,55,56,55,55,55,55]},{"model_id":"pangu_ifs","bias":[-0.647,-0.745,-0.817,-0.866,-0.981,-1.032,-1.148,-1.193,-0.951],"mae":[1.556,1.654,1.758,1.916,2.088,2.29,2.508,2.749,2.855],"n":[84,84,84,84,84,84,84,84,84]},{"model_id":"pangu_gfs","bias":[-0.544,-0.686,-0.779,-0.836,-0.883,-0.879,-0.928,-1.052,-0.921],"mae":[1.547,1.685,1.809,1.933,2.143,2.367,2.533,2.933,3.03],"n":[56,55,54,55,56,55,55,55,55]},{"model_id":"fourcastnet_ifs","bias":[-0.632,-0.636,-0.637,-0.627,-0.623,-0.656,-0.749,-0.804,-0.751],"mae":[1.543,1.604,1.678,1.788,1.944,2.075,2.252,2.409,2.568],"n":[87,87,87,87,87,87,87,87,87]},{"model_id":"fourcastnet_gfs","bias":[-0.747,-0.749,-0.735,-0.726,-0.759,-0.748,-0.762,-0.807,-0.759],"mae":[1.578,1.679,1.734,1.828,2.022,2.151,2.296,2.423,2.621],"n":[56,55,54,55,56,55,55,55,55]},{"model_id":"aurora_ifs","bias":[-0.87,-0.956,-1.002,-1.02,-1.032,-0.923,-0.857,-0.833,-0.644],"mae":[1.457,1.554,1.654,1.767,1.878,2.046,2.192,2.327,2.441],"n":[82,82,82,81,81,81,81,81,81]},{"model_id":"aurora_gfs","bias":[-1.122,-1.32,-1.485,-1.646,-1.761,-1.85,-1.93,-2.061,-2.121],"mae":[1.651,1.851,2.024,2.193,2.41,2.634,2.791,3.017,3.148],"n":[56,55,54,55,56,55,55,55,55]},{"model_id":"persistence","bias":[0.11,0.218,0.335,0.468,0.574,0.674,0.778,0.867,0.996],"mae":[1.991,2.565,2.855,2.978,3.139,3.171,3.253,3.306,3.375],"n":[89,89,89,89,89,89,89,89,89]}]},"sampling_penalty":{"lead_day":1,"pairs":[{"sampled":"tmax_s","cli":"tmax_cli","penalty":"bias(tmax_cli) - bias(tmax_s)"},{"sampled":"tmin_s","cli":"tmin_cli","penalty":"bias(tmin_cli) - bias(tmin_s)"}],"identity":"Both terms are formed from the same forecast value, so the forecast cancels and the difference is the gap between the two truth definitions over the days and stations that model was scored on. Read the level of each column for a model's own diurnal behaviour and the sample sizes for why the differences are not identical.","rows":[{"model_id":"ifs_hres","tmax_s_bias":-0.371,"tmax_cli_bias":-1.884,"tmax_s_penalty":-1.513,"tmax_s_n":87,"tmax_cli_n":87,"tmin_s_bias":-0.211,"tmin_cli_bias":0.682,"tmin_s_penalty":0.893,"tmin_s_n":87,"tmin_cli_n":87},{"model_id":"aifs_single","tmax_s_bias":-0.234,"tmax_cli_bias":-1.749,"tmax_s_penalty":-1.515,"tmax_s_n":87,"tmax_cli_n":87,"tmin_s_bias":-0.747,"tmin_cli_bias":0.147,"tmin_s_penalty":0.894,"tmin_s_n":87,"tmin_cli_n":87},{"model_id":"gfs","tmax_s_bias":0.314,"tmax_cli_bias":-1.203,"tmax_s_penalty":-1.517,"tmax_s_n":87,"tmax_cli_n":87,"tmin_s_bias":0.434,"tmin_cli_bias":1.324,"tmin_s_penalty":0.89,"tmin_s_n":87,"tmin_cli_n":87},{"model_id":"graphcast_ifs","tmax_s_bias":-1.073,"tmax_cli_bias":-2.575,"tmax_s_penalty":-1.502,"tmax_s_n":86,"tmax_cli_n":86,"tmin_s_bias":-0.458,"tmin_cli_bias":0.439,"tmin_s_penalty":0.897,"tmin_s_n":86,"tmin_cli_n":86},{"model_id":"graphcast_gfs","tmax_s_bias":-1.627,"tmax_cli_bias":-3.13,"tmax_s_penalty":-1.503,"tmax_s_n":56,"tmax_cli_n":56,"tmin_s_bias":-0.349,"tmin_cli_bias":0.531,"tmin_s_penalty":0.88,"tmin_s_n":56,"tmin_cli_n":56},{"model_id":"pangu_ifs","tmax_s_bias":-0.215,"tmax_cli_bias":-1.721,"tmax_s_penalty":-1.506,"tmax_s_n":84,"tmax_cli_n":84,"tmin_s_bias":-0.463,"tmin_cli_bias":0.444,"tmin_s_penalty":0.907,"tmin_s_n":84,"tmin_cli_n":84},{"model_id":"pangu_gfs","tmax_s_bias":-0.299,"tmax_cli_bias":-1.803,"tmax_s_penalty":-1.504,"tmax_s_n":56,"tmax_cli_n":56,"tmin_s_bias":-0.232,"tmin_cli_bias":0.649,"tmin_s_penalty":0.881,"tmin_s_n":56,"tmin_cli_n":56},{"model_id":"fourcastnet_ifs","tmax_s_bias":-0.786,"tmax_cli_bias":-2.299,"tmax_s_penalty":-1.513,"tmax_s_n":87,"tmax_cli_n":87,"tmin_s_bias":-0.6,"tmin_cli_bias":0.299,"tmin_s_penalty":0.899,"tmin_s_n":87,"tmin_cli_n":87},{"model_id":"fourcastnet_gfs","tmax_s_bias":-0.917,"tmax_cli_bias":-2.426,"tmax_s_penalty":-1.509,"tmax_s_n":56,"tmax_cli_n":56,"tmin_s_bias":-0.673,"tmin_cli_bias":0.208,"tmin_s_penalty":0.881,"tmin_s_n":56,"tmin_cli_n":56},{"model_id":"aurora_ifs","tmax_s_bias":-1.19,"tmax_cli_bias":-2.692,"tmax_s_penalty":-1.502,"tmax_s_n":82,"tmax_cli_n":82,"tmin_s_bias":-0.386,"tmin_cli_bias":0.513,"tmin_s_penalty":0.899,"tmin_s_n":82,"tmin_cli_n":82},{"model_id":"aurora_gfs","tmax_s_bias":-1.775,"tmax_cli_bias":-3.279,"tmax_s_penalty":-1.504,"tmax_s_n":56,"tmax_cli_n":56,"tmin_s_bias":-0.327,"tmin_cli_bias":0.552,"tmin_s_penalty":0.879,"tmin_s_n":56,"tmin_cli_n":56},{"model_id":"persistence","tmax_s_bias":0.111,"tmax_cli_bias":0.107,"tmax_s_penalty":-0.004,"tmax_s_n":89,"tmax_cli_n":89,"tmin_s_bias":0.109,"tmin_cli_bias":0.113,"tmin_s_penalty":0.004,"tmin_s_n":89,"tmin_cli_n":89}]}}