Flexible NaN-handling

Abierto
#34 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
numpy, python
Área
data

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Python
Estrellas
108
Forks
15
Merge medio
1 h 42 min
PR fusionados (30 d)
9

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de frazane/scoringrules

Todos los issues de frazane/scoringrules

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.