Source code for corrai.base.metrics

import numpy as np
import pandas as pd
from sklearn.utils import check_consistent_length


[docs] def nmbe(y_pred, y_true): """ Normalized Mean Bias Error (NMBE). Parameters ---------- y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs) Estimated target values. y_true : array-like of shape (n_samples,) or (n_samples, n_outputs) Ground truth (correct) target values. Returns ------- float Normalized mean bias error, expressed as a percentage. Examples -------- >>> import numpy as np >>> y_true = np.array([100, 200, 300]) >>> y_pred = np.array([110, 190, 310]) >>> nmbe(y_pred, y_true) 1.6666666666666667 >>> import pandas as pd >>> y_true = pd.Series([10, 20, 30]) >>> y_pred = pd.Series([12, 18, 29]) >>> nmbe(y_pred, y_true) -1.6666666666666667 """ check_consistent_length(y_pred, y_true) y_pred = y_pred.to_numpy() if isinstance(y_pred, pd.DataFrame) else y_pred y_true = y_true.to_numpy() if isinstance(y_true, pd.DataFrame) else y_true return np.sum(y_pred - y_true) / np.sum(y_true) * 100
[docs] def cv_rmse(y_pred, y_true): """ Coefficient of Variation of the Root Mean Squared Error (CV(RMSE)). Parameters ---------- y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs) Estimated target values. y_true : array-like of shape (n_samples,) or (n_samples, n_outputs) Ground truth (correct) target values. Returns ------- float CV(RMSE), expressed as a percentage. Examples -------- >>> import numpy as np >>> y_true = np.array([100, 200, 300]) >>> y_pred = np.array([110, 190, 310]) >>> cv_rmse(y_pred, y_true) 6.123724356957945 >>> import pandas as pd >>> y_true = pd.Series([10, 20, 30]) >>> y_pred = pd.Series([12, 18, 29]) >>> cv_rmse(y_pred, y_true) 10.606601717798213 """ check_consistent_length(y_pred, y_true) y_pred = y_pred.to_numpy() if isinstance(y_pred, pd.DataFrame) else y_pred y_true = y_true.to_numpy() if isinstance(y_true, pd.DataFrame) else y_true return ( (1 / np.mean(y_true)) * np.sqrt(np.sum((y_true - y_pred) ** 2) / (y_true.shape[0] - 1)) * 100 )