SeaWolf-AI commited on
Commit
2e70838
·
verified ·
1 Parent(s): 3e3d59c

Add model type column

Browse files
Files changed (1) hide show
  1. 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+3),td:nth-child(-n+3){text-align:left}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,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 (AI)"],"gfs_seamless":["GFS","NOAA NCEP"],"ncep_aigfs025":["AIGFS","NOAA NCEP (AI)"],"icon_seamless":["ICON","DWD Germany"],"jma_seamless":["JMA GSM","JMA Japan"],"gem_seamless":["GEM","ECCC Canada"],"metno_seamless":["MET Nordic / IFS","MET Norway"]};
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."}