Skip to main content

Implementations of the CRPS using PyTorch

Project description

torch-crps

License: CC-BY-4.0 python Docs CD Coverage Tests mkdocs-material mypy pre-commit pytest Ruff uv

Implementations of the Continuously-Ranked Probability Score (CRPS) using PyTorch

Background

The Continuously-Ranked Probability Score (CRPS) is a strictly proper scoring rule. It assesses how well a distribution with the cumulative distribution function $F$ is explaining an observation $y$

$$ \text{CRPS}(F,y) = \int _{\mathbb {R} }(F(x)-\mathbb {1} (x\geq y))^{2}dx \qquad (\text{integral formulation}) $$

where $1$ denoted the indicator function.

In Section 2 of this paper Zamo & Naveau list 3 different formulations of the CRPS.

Incomplete list of sources that I came across while researching about the CRPS

  • Hersbach, "Decomposition of the Continuous Ranked Probability Score for Ensemble Prediction Systems"; 2000
  • Gneiting et al.; "Calibrated Probabilistic Forecasting Using Ensemble Model Output Statistis and Minimum CRPS Estimation"; 2004
  • Gneiting & Raftery; "Strictly Proper Scoring Rules, Prediction, and Estimation"; 2007
  • Zamo & Naveau; "Estimation of the Continuous Ranked Probability Score with Limited Information and Applications to Ensemble Weather Forecasts"; 2018
  • Jordan et al.; "Evaluating Probabilistic Forecasts with scoringRules"; 2019
  • Olivares & Négiar & Ma et al; "CLOVER: Probabilistic Forecasting with Coherent Learning Objective Reparameterization"; 2023
  • Vermorel & Tikhonov; "Continuously-Ranked Probability Score (CRPS)" blog post; 2024
  • Nvidia; "PhysicsNeMo Framework" source code; 2025
  • Zheng & Sun; "MVG-CRPS: A Robust Loss Function for Multivariate Probabilistic Forecasting"; 2025

Application to Machine Learning

The CRPS can be used as a loss function in machine learning, just like the well-known negative log-likelihood loss which is the log scoring rule.

The parametrized model outputs a distribution $q(x)$. The CRPS loss evaluates how good $q(x)$ is explaining the observation $y$. This is a distribution-to-point evaluation, which fits well for machine learning as the ground truth $y$ almost always comes as fixed values.

For processes over time and/or space, we need to estimate the CRPS for every point in time/space separately.

There is work on multi-variate CRPS estimation, but it is not part of this repo.

Implementation

The integral formulation is infeasible to naively evaluate on a computer due to the infinite integration over $x$.

I found Nvidia's implementation of the CRPS for ensemble preductions in $M log(M)$ time inspiring to read.

:point_right: Please have a look at the documentation to get started.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torch_crps-0.1.6.tar.gz (111.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torch_crps-0.1.6-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file torch_crps-0.1.6.tar.gz.

File metadata

  • Download URL: torch_crps-0.1.6.tar.gz
  • Upload date:
  • Size: 111.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for torch_crps-0.1.6.tar.gz
Algorithm Hash digest
SHA256 b736d39f8354923f39e1a72b2fdd647deaa10876095e8b52c958a8c746af0e1a
MD5 f9f973820d02dccb3d6e4d9ca81111b4
BLAKE2b-256 7fd7a2c8c9f74298ca8d59a2ccce95359a6bd7cd9f6a944c7d32c3d564634d38

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_crps-0.1.6.tar.gz:

Publisher: cd.yaml on famura/torch-crps

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torch_crps-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: torch_crps-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for torch_crps-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e494bf0bd16f03c841fe85e73aa48a563aefa0cd84a9141108721994d16034bf
MD5 5a2bfeec846c341074e3077be4d64ba7
BLAKE2b-256 bee8c2b6881711fde0db22d6e5186b5ad50fa53c558d992a735d5b8e88556f8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_crps-0.1.6-py3-none-any.whl:

Publisher: cd.yaml on famura/torch-crps

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page