Add model type column
Browse files- index.html +6 -6
index.html
CHANGED
|
@@ -9,7 +9,7 @@ main{max-width:980px;margin:0 auto;padding:20px 16px 48px}h1{font-size:24px;marg
|
|
| 9 |
select{font:inherit;padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink)}
|
| 10 |
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px;margin:12px 0;overflow-x:auto}
|
| 11 |
table{border-collapse:collapse;width:100%;min-width:520px}th,td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}
|
| 12 |
-
th:nth-child(-n+
|
| 13 |
tr.dw td{background:var(--dw);font-weight:600}tr.first td:first-child{color:var(--gold);font-weight:700}
|
| 14 |
.tag{font-size:11px;color:var(--acc);border:1px solid var(--acc);border-radius:99px;padding:1px 7px;margin-left:6px}
|
| 15 |
#status{color:var(--mut);font-size:13px}footer{color:var(--mut);font-size:12px;margin-top:20px}a{color:var(--acc)}h2{font-size:16px;margin:0 0 8px}
|
|
@@ -25,11 +25,11 @@ tr.dw td{background:var(--dw);font-weight:600}tr.first td:first-child{color:var(
|
|
| 25 |
<div id="status">Loading forecasts and observations…</div>
|
| 26 |
<div class="card"><h2 id="t1">Ranking</h2><table id="tbl"></table></div>
|
| 27 |
<div class="card"><h2>How it is scored</h2>
|
| 28 |
-
<p style="margin:0;color:var(--mut)">Each model's forecast issued N days earlier is compared with the ERA5 daily maximum for the same UTC day at each city. Lower RMSE ranks higher. Models are compared on the same cases: days and cities where every listed model issued a forecast. ERA5 is published about five days after the fact, so the latest verification date trails today. <b>Darwin-Prediction-Weather</b> is VIDRAFT's fusion engine: local bias correction plus skill-weighted fusion of the eight models, fitted only on days before the one being scored. It is shown alongside the ranking and is not ranked among the public models.</p></div>
|
| 29 |
<footer>Full daily record since 2026-01-01 (every model forecast and the ERA5 value): <a href="https://huggingface.co/datasets/FINAL-Bench/Weather-Model-Forecast-Archive">Weather-Model-Forecast-Archive</a>. Weather data by <a href="https://open-meteo.com/">Open-Meteo.com</a> (CC BY 4.0). Verification: ERA5, Copernicus Climate Change Service. Model sources: ECMWF, NOAA NCEP, DWD, JMA, ECCC, MET Norway. Engine: <a href="https://huggingface.co/FINAL-Bench/Darwin-Prediction-Weather">Darwin-Prediction-Weather</a>.</footer>
|
| 30 |
</main><script>
|
| 31 |
const CITIES={"Seoul":[37.57,126.98],"Busan":[35.18,129.08],"Tokyo":[35.68,139.69],"Beijing":[39.90,116.40],"Singapore":[1.35,103.82],"Delhi":[28.61,77.21],"Dubai":[25.20,55.27],"Moscow":[55.76,37.62],"Berlin":[52.52,13.40],"London":[51.51,-0.13],"Paris":[48.86,2.35],"Madrid":[40.42,-3.70],"Cairo":[30.04,31.24],"Nairobi":[-1.29,36.82],"Johannesburg":[-26.20,28.05],"New York":[40.71,-74.01],"Chicago":[41.88,-87.63],"Los Angeles":[34.05,-118.24],"Mexico City":[19.43,-99.13],"Sao Paulo":[-23.55,-46.63],"Buenos Aires":[-34.60,-58.38],"Sydney":[-33.87,151.21],"Anchorage":[61.22,-149.90],"Reykjavik":[64.15,-21.94]};
|
| 32 |
-
const MODELS={"ecmwf_ifs025":["ECMWF IFS","ECMWF"],"ecmwf_aifs025_single":["ECMWF AIFS","ECMWF
|
| 33 |
const LEADS=[1,3,5,7],NAMES=Object.keys(CITIES),MK=Object.keys(MODELS),DAYS=50,LAG=6,MIN=31;
|
| 34 |
const $=id=>document.getElementById(id),iso=d=>d.toISOString().slice(0,10);
|
| 35 |
const end=new Date(Date.now()-LAG*864e5),start=new Date(end-(DAYS-1)*864e5);
|
|
@@ -72,10 +72,10 @@ function render(){
|
|
| 72 |
if(ok)add("darwin",fu-o)}}
|
| 73 |
const rows=MK.filter(m=>cnt[m]).map(m=>({m,r:Math.sqrt(se[m]/cnt[m]),n:cnt[m]})).sort((a,b)=>a.r-b.r);
|
| 74 |
const best=rows.length?rows[0].r:NaN,dw=cnt.darwin?Math.sqrt(se.darwin/cnt.darwin):NaN;
|
| 75 |
-
let h="<tr><th>Rank</th><th>Model</th><th>Provider</th><th>RMSE (°C)</th><th>vs best public</th><th>Cases</th></tr>";
|
| 76 |
-
if(fin(dw))h+=`<tr class="dw"><td></td><td>Darwin-Prediction-Weather<span class="tag">fusion</span></td><td>VIDRAFT</td><td>${dw.toFixed(2)}</td><td>${((dw/best-1)*100).toFixed(1)}%</td><td>${cnt.darwin}</td></tr>`;
|
| 77 |
let rk=0,prev=null;rows.forEach((x,i)=>{if(prev===null||x.r.toFixed(2)!==prev){rk=i+1;prev=x.r.toFixed(2)}
|
| 78 |
-
h+=`<tr class="${rk===1?"first":""}"><td>${rk}</td><td>${MODELS[x.m][0]}</td><td>${MODELS[x.m][1]}</td><td>${x.r.toFixed(2)}</td><td>${i?"+"+((x.r/best-1)*100).toFixed(1)+"%":"best"}</td><td>${x.n}</td></tr>`});
|
| 79 |
$("tbl").innerHTML=h;
|
| 80 |
$("t1").textContent=`Ranking: ${D}-day forecasts, ${t0===t1?dates[t1]:dates[t0]+" to "+dates[t1]}, ${ci<0?"24 cities":NAMES[ci]}`;
|
| 81 |
$("status").textContent=rows.length?`Verified through ${dates[dates.length-1]} (ERA5). Public models scored as issued, on the cases every listed model covers.${OUT.length?" Not listed for this selection (insufficient coverage): "+OUT.map(m=>MODELS[m][0]).join(", ")+".":""}${rows[0].n<30?" Small sample: results for a single day or city vary widely.":""}`:"No verified cases for this selection."}
|
|
|
|
| 9 |
select{font:inherit;padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink)}
|
| 10 |
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px;margin:12px 0;overflow-x:auto}
|
| 11 |
table{border-collapse:collapse;width:100%;min-width:520px}th,td{padding:8px 10px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}
|
| 12 |
+
th:nth-child(-n+4),td:nth-child(-n+4){text-align:left}.ty{font-size:11px;font-weight:600;border-radius:6px;padding:2px 7px}.ty.ai{background:#e7f0ff;color:#1f5fd0}.ty.ph{background:#eef1f5;color:#5b6b80}@media(prefers-color-scheme:dark){.ty.ai{background:#1c3157;color:#9cc0ff}.ty.ph{background:#263445;color:#b3c0d1}}th{font-size:12px;color:var(--mut);font-weight:600}
|
| 13 |
tr.dw td{background:var(--dw);font-weight:600}tr.first td:first-child{color:var(--gold);font-weight:700}
|
| 14 |
.tag{font-size:11px;color:var(--acc);border:1px solid var(--acc);border-radius:99px;padding:1px 7px;margin-left:6px}
|
| 15 |
#status{color:var(--mut);font-size:13px}footer{color:var(--mut);font-size:12px;margin-top:20px}a{color:var(--acc)}h2{font-size:16px;margin:0 0 8px}
|
|
|
|
| 25 |
<div id="status">Loading forecasts and observations…</div>
|
| 26 |
<div class="card"><h2 id="t1">Ranking</h2><table id="tbl"></table></div>
|
| 27 |
<div class="card"><h2>How it is scored</h2>
|
| 28 |
+
<p style="margin:0;color:var(--mut)">Each model's forecast issued N days earlier is compared with the ERA5 daily maximum for the same UTC day at each city. Lower RMSE ranks higher. Type shows how a model works: <b>AI</b> models learn the forecast from data, <b>Physics</b> models solve the equations of the atmosphere on supercomputers. Models are compared on the same cases: days and cities where every listed model issued a forecast. ERA5 is published about five days after the fact, so the latest verification date trails today. <b>Darwin-Prediction-Weather</b> is VIDRAFT's fusion engine: local bias correction plus skill-weighted fusion of the eight models, fitted only on days before the one being scored. It is shown alongside the ranking and is not ranked among the public models.</p></div>
|
| 29 |
<footer>Full daily record since 2026-01-01 (every model forecast and the ERA5 value): <a href="https://huggingface.co/datasets/FINAL-Bench/Weather-Model-Forecast-Archive">Weather-Model-Forecast-Archive</a>. Weather data by <a href="https://open-meteo.com/">Open-Meteo.com</a> (CC BY 4.0). Verification: ERA5, Copernicus Climate Change Service. Model sources: ECMWF, NOAA NCEP, DWD, JMA, ECCC, MET Norway. Engine: <a href="https://huggingface.co/FINAL-Bench/Darwin-Prediction-Weather">Darwin-Prediction-Weather</a>.</footer>
|
| 30 |
</main><script>
|
| 31 |
const CITIES={"Seoul":[37.57,126.98],"Busan":[35.18,129.08],"Tokyo":[35.68,139.69],"Beijing":[39.90,116.40],"Singapore":[1.35,103.82],"Delhi":[28.61,77.21],"Dubai":[25.20,55.27],"Moscow":[55.76,37.62],"Berlin":[52.52,13.40],"London":[51.51,-0.13],"Paris":[48.86,2.35],"Madrid":[40.42,-3.70],"Cairo":[30.04,31.24],"Nairobi":[-1.29,36.82],"Johannesburg":[-26.20,28.05],"New York":[40.71,-74.01],"Chicago":[41.88,-87.63],"Los Angeles":[34.05,-118.24],"Mexico City":[19.43,-99.13],"Sao Paulo":[-23.55,-46.63],"Buenos Aires":[-34.60,-58.38],"Sydney":[-33.87,151.21],"Anchorage":[61.22,-149.90],"Reykjavik":[64.15,-21.94]};
|
| 32 |
+
const MODELS={"ecmwf_ifs025":["ECMWF IFS","ECMWF","Physics"],"ecmwf_aifs025_single":["ECMWF AIFS","ECMWF","AI"],"gfs_seamless":["GFS","NOAA NCEP","Physics"],"ncep_aigfs025":["AIGFS","NOAA NCEP","AI"],"icon_seamless":["ICON","DWD Germany","Physics"],"jma_seamless":["JMA GSM","JMA Japan","Physics"],"gem_seamless":["GEM","ECCC Canada","Physics"],"metno_seamless":["MET Nordic / IFS","MET Norway","Physics"]};
|
| 33 |
const LEADS=[1,3,5,7],NAMES=Object.keys(CITIES),MK=Object.keys(MODELS),DAYS=50,LAG=6,MIN=31;
|
| 34 |
const $=id=>document.getElementById(id),iso=d=>d.toISOString().slice(0,10);
|
| 35 |
const end=new Date(Date.now()-LAG*864e5),start=new Date(end-(DAYS-1)*864e5);
|
|
|
|
| 72 |
if(ok)add("darwin",fu-o)}}
|
| 73 |
const rows=MK.filter(m=>cnt[m]).map(m=>({m,r:Math.sqrt(se[m]/cnt[m]),n:cnt[m]})).sort((a,b)=>a.r-b.r);
|
| 74 |
const best=rows.length?rows[0].r:NaN,dw=cnt.darwin?Math.sqrt(se.darwin/cnt.darwin):NaN;
|
| 75 |
+
let h="<tr><th>Rank</th><th>Model</th><th>Type</th><th>Provider</th><th>RMSE (°C)</th><th>vs best public</th><th>Cases</th></tr>";
|
| 76 |
+
if(fin(dw))h+=`<tr class="dw"><td></td><td>Darwin-Prediction-Weather<span class="tag">fusion</span></td><td><span class="ty ai">AI</span></td><td>VIDRAFT</td><td>${dw.toFixed(2)}</td><td>${((dw/best-1)*100).toFixed(1)}%</td><td>${cnt.darwin}</td></tr>`;
|
| 77 |
let rk=0,prev=null;rows.forEach((x,i)=>{if(prev===null||x.r.toFixed(2)!==prev){rk=i+1;prev=x.r.toFixed(2)}
|
| 78 |
+
h+=`<tr class="${rk===1?"first":""}"><td>${rk}</td><td>${MODELS[x.m][0]}</td><td><span class="ty ${MODELS[x.m][2]==="AI"?"ai":"ph"}">${MODELS[x.m][2]}</span></td><td>${MODELS[x.m][1]}</td><td>${x.r.toFixed(2)}</td><td>${i?"+"+((x.r/best-1)*100).toFixed(1)+"%":"best"}</td><td>${x.n}</td></tr>`});
|
| 79 |
$("tbl").innerHTML=h;
|
| 80 |
$("t1").textContent=`Ranking: ${D}-day forecasts, ${t0===t1?dates[t1]:dates[t0]+" to "+dates[t1]}, ${ci<0?"24 cities":NAMES[ci]}`;
|
| 81 |
$("status").textContent=rows.length?`Verified through ${dates[dates.length-1]} (ERA5). Public models scored as issued, on the cases every listed model covers.${OUT.length?" Not listed for this selection (insufficient coverage): "+OUT.map(m=>MODELS[m][0]).join(", ")+".":""}${rows[0].n<30?" Small sample: results for a single day or city vary widely.":""}`:"No verified cases for this selection."}
|