1.16. Calibración de probabilidad

Al realizar la clasificación, a menudo se desea no sólo predecir la etiqueta de la clase, sino también obtener una probabilidad de la etiqueta respectiva. Esta probabilidad le da algún tipo de confianza en la predicción. Algunos modelos pueden dar estimaciones débiles de las probabilidades de clase y algunos incluso no soportan la predicción de probabilidad (por ejemplo, algunas instancias de SGDClassifier). El módulo de calibración le permite calibrar mejor las probabilidades de un modelo dado, o añadir soporte para la predicción de probabilidades.

Los clasificadores bien calibrados son clasificadores probabilísticos para los que la salida del método predict_proba puede interpretarse directamente como un nivel de confianza. Por ejemplo, un clasificador (binario) bien calibrado debería clasificar las muestras de tal manera que entre las muestras a las que dio un valor de predict_proba cercano a 0,8 aproximadamente el 80% pertenecen realmente a la clase positiva.

1.16.1. Curvas de calibración

El siguiente gráfico compara qué tan bien se calibran las predicciones probabilísticas de diferentes clasificadores, utilizando calibration_curve. El eje x representa la probabilidad promedio predicha en cada intervalo. El eje y es la fracción de positivos, es decir, la proporción de muestras cuya clase es la positiva (para cada intervalo).

../_images/sphx_glr_plot_compare_calibration_001.png

LogisticRegression devuelve predicciones bien calibradas por defecto ya que optimiza directamente Pérdida logística. En cambio, los otros métodos devuelven probabilidades sesgadas; con diferentes sesgos por método:

GaussianNB tiende a llevar las probabilidades a 0 o 1 (observa los recuentos en los histogramas). Esto se debe principalmente a que asume que las características son condicionalmente independientes dada la clase, lo que no es el caso en este conjunto de datos que contiene 2 características redundantes.

RandomForestClassifier muestra el comportamiento opuesto: los histogramas muestran picos con una probabilidad aproximada de 0,2 y 0,9, mientras que las probabilidades cercanas a 0 o 1 son muy poco frecuentes. Niculescu-Mizil y Caruana 1 dan una explicación a esto «Los métodos como el empaquetado (bagging) y los bosques aleatorios que promedian las predicciones de un conjunto de modelos base pueden tener dificultades para hacer predicciones cercanas a 0 y 1 porque la varianza en los modelos base subyacentes sesgará las predicciones que deberían estar cerca de 0 o 1 alejándolos de estos valores. Dado que las predicciones están restringidas al intervalo [0,1], los errores causados por la varianza tienden a ser unilaterales cerca de cero y uno. Por ejemplo, si un modelo debe predecir p = 0 para un caso, la única forma de conseguirlo es que todos los árboles empaquetados predigan cero. Si añadimos ruido a los árboles sobre los que el empaquetado está promediando, este ruido hará que algunos árboles predigan valores mayores que 0 para este caso, alejando así la predicción media del conjunto empaquetado de 0. Observamos este efecto con más fuerza con los bosques aleatorios porque los árboles de nivel base entrenados con bosques aleatorios tienen una varianza relativamente alta debido al subconjunto de características». Como resultado, la curva de calibración, también conocida como diagrama de fiabilidad (Wilks 1995 2), muestra una forma sigmoidea característica, indicando que el clasificador podría confiar más en su «intuición» y devolver probabilidades más cercanas a 0 o 1 típicamente.

La clasificación lineal de vectores de soporte (LinearSVC) muestra una curva aún más sigmoidea que RandomForestClassifier, que es típica de los métodos de margen máximo (compárese con Niculescu-Mizil y Caruana 1), que se centran en las muestras difíciles de clasificar que están cerca de la frontera de decisión (los vectores de soporte).

1.16.2. Calibrar un clasificador

Calibrar un clasificador consiste en ajustar un regresor (llamado calibrador) que mapea la salida del clasificador (dada por decision_function o predict_proba) a una probabilidad calibrada en [0, 1]. Al denotar la salida del clasificador para una muestra dada por \(f_i\), el calibrador intenta predecir \(p(y_i = 1 | f_i)\).

Las muestras que se utilizan para ajustar el calibrador no deben ser las mismas que se utilizan para ajustar el clasificador, ya que esto introduciría un sesgo. Esto se debe a que el rendimiento del clasificador en sus datos de entrenamiento sería mejor que en los datos nuevos. Utilizar la salida del clasificador de los datos de entrenamiento para ajustar el calibrador daría como resultado un calibrador sesgado que asigna probabilidades más cercanas a 0 y 1 de lo que debería.

1.16.3. Uso

La clase CalibratedClassifierCV es utilizada para calibrar un clasificador.

CalibratedClassifierCV utiliza un enfoque de validación cruzada para asegurar que siempre se utilizan datos no sesgados para ajustar el calibrador. Los datos se dividen en k parejas (train_set, test_set) (determinadas por cv). Cuando ensemble=True (por defecto), el siguiente procedimiento se repite independientemente para cada división de validación cruzada: un clon de base_estimator se entrena primero en el subconjunto de entrenamiento. A continuación, sus predicciones en el subconjunto de prueba se utilizan para ajustar un calibrador (un regresor sigmoide o isotónico). Esto da lugar a un conjunto de k parejas (clasificador, calibrador) donde cada calibrador asigna la salida de su clasificador correspondiente en [0, 1]. Cada pareja se presenta en el atributo calibrated_classifiers_, donde cada entrada es un clasificador calibrado con un método predict_proba que produce probabilidades calibradas. La salida de predict_proba para la instancia principal de CalibratedClassifierCV corresponde a la media de las probabilidades predichas de los k estimadores de la lista calibrated_classifiers_. La salida de predict es la clase que tiene la mayor probabilidad.

Cuando ensemble=False, se utiliza la validación cruzada para obtener predicciones «insesgadas» para todos los datos, mediante cross_val_predict. Estas predicciones insesgadas se utilizan para entrenar el calibrador. El atributo calibrated_classifiers_ consiste en una sola pareja (classifier, calibrator) donde el clasificador es el base_estimator entrenado en todos los datos. En este caso, la salida de predict_proba para CalibratedClassifierCV son las probabilidades predichas obtenidas de la única pareja (classifier, calibrator).

La principal ventaja de ensemble=True es beneficiarse del efecto tradicional de ensamblaje (similar al de Metaestimador de bagging). El conjunto resultante debería estar tanto bien calibrado como ser ligeramente más preciso que con ensemble=False. La principal ventaja de utilizar ensemble=False es computacional: reduce el tiempo total de ajuste al entrenar sólo un clasificador base y un par calibrador, disminuye el tamaño del modelo final y aumenta la velocidad de predicción.

Alternativamente, se puede calibrar un clasificador ya ajustado estableciendo cv="prefit". En este caso, los datos no se dividen y se utilizan todos para ajustar el regresor. Es responsabilidad del usuario asegurarse de que los datos utilizados para ajustar el clasificador son disjuntos de los datos utilizados para ajustar el regresor.

sklearn.metrics.brier_score_loss puede utilizarse para evaluar lo bien que está calibrado un clasificador. Sin embargo, esta métrica debe usarse con cuidado porque una puntuación Brier más baja no siempre significa un modelo mejor calibrado. Esto se debe a que la métrica de la puntuación Brier es una combinación de la pérdida de calibración y la pérdida de refinamiento. La pérdida de calibración se define como la desviación media al cuadrado de las probabilidades empíricas derivadas de la pendiente de los segmentos ROC. La pérdida de refinamiento puede definirse como la pérdida óptima esperada, medida por el área bajo la curva de coste óptimo. Como la pérdida por refinamiento puede cambiar independientemente de la pérdida por calibración, una puntuación Brier más baja no significa necesariamente un modelo mejor calibrado.

CalibratedClassifierCV admite el uso de dos regresores de “calibración”: “sigmoide” e “isotónico”.

1.16.3.1. Sigmoide

El regresor sigmoide se basa en el modelo logístico de Platt 3:

\[p(y_i = 1 | f_i) = \frac{1}{1 + \exp(A f_i + B)}\]

donde \(y_i\) es la etiqueta verdadera de la muestra \(i\) y \(f_i\) es la salida del clasificador no calibrado para la muestra \(i\). \(A\) y \(B\) son números reales que se determinan al ajustar el regresor por máxima verosimilitud.

El método sigmoide asume que la curva de calibración puede corregirse aplicando una función sigmoide a las predicciones brutas. Esta suposición se ha justificado empíricamente en el caso de Máquinas de Vectores de Soporte con funciones de núcleo (kernel) comunes en varios conjuntos de datos de referencia en la sección 2.1 de Platt 1999 3 pero no se cumple necesariamente en general. Además, el modelo logístico funciona mejor si el error de calibración es simétrico, lo que significa que la salida del clasificador para cada clase binaria se distribuye normalmente con la misma varianza 6. Esto puede ser un problema para problemas de clasificación muy desequilibrados, en los que los resultados no tienen la misma varianza.

En general, este método es más eficaz cuando el modelo no calibrado está infravalorado (under-confident) y tiene errores de calibración similares tanto para las salidas altas como para las bajas.

1.16.3.2. Isotónico

El método “isotónico” ajusta un regresor isotónico no paramétrico, que produce una función escalonada no decreciente (véase sklearn.isotonic). Este método minimiza:

\[\sum_{i=1}^{n} (y_i - \hat{f}_i)^2\]

sujeto a \(\hat{f}_i >= \hat{f}_j\) siempre que \(f_i >= f_j\). \(y_i\) sea la etiqueta verdadera de la muestra \(i\) y \(\hat{f}_i\) sea la salida del clasificador calibrado para la muestra \(i\) (es decir, la probabilidad calibrada). Este método es más general en comparación con el “sigmoide”, ya que la única restricción es que la función de mapeo sea monotónicamente creciente. Por tanto, es más potente, ya que puede corregir cualquier distorsión monótona del modelo no calibrado. Sin embargo, es más propenso al sobreajuste, especialmente en conjuntos de datos pequeños 5.

En general, “isotónico” funcionará tan bien o mejor que “sigmoide” cuando haya suficientes datos (más de ~ 1000 muestras) para evitar el sobreajuste 1.

1.16.3.3. Soporte multiclase

Tanto los regresores isotónicos como los sigmoides sólo admiten datos unidimensionales (por ejemplo, la salida de una clasificación binaria), pero se amplían para la clasificación multiclase si el estimador base admite predicciones multiclase. Para las predicciones multiclase, CalibratedClassifierCV calibra para cada clase por separado de forma Clasificador One Vs Rest 4. Al predecir las probabilidades, las probabilidades calibradas para cada clase se predicen por separado. Como esas probabilidades no suman necesariamente uno, se realiza un postprocesamiento para normalizarlas.

Referencias:

1(1,2,3)

Predicting Good Probabilities with Supervised Learning, A. Niculescu-Mizil & R. Caruana, ICML 2005

2

On the combination of forecast probabilities for consecutive precipitation periods. Wea. Forecasting, 5, 640–650., Wilks, D. S., 1990a

3(1,2)

Probabilistic Outputs for Support Vector Machines and Comparisons to Regularized Likelihood Methods. J. Platt, (1999)

4

Transforming Classifier Scores into Accurate Multiclass Probability Estimates. B. Zadrozny & C. Elkan, (KDD 2002)

5

Predicting accurate probabilities with a ranking loss. Menon AK, Jiang XJ, Vembu S, Elkan C, Ohno-Machado L. Proc Int Conf Mach Learn. 2012;2012:703-710

6

Beyond sigmoids: How to obtain well-calibrated probabilities from binary classifiers with beta calibration Kull, M., Silva Filho, T. M., & Flach, P. (2017).