Probabilidades calibradas: cuando un 0,7 tiene que significar un 70%
Un clasificador puede ordenar bien y mentir con los números: decir 0,9 donde la frecuencia real es 0,6. Si alguien va a decidir con esa probabilidad, hay que calibrarla, comprobarlo con la curva de fiabilidad y el Brier score, y solo entonces elegir umbral.

Entrenas un clasificador de impago, miras el ROC-AUC y está bien. Luego alguien pregunta qué significa que el modelo diga 0,7 para un cliente concreto, y ahí se rompe todo: en la mayoría de los modelos recién entrenados, ese 0,7 no significa un 70% de probabilidad real de impago. Significa, como mucho, que ese cliente puntúa más alto que otro con 0,5.
Ranking y probabilidad son cosas distintas. El ROC-AUC solo mide orden: si los positivos puntúan por encima de los negativos. Un modelo puede ordenar de maravilla y estar sistemáticamente desplazado en magnitud — los gradient boosting suelen sacar probabilidades demasiado extremas, y los modelos regularizados demasiado tibias. Mientras solo ordenes (mostrar los 100 clientes de más riesgo), da igual. En cuanto alguien decide con el número (aprobar si baja de 0,2), importa muchísimo.
Cómo se comprueba: la curva de fiabilidad. Se agrupan las predicciones en cubos (0-0,1, 0,1-0,2...) y se compara la probabilidad media predicha de cada cubo con la frecuencia real observada. Si el modelo dice 0,3 y en ese cubo impaga el 30%, la curva cae sobre la diagonal. El Brier score resume lo mismo en un número: cuanto más bajo, mejor calibrado y más discriminante a la vez.
Cómo se arregla. Con un calibrador entrenado sobre un conjunto que el modelo no vio: Platt scaling (una sigmoide sobre el score) cuando hay pocos datos, regresión isotónica cuando hay suficientes. En scikit-learn, CalibratedClassifierCV hace las dos. El detalle que me costó un buen rato entender: el calibrador necesita sus propios datos — calibrar sobre el mismo conjunto donde se entrenó el modelo vuelve a mentir.
Y solo entonces, el umbral. Con probabilidades fiables, elegir el umbral de decisión deja de ser adivinar: se puede calcular el coste esperado de cada umbral con los costes reales de cada tipo de error y quedarse con el mínimo. En mi modelo de riesgo de crédito ese umbral salió en 0,14, lejísimos del 0,5 por defecto, porque un impago no perdonado cuesta cinco veces más que un buen cliente rechazado.
La lección corta: antes de dejar que nadie decida con la probabilidad de tu modelo, dibuja la curva de fiabilidad. Dos horas de trabajo que convierten un score decorativo en un número con el que se puede operar.
¿Conectamos?
Hablemos: feedback, colaboración o una oportunidad.
Puedes escribirme por un proyecto, una duda técnica, para darme feedback o por unas prácticas o un primer puesto junior. Respondo siempre.
Escríbeme

