| crps=(abs(e-t[None]).mean(0)-.5*abs(e[:,None]-e[None,:]).mean((0,1))).mean((1,2));q=np.quantile(t,.2);obs=t<q;hit=mean<q;tp=(obs&hit).sum((1,2));fp=(~obs&hit).sum((1,2));fn=(obs&~hit).sum((1,2));gss=(tp-(tp+fp)*(tp+fn)/obs[0].size)/(tp+fp+fn-(tp+fp)*(tp+fn)/obs[0].size+1e-8);write_json(ROOT/c["paths"]["evaluation"],{"acc":acc,"crps":crps.tolist(),"drought_gss":gss.tolist(),"threshold":"synthetic 20th percentile","synthetic":True});fig,ax=plt.subplots(1,2,figsize=(9,3.5));ax[0].plot(d["lead_weeks"],acc,"o-",label="ACC");ax[0].plot(d["lead_weeks"],crps,"s-",label="CRPS");ax[0].legend();im=ax[1].imshow(mean[2]-t[2],cmap="coolwarm");ax[1].set_title("Week-3 error");fig.colorbar(im,ax=ax[1]);fig.tight_layout();p=ROOT/c["paths"]["figure"];p.parent.mkdir(parents=True,exist_ok=True);fig.savefig(p,dpi=150);print(p) |