From 5011b448cfd58e651896d81284261be81fcbd810 Mon Sep 17 00:00:00 2001 From: "Daniel.Frisinghelli" <daniel.frisinghelli@eurac.edu> Date: Tue, 28 Sep 2021 15:59:13 +0000 Subject: [PATCH] Added ROCSS for different thresholds. --- .../eval_precipitation_sensitivity.ipynb | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Notebooks/eval_precipitation_sensitivity.ipynb b/Notebooks/eval_precipitation_sensitivity.ipynb index 7da3235..eb55dd8 100644 --- a/Notebooks/eval_precipitation_sensitivity.ipynb +++ b/Notebooks/eval_precipitation_sensitivity.ipynb @@ -334,13 +334,37 @@ " print('({:.1f} mm), RMSE of P{:.0f} = {:.2f} mm'.format(k, quantile * 100, rmse_ex.mean().to_array().item()))" ] }, + { + "cell_type": "markdown", + "id": "f6dfd17e-6eb4-465f-a624-bd5c8f79c99b", + "metadata": {}, + "source": [ + "### ROC: Receiver operating characteristics" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "26b130a6-5caa-490f-93ce-72f4a5f53412", + "id": "92733418-8840-46c2-bf33-adf93b78c646", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# true and predicted probability of precipitation\n", + "for k, v in y_pred.items():\n", + " p_true = (y_true.precipitation > k).values.flatten()\n", + " p_pred = v.prob.values.flatten()\n", + " \n", + " # apply mask of valid pixels\n", + " mask = (~np.isnan(p_true) & ~np.isnan(p_pred))\n", + " p_pred = p_pred[mask]\n", + " p_true = p_true[mask].astype(float)\n", + " \n", + " # calculate ROC: false positive rate vs. true positive rate\n", + " fpr, tpr, _ = roc_curve(p_true, p_pred)\n", + " area = auc(fpr, tpr) # area under ROC curve\n", + " rocss = 2 * area - 1 # ROC skill score (cf. https://journals.ametsoc.org/view/journals/clim/16/24/1520-0442_2003_016_4145_otrsop_2.0.co_2.xml)\n", + " print('({:.1f} mm), ROCSS = {:.2f}'.format(k, rocss))" + ] } ], "metadata": { -- GitLab