CrossValidationReport.metrics.custom_metric#

CrossValidationReport.metrics.custom_metric(metric_function, response_method, *, metric_name=None, data_source='test', aggregate=None, **kwargs)[source]#

Compute a custom metric.

It brings some flexibility to compute any desired metric. However, we need to follow some rules:

  • metric_function should take y_true and y_pred as the first two positional arguments.

  • response_method corresponds to the estimator’s method to be invoked to get the predictions. It can be a string or a list of strings to defined in which order the methods should be invoked.

Parameters:
metric_functioncallable

The metric function to be computed. The expected signature is metric_function(y_true, y_pred, **kwargs).

response_methodstr or list of str

The estimator’s method to be invoked to get the predictions. The possible values are: predict, predict_proba, predict_log_proba, and decision_function.

metric_namestr, default=None

The name of the metric. If not provided, it will be inferred from the metric function.

data_source{“test”, “train”}, default=”test”

The data source to use.

  • “test” : use the test set provided when creating the report.

  • “train” : use the train set provided when creating the report.

aggregate{“mean”, “std”} or list of such str, default=None

Function to aggregate the scores across the cross-validation splits.

**kwargsdict

Any additional keyword arguments to be passed to the metric function.

Returns:
pd.DataFrame

The custom metric.

Examples

>>> from sklearn.datasets import load_diabetes
>>> from sklearn.linear_model import Ridge
>>> from sklearn.metrics import mean_absolute_error
>>> from skore import CrossValidationReport
>>> X, y = load_diabetes(return_X_y=True)
>>> regressor = Ridge()
>>> report = CrossValidationReport(regressor, X=X, y=y, cv_splitter=2)
>>> report.metrics.custom_metric(
...     metric_function=mean_absolute_error,
...     response_method="predict",
...     metric_name="MAE",
... )
            Ridge
        Split #0   Split #1
Metric
MAE     50.1...   52.6...