scoring
scoring
¶
Scoring rules for natural gradient boosting.
A scoring rule maps a predicted distribution and observed target to a scalar
loss. The engine uses the scoring rule's score, d_score, metric,
and natural_gradient methods during the boosting loop.
Two scoring rules are provided:
- :class:
LogScore— negative log-likelihood (default, equivalent to MLE). - :class:
CRPScore— Continuous Ranked Probability Score, a proper scoring rule that rewards well-calibrated predictive CDFs.
CRPS is only defined for continuous (and discrete-count) distributions, not for categorical classification.
ScoringRule
¶
Bases: Protocol
Protocol for pluggable scoring rules.
score
¶
score(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
Per-sample score.
| PARAMETER | DESCRIPTION |
|---|---|
dist
|
Predicted distribution instance.
TYPE:
|
y
|
Observed target values, shape
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
NDArray[floating]
|
Score values, shape |
Source code in ngboost_lightning/scoring.py
d_score
¶
d_score(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
Gradient of score w.r.t. distribution parameters.
| PARAMETER | DESCRIPTION |
|---|---|
dist
|
Predicted distribution instance.
TYPE:
|
y
|
Observed target values, shape
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
NDArray[floating]
|
Gradient array, shape |
Source code in ngboost_lightning/scoring.py
metric
¶
metric(dist: Distribution) -> NDArray[floating]
Riemannian metric tensor for the natural gradient.
| PARAMETER | DESCRIPTION |
|---|---|
dist
|
Predicted distribution instance.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
NDArray[floating]
|
Metric tensor, shape |
Source code in ngboost_lightning/scoring.py
natural_gradient
¶
natural_gradient(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
Natural gradient: metric^{-1} @ d_score.
| PARAMETER | DESCRIPTION |
|---|---|
dist
|
Predicted distribution instance.
TYPE:
|
y
|
Observed target values, shape
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
NDArray[floating]
|
Natural gradient, shape |
Source code in ngboost_lightning/scoring.py
total_score
¶
total_score(
dist: Distribution,
y: NDArray[floating],
sample_weight: NDArray[floating] | None = None,
) -> float
Weighted mean score across all samples.
| PARAMETER | DESCRIPTION |
|---|---|
dist
|
Predicted distribution instance.
TYPE:
|
y
|
Observed target values, shape
TYPE:
|
sample_weight
|
Per-sample weights, shape
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
float
|
Scalar (weighted) mean score. |
Source code in ngboost_lightning/scoring.py
LogScore
¶
Negative log-likelihood scoring rule (default).
Delegates to the distribution's existing score, d_score,
metric, and natural_gradient methods. This is a zero-cost
wrapper that preserves backward compatibility.
score
¶
score(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
d_score
¶
d_score(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
metric
¶
metric(dist: Distribution) -> NDArray[floating]
natural_gradient
¶
natural_gradient(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
total_score
¶
total_score(
dist: Distribution,
y: NDArray[floating],
sample_weight: NDArray[floating] | None = None,
) -> float
Weighted mean NLL.
CRPScore
¶
Continuous Ranked Probability Score.
Dispatches to crps_score, crps_d_score, and crps_metric
methods on each distribution. Raises NotImplementedError if the
distribution does not implement CRPS (e.g. Categorical).
The CRPS for a distribution with CDF F and observation y is:
.. math::
CRPS(F, y) = \int_{-\infty}^{\infty} (F(x) - \mathbf{1}(x \geq y))^2 dx
Each distribution provides a closed-form implementation.
score
¶
score(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
d_score
¶
d_score(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
metric
¶
metric(dist: Distribution) -> NDArray[floating]
natural_gradient
¶
natural_gradient(
dist: Distribution, y: NDArray[floating]
) -> NDArray[floating]
Natural gradient under the CRPS metric.
Default: solve metric @ nat_grad = d_score per sample.
Distributions may override crps_natural_gradient for a
fast path.
Source code in ngboost_lightning/scoring.py
total_score
¶
total_score(
dist: Distribution,
y: NDArray[floating],
sample_weight: NDArray[floating] | None = None,
) -> float
Weighted mean CRPS.