Source code for fortuna.metric.regression

import jax.numpy as jnp

from fortuna.typing import Array


[docs]def root_mean_squared_error(preds: Array, targets: Array) -> float: """ Compute the root-mean-squared error (RMSE). Parameters ---------- preds: Array A two-dimensional array of predictions over the data points. targets: Array A two-dimensional array of target variables. Returns ------- float The computed RMSE. """ return jnp.sqrt(jnp.mean(jnp.sum((preds - targets) ** 2, axis=1)))
[docs]def rmse(preds: Array, targets: Array) -> float: """See :func:`.root_mean_squared_error`.""" return root_mean_squared_error(preds, targets)
[docs]def mean_squared_error(preds: Array, targets: Array) -> Array: """ Compute the mean-squared error (MSE). Parameters ---------- preds: Array A two-dimensional array of predictions over the data points. targets: Array A two-dimensional array of target variables. Returns ------- Array The computed MSE. """ return jnp.mean(jnp.sum((preds - targets) ** 2, axis=1))
[docs]def mse(preds: Array, targets: Array) -> float: """See :func:`.mean_squared_error`.""" return mean_squared_error(preds, targets)
[docs]def root_mean_absolute_error(preds: Array, targets: Array) -> float: """ Compute the root-mean-absolute error (RMAE). Parameters ---------- preds: Array A two-dimensional array of predictions over the data points. targets: Array A two-dimensional array of target variables. Returns ------- float The computed RMAE. """ return jnp.sqrt(jnp.mean(jnp.sum(jnp.abs(preds - targets), axis=1)))
[docs]def rmae(preds: Array, targets: Array) -> float: """See :func:`.root_mean_absolute_error`.""" return root_mean_absolute_error(preds, targets)
[docs]def mean_absolute_error(preds: Array, targets: Array) -> Array: """ Compute the mean-absolute error (MAE). Parameters ---------- preds: Array A two-dimensional array of predictions over the data points. targets: Array A two-dimensional array of target variables. Returns ------- Array The computed MAE. """ return jnp.mean(jnp.sum(jnp.abs(preds - targets), axis=1))
[docs]def mae(preds: Array, targets: Array) -> float: """See :func:`.mean_absolute_error`.""" return mean_absolute_error(preds, targets)
[docs]def prediction_interval_coverage_probability( lower_bounds: Array, upper_bounds: Array, targets: Array ) -> Array: """ Compute the prediction interval coverage probability (PICP). This is the fraction of data points for which the true targets lie within the estimated interval. This is supported only for scalar target data. Parameters ---------- lower_bounds: Array Predictive lower bounds. These are the lower bounds of the estimated predictive intervals. This can either be a one-dimensional array with entry corresponding to different data points, or a two-dimensional array with first axis corresponding to different data points, and second axis with only one dimension. upper_bounds: Array Predictive upper bounds. These are the upper bounds of the estimated predictive intervals. This can either be a one-dimensional array with entry corresponding to different data points, or a two-dimensional array with first axis corresponding to different data points, and second axis with only one dimension. targets: Array A two-dimensional array of target variables, or a one-dimensional array with second dimension of size 1. Returns ------- Array The computed PICP. """ if targets.ndim == 1: targets = targets[:, None] elif targets.shape[1] > 1: raise ValueError( """This metric is supported only for target data such that `target.shape[1] == 1`, but `target.shape[1] == {}` was found.""".format( targets.shape[1] ) ) if upper_bounds.ndim == 1: upper_bounds = upper_bounds[:, None] if upper_bounds.shape[1] != 1: raise ValueError( """The second axis of `upper_bounds` must contain only one component.""" ) if lower_bounds.ndim == 1: lower_bounds = lower_bounds[:, None] if lower_bounds.shape[1] != 1: raise ValueError( """The second axis of `lower_bounds` must contain only one component.""" ) satisfies_upper = targets <= upper_bounds satisfies_lower = targets >= lower_bounds return jnp.mean(satisfies_lower * satisfies_upper)
[docs]def picp(lower_bounds: Array, upper_bounds: Array, targets: Array) -> float: """See :func:`.prediction_interval_coverage_probability`.""" return prediction_interval_coverage_probability(lower_bounds, upper_bounds, targets)