Interpretabilidad de Modelos de Machine Learning con Python


#1

Antonio José Soto Rodriguez

Abstract:
Todavía a día de hoy es bastante común encontrarse con clientes o colegas que perciben los modelos de Machine Learning como una caja negra capaz de realizar magia o alquimia para darle al cliente lo que quiere. Sin embargo, la cruda realidad es que sin una comprensión razonable de como funcionan los modelos de ML, los proyectos del mundo real rara vez tienen éxito. Teniendo en cuenta que cualquier proyecto de este estilo tiene un componente de negocio muy relevante y que el objetivo final de estos modelos es que tomen decisiones de forma automática por los usuarios, estos tienen el derecho de plantear preguntas como “¿Cómo puedo confiar en este modelo?” o “¿Cómo toma las decisiones el modelo?” Responder a estas preguntas puede convertirse en todo un reto y es una de las áreas donde se está invirtiendo más esfuerzos hoy en día.

Bio:
Soy Antonio Soto, llevo más de 20 años dedicado al mundo del análisis de datos, desde los primeros sistemas Data Warehouse, hasta el desarrollo de soluciones integradas con Inteligencia Artificial de hoy en día, pasando por todos los puntos intermedios. Me he tocado viajar por el mundo diseñando sistemas y soluciones enfocadas a la toma de decisiones en todos los sectores y en empresas de diferentes tamaños.


#2

Muy interesante Antonio , muchas gracias por la charla. Podrias compartir el codigo?


#3

Esta es una pregunta más comercial que de código. Cuando lo que interesa suele ser el rendimiento del algoritmo, ¿cómo le planteas a un potencial cliente la inversión de tiempo/dinero en la interpretación del mismo y no en las mejoras de rendimiento?


#4

Exposición muy clarificadora. Desconocía lo de la posibilidad de relevancia incluso de los valores de un atributo. ¿Se podrìa compartir el notebook?


#5

Pues te diría que una cosa va ligada a la otra. Nunca me he encontrado un cliente que esté más preocupado de que el “rendimiento” de su modelo sea mejor sin saber lo que hace y por qué lo hace el modelo. Es además, la fórmula que nosotros utilizamos para documentar los modelos desplegados, por lo que realment puedes “justificar” la interpretación de muchas formas :slight_smile:


#6

Claro, lo puedes encontrar aquí https://github.com/antoniosql/PyConES2020


#7

Gracias!! El código podéis encontrarlo aquí https://github.com/antoniosql/PyConES2020


#8

Alguna recomendación para la interpretabilidad en clasificación de imagenes (CNN)?


#9

Buenas!

¡Muchas gracias por esta charla!

Tengo una serie de dudas:

  1. Hay niveles de interpretabilidad de modelos de ML, uno de ellos, como bien lo has presentado, es evaluar el peso de cada variable de entrada. ¿Como podrías interpretar un modelo multivariable (el modelo que has presentado creo recordar que tiene más de 28 variables de entrada) cuando nos basamos en la contribución marginal promedio? (pensando en problemas de regresión por ejemplo)

  2. ¿En algún punto de la charla se ha hablado de depurar los modelos de ML, como podrías hacerlo con un modelo de regresión por ejemplo (que sea glassbox o blackbox)?

  3. ¿ Trás la interpretación de un modelo, como opciones tienes para cambiar el comportamiento de un modelo dado un determinado escenario?

Muchas gracias!


#10

Nada, que yo conozca “out-of-the-box”. Conozco algunos trabajos de investigación de Universidades Españolas (concretamente la UDC) pero ningún paquete similar a los que he mostrado. Tan solo LIME puede trabajar con imágenes, pero no está pensado para CNN, sino para problemas “sencillos” de clasificación utilizando Aprendizaje Ensamblado.


#11

Hola Kais!
Intento responderte, aunque cada una de estas preguntas nos daría para horas de charla :slight_smile:

  1. Para problemas de regresión con un número elevado de variables, lo primero creo que sería realizar selección de variables por permutación de importancias https://scikit-learn.org/stable/modules/permutation_importance.html para reducir el número de características.
  2. Cuando he comentado la depuración, me refería precisamente a utilizar estos frameworks de interpretación para conocer el detalle de lo que hace el modelo y poder así “modificar” ese comportamiento
  3. ¿Cómo? Pues eso si que es un gran depende. Desde manejar ocurrencias de características (desbalancear algunas características para darle más paso a un determinado valor) hasta generar ocurrencias artificialmente para darle más pesos a la combinatoria de un determinado grupo de características. Recuerda que el objetivo del modelo siempre debe de ser “generalizar lo mejor posible”, pero desde un punto de vista de negocio, en un problema sencillo de clasificación, por ejemplo, siempre habrá una posibilidad que sea “peor”, no es lo mismo un falso positivo, que un falso negativo.

#12

Alguna recomendación para la interpretabilidad en clasificación de imagenes (CNN)

Creo que esto (Grad-CAM) pueda resultar util!


https://keras.io/examples/vision/grad_cam/

Muy guay la charla, no conocìa https://github.com/interpretml/interpret!


#13

hay casos en los que la interpretabilidad es casi obligatoria. Por ejemplo, en el sector financiero/bancario, el poder explicar a una entidad gubernamental como calificas solicitudes de hipotecas, o como bloqueas tarjetas de credito por potencial fraude es un factor importante.