Flexible NaN-handling

Aperta
#34 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
numpy, python
Ambito
data

Direzione di ricerca

Start with the ensemble metric implementations and shared helpers in core/utils.py, then follow the weighted Energy Score pattern for vs_ensemble, twvs_ensemble, owvs_ensemble, and vrvs_ensemble. Check how apply_nan_policy_ens_uv, apply_nan_policy_ens_mv, and nan_policy_check handle invalid members and unsupported estimators. Done means the Variogram Score variants support the requested policies with tests for propagation, omission, and errors.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

For ensemble-based scoring rules, we need flexible handling of missing values in ensemble members. Currently, ensemble-based metrics such as the CRPS return NaN if there is one or more NaNs in the ensemble members. It may be the case that users have an ensemble with a few NaNs (e.g. with lagged ensembles you have NaNs for some timestamps) but still want to get a valid score.

Proposed solution

We allow users to specify a nan_policy argument on ensemble metrics:

  • propagate (default): return NaN if any ensemble member is NaN
  • omit: ignore NaN values during computation
  • raise: raise an error if NaN values are encountered

NaN in the observations always propagates, regardless of policy. The omit policy flags every invalid member — any NaN member, and in the multivariate case any member with a NaN variable or weight — and folds it into the ensemble weights as a zero weight, routing the score through the existing weighted estimators (#117). Shared helpers (apply_nan_policy_ens_uv, apply_nan_policy_ens_mv, nan_policy_check) live in core/utils.py.

Status

Done

  • CRPS — crps_ensemble, twcrps_ensemble, owcrps_ensemble, vrcrps_ensemble (#118, merged).
  • Energy Score — es_ensemble, twes_ensemble, owes_ensemble, vres_ensemble (#123). First multivariate metric; also fixed two pre-existing bugs in the weighted energy numba kernels (ow = ow[0] scalar indexing, and np.mean(fw) vs np.sum(fw * ens_w) normalization).

Remaining

  • Variogram Score — vs_ensemble, twvs_ensemble, owvs_ensemble, vrvs_ensemble. Weighted estimators exist, so it follows the Energy pattern directly.
  • Gaussian Kernel Score — univariate and multivariate gks*_ensemble. Weighted estimators exist, but the weighted multivariate numba kernels still carry the ow = ow[0] bug fixed for Energy (core/kernels/_gufuncs_w.py:250, :277); needs fixing before the omit path runs on numba.

Not planned

  • Dawid–Sebastiani (dssuv_ensemble, dssmv_ensemble) — computed from mean/covariance, no weighted estimator to route through.
  • Log Score (logs_ensemble, clogs_ensemble) — kernel-density estimates, omit semantics not well defined.

Note: omit is not implemented for estimators that cannot be expressed through member weighting (CRPS int/akr/akr_circperm, Energy akr/akr_circperm); these raise NotImplementedError.

Lingua principale
Python
Stelle
108
Fork
15
Merge medio
1h 42m
PR unite (30g)
9

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di frazane/scoringrules

Tutte le issue di frazane/scoringrules

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.