sklearn.metrics.roc_auc_score

sklearn.metrics.roc_auc_score()

Calcula el Área Bajo la Curva Característica Operativa del Receptor (ROC AUC) a partir de las puntuaciones de predicción.

Nota: esta implementación puede utilizarse con la clasificación binaria, multiclase y multietiqueta, pero se aplican algunas restricciones (ver Parámetros).

Lee más en el Manual de Usuario.

Parámetros
y_truearray-like de forma (n_samples,) o (n_samples, n_classes)

Etiquetas verdaderas o indicadores de etiqueta binarios. Los casos binarios y multiclase esperan etiquetas con forma (n_samples,) mientras que el caso multietiqueta espera indicadores de etiqueta binarios con forma (n_samples, n_classes).

y_scorearray-like de forma (n_samples,) o (n_samples, n_classes)

Puntuaciones objetivo.

  • En el caso binario, corresponde a un arreglo de forma (n_samples,). Se puede proporcionar tanto estimaciones de probabilidad como valores de decisión sin umbral. Las estimaciones de probabilidad corresponden a la probabilidad de la clase con la etiqueta mayor, es decir, estimator.classes_[1] y por tanto estimator.predict_proba(X, y)[:, 1]. Los valores de decisión corresponden a la salida de estimator.decision_function(X, y). Ver más información en el Manual de Usuario;

  • En el caso multiclase, corresponde a un arreglo de forma (n_samples, n_classes) de estimaciones de probabilidad proporcionadas por el método predic_proba. Las estimaciones de probabilidad deben sumar 1 en todas las clases posibles. Además, el orden de las puntuaciones de las clases debe corresponder al orden de labels, si se proporcionan, o bien al orden numérico o lexicográfico de las etiquetas en y_true. Ver más información en el Manual de Usuario;

  • En el caso multietiqueta, corresponde a un arreglo de forma (n_samples, n_classes). Las estimaciones de probabilidad son proporcionadas por el método predict_proba y los valores de decisión sin umbral por el método decision_function. Las estimaciones de probabilidad corresponden a la probabilidad de la clase con la etiqueta mayor para cada salida del clasificador. Ver más información en el Manual de Usuario.

average{“micro”, “macro”, “samples”, “weighted”} o None, default=”macro”

Si es None, se devuelven las puntuaciones de cada clase. De lo contrario, esto determina el tipo de promedio realizado en los datos: Nota: el ROC AUC multiclase actualmente sólo maneja los promedios “macro” y “weighted”.

'micro':

Calcula las métricas globalmente considerando cada elemento de la matriz indicatriz de etiquetas como una etiqueta.

'macro':

Calcula las métricas para cada etiqueta y encuentra su media no ponderada. Esto no tiene en cuenta el desequilibrio de la etiqueta.

'weighted':

Calcula las métricas para cada etiqueta y encuentra su promedio, ponderado por el soporte (el número de instancias verdaderas para cada etiqueta).

'samples':

Calcula las métricas para cada instancia, y encuentra su promedio.

Será ignorado cuando y_true sea binario (binary).

sample_weightarray-like de forma (n_samples,), default=None

Ponderaciones de la muestra.

max_fprfloat > 0 and <= 1, default=None

Si no es None, se devuelve el AUC parcial estandarizado [2] sobre el rango [0, max_fpr]. Para el caso multiclase, max_fpr, debe ser igual a None o 1.0 ya que el cálculo parcial de AUC ROC actualmente no es compatible con multiclase.

multi_class{“raise”, “ovr”, “ovo”}, default=”raise”

Sólo se utiliza para objetivos multiclase. Determina el tipo de configuración a utilizar. El valor predeterminado genera un error, por lo que se debe pasar explícitamente 'ovr' u 'ovo'.

'ovr':

Significa Uno-vs-resto. Calcula el AUC de cada clase frente al resto [3] [4]. Esto trata el caso multiclase de la misma manera que el caso multietiqueta. Es sensible al desequilibrio de clases incluso cuando average == 'macro', porque el desequilibrio de clases afecta a la composición de cada una de las agrupaciones de “rest”.

'ovo':

Significa Uno-vs-uno. Calcula el promedio de AUC de todas las posibles combinaciones de clases por pares [5]. Insensible al desequilibrio de clases cuando average == 'macro'.

labelsarray-like de forma (n_classes,), default=None

Sólo se utiliza para objetivos multiclase. Lista de etiquetas que indexan las clases en y_score. Si es None, se utiliza el orden numérico o lexicográfico de las etiquetas en y_true.

Devuelve
aucfloat

Ver también

average_precision_score

Área bajo la curva de precisión-exhaustividad.

roc_curve

Calcula la curva Características Operativa del Receptor (ROC).

plot_roc_curve

Traza la curva Característica Operativa del Receptor (ROC).

Referencias

1

Entrada de Wikipedia para el receptor que opera la característica

2

Analyzing a portion of the ROC curve. McClish, 1989

3

Provost, F., Domingos, P. (2000). Well-trained PETs: Improving probability estimation trees (Section 6.2), CeDER Working Paper #IS-00-04, Stern School of Business, New York University.

4

Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861-874.

5

Hand, D.J., Till, R.J. (2001). A Simple Generalisation of the Area Under the ROC Curve for Multiple Class Classification Problems. Machine Learning, 45(2), 171-186.

Ejemplos

Caso binario:

>>> from sklearn.datasets import load_breast_cancer
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.metrics import roc_auc_score
>>> X, y = load_breast_cancer(return_X_y=True)
>>> clf = LogisticRegression(solver="liblinear", random_state=0).fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X)[:, 1])
0.99...
>>> roc_auc_score(y, clf.decision_function(X))
0.99...

Caso multiclase:

>>> from sklearn.datasets import load_iris
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegression(solver="liblinear").fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X), multi_class='ovr')
0.99...

Caso multietiqueta:

>>> from sklearn.datasets import make_multilabel_classification
>>> from sklearn.multioutput import MultiOutputClassifier
>>> X, y = make_multilabel_classification(random_state=0)
>>> clf = MultiOutputClassifier(clf).fit(X, y)
>>> # get a list of n_output containing probability arrays of shape
>>> # (n_samples, n_classes)
>>> y_pred = clf.predict_proba(X)
>>> # extract the positive columns for each output
>>> y_pred = np.transpose([pred[:, 1] for pred in y_pred])
>>> roc_auc_score(y, y_pred, average=None)
array([0.82..., 0.86..., 0.94..., 0.85... , 0.94...])
>>> from sklearn.linear_model import RidgeClassifierCV
>>> clf = RidgeClassifierCV().fit(X, y)
>>> roc_auc_score(y, clf.decision_function(X), average=None)
array([0.81..., 0.84... , 0.93..., 0.87..., 0.94...])

Ejemplos utilizando sklearn.metrics.roc_auc_score