Tutorial en Inteligencia Artificial Explicable (Parte III)

Evelyn Navarrete
12 min readApr 15, 2020

--

Fuente

Si llegaste hasta este tutorial es porque probablemente ya revisaste la parte I y la parte II, y eso es muy bueno porque ahora solamente te faltan tres técnicas más para tener una buena comprensión sobre las herramientas que tienes a disposición para hacer que tu modelo black-box confiese sus secretos. En particular, este tutorial es uno de los que más me emociona, ya que desde este punto voy a presentar las técnicas que a mi parecer son las más interesantes y las cuales han dado mucho de qué hablar en este campo de estudio:

  1. Local Interpretable Model-Agnostic Explanations (LIME)
  2. Anchors
  3. Shapley Values

Dataset

Los datos que vamos a usar son los mismos del primer tutorial, allí puedes ver todos los detalles. En resumen este dataset contiene variables que se consideran para decidir la admisión de estudiantes a un programa de maestría en una universidad. El objetivo es predecir si la persona va a ser aceptada en dicho programa. Esto lo haremos de acuerdo a 3 categorías: (1) muy probable que sea aceptado (very likely), (2) probable (likely), e (3) improbable (unlikely). Las variables son: GRE scores, TOEFL score, university rating, statement of purpose, letter of recommendation strength, undergraduate GPA, research experience, y chance of admit.

Black-box Model

El modelo black-box que he escogido para hacer las predicciones es una técnica llamada extreme gradient boosting que usa árboles de decisión. El ejemplo de cómo puedes implementarla en R puedes encontrarlo en la primera parte de mi tutorial.

Local Interpretable Model-Agnostic Explanations (LIME)

Esta es una técnica relativamente nueva que salió a la luz en 2016 y fué motivo de conversación entre grupos dedicados a la ciencia de datos. Como su nombre lo indica, esta técnica pertenece a la categoría de explicabilidad local, es decir, provee explicaciones sobre la predicción de cada instancia en el dataset. En resumen, LIME trata de contestar a la pregunta: cuáles son las variables que influyeron en la predicción? que cómo ya te habrás dado cuenta, es lo misma pregunta que otras técnicas que se presentaron en este tutorial también buscan responder. Además, de la misma manera que otras las otras técnicas, LIME intenta responderla permutando los valores de las variables y observando como las predicciones del modelo van cambiando. La diferencia radica en que los autores de LIME hacen énfasis en que no se puede comprender el comportamiento de un modelo de manera global (explicabilidad global), el cual puede ser extremadamente complejo, y es por esto que LIME explica localmente. Por ejemplo, supongamos que nos enfrentamos a un problema de clasificación entre “clase A” y “clase B”, y nuestro problema tiene un escenario como el de la gráfica de abajo, donde cualquier punto que caiga en la parte rosada pertenecería una clase llamada “clase A”, mientras que cualquier punto que caiga en la parte azul pertenecería a una clase llamada “clase B”.

Este caso sería demasiado complejo para resolver con modelos que asumen que el problema es lineal, como por ejemplo una regresión logística, ya que el problema es claramente no-lineal. Sin embargo, técnicas como Global Surrogates (modelos sustitutos) justamente están dispuestos a usar modelos sustitutos white-box que asumen linearidad con la finalidad de explicar como el modelo black-box se comporta. Es fácil entonces predecir que mi modelo sustituto no va a poder interpretar adecuadamente como mi modelo black-box toma decisiones, ya que el escenario es demasiado complicado para representarlo con tan solo una línea recta. Ahora, si bien no podemos usar un modelo white-box que asume linearidad para comprender de forma global a mi modelo black-box, podríamos usarlos en pequeñas partes, a lo que los autores se refieren como “usarlos localmente” o en los alrededores de la instancia seleccionada. Ten en cuenta que entonces LIME asume que los modelos complejos son lineales en una escala local pero no en una escala global. El siguiente gráfico demuestra que usar un modelo que divida el espacio con una línea puede ser una buena idea si lo hacemos en solo una pequeña parte del espacio. Nota que en la gráfica todos los círculos que se encuentran en la derecha y en la cercanía de la línea, pertenecerían a la clase A, mientras que las cruces a la izquierda cerca de la línea, pertenecerían a la clase B.

(Ribeiro 2016)

Para tener una idea fácil sobre como se realiza se calculan y generan las explicaciones, voy a dividir el proceso en cuatro pasos y visualizar los resultados en cada etapa. Antes de nada, vamos a suponer que el problema al que nos enfrentamos luce de la siguiente manera:

(Molnar 2020)

En donde x1 y x2 son las variables en el dataset. Si una instancia recae en la zona azul, entonces pertenecería a una determinada clase, la cual llamaremos clase A, y si la instancia recae en la zona gris, entonces pertenecería a una clase diferente, la cual llamaremos clase B.

  1. Permutación: en este primer paso vamos a tomar una muestra de nuestro dataset incluyendo la instancia que es de nuestro interés (el punto amarillo). Después vamos a permutar todas las variables de la muestra. Los autores se refieren a este paso como “retorcer un poco los valores con el fin de ver el impacto en las predicciones”. Finalmente, hacemos las predicciones usando nuestro modelo black-box (ya entrenado) y visualizamos los resultados.
(Molnar 2020)

2. Asignamos un mayor peso a las instancias que están cerca de nuestra instancia de interés.

(Molnar 2020)

3. Ajustamos un modelo interpretable (white-box) con los nuevos datos que fueron permutados y pesados de acuerdo a su cercanía. Esperaríamos entonces que el resultado sea una línea que divide el espacio de la siguiente manera:

(Molnar 2020)

4. Finalmente extraemos los pesos de las variables del modelo white-box, ya que usamos estos para explicar las predicciones de nuestro modelo black-box.

Ahora vamos a ver cómo podemos implementar esta técnica usando nuestro ejemplo, el cual predice que tan probable es que una persona sea aceptada para un programa de maestría. En esta implementación seguiré usando la librería “iml” en R, sin embargo, los autores de esta técnica tienen su propia librería que puede ser implementada usando python. Nota también que la instancia que he escogido para generar las explicaciones es la sexta instancia del dataset y pertenece a la categoría “likely” (probable).

# Librerías requeridas
library(data.table)
library(tidyverse)
library(iml) #librería para machine learning interpretable
# selecciona la instancia que quieres explicar
i = 6 # explicar para la sexta instancia del dataset
# genera las explicaciones con LIME y visualiza
predictor_lime <- Predictor$new(xgboost_model, data = X, type = "prob", class = "likely")
lime <- LocalModel$new(predictor_lime, x.interest = X[i, ], k = 7)
plot(lime)

Antes de realizar la interpretación de esta gráfica, nota que la predicción verdadera (actual prediction) nos dice que la sexta instancia pertenece a la clase “probable” en un 99%, mientras que el modelo white-box (lineal) cree que esta instancia pertenece a la clase “probable” en un 89%. Al parecer, ambos modelos se ven convencidos de que la instancia pertenece a dicha clase, lo que es bueno y nos da más confianza sobre los resultados de las explicaciones generadas.

Continuando con la interpretación de la gráfica, en resumen lo que podemos decir es que:

  • La variable que causa que la predicción de la instancia de como resultado “probable” es la variable “recommendation letter strength” (que tan buena es la carta de recomendación).
  • Por otro lado, las variables que contradicen que la instancia pertenezca a la clase “probable” son: “statement of purpose”, “GRE score”, “university rating” “CGPA score” y “TOEFL score”.

Aunque LIME es una técnica interesante que busca generar explicaciones a nivel local, podemos sacar más provecho de ella por medio de la exploración de más instancias, lo que podría revelar si existen cosas en común entre las explicaciones para así tener pistas sobre un patrón o tendencia global. Justamente constataremos esto con el siguiente ejemplo en donde he generado explicaciones para 9 diferentes instancias del dataset que seleccioné aleatoriamente: 3 clasificadas como “muy probable” (very likely), 3 en la clase “probable” (likely) y 3 en la clase “improbable” (unlikely).

Toma especial atención a las variables a donde apuntan las flechas naranjas, al parecer hay de hecho una tendencia que se repite en cada clase:

  • Lo que tienen en común las gráficas a1, a2 y a3, es que todas muestran que las variables que más presionan al modelo para predecir que una instancia es de clase “muy probable” son “CGPA score” y “TOEFL score”. Pero además si traemos en juego a nuestro sentido común, sería muy natural que las dos calificaciones nos dieran mayor oportunidad de conseguir un puesto para la maestría, especialmente si tenemos calificaciones altas.
  • Las gráficas b1, b2 y b3 muestran que la variable que más presiona al modelo para predecir que una instancia pertenece a la clase “probable” es “Recommendation letter strength”. Al parecer, cuando no tenemos las más altas calificaciones CGPA y TOEFL, entonces tener una buena carta de recomendación juega un papel importante en darnos oportunidad para ser aceptados.
  • Las gráficas c1, c2 y c3 muestran que las variables que más presionan al modelo para predecir que una instancia pertenece a la clase “improbable” son “University rating” y “Statement of purpose”.

Ventajas:

  • Es fácil de entender e interpretar. Básicamente esta técnica aplica un modelo white-box (lineal) en un área local de nuestro interés.

Desventajas:

  • LIME asume que nuestro problema tiene regiones que pueden que ser separadas por una línea para hacer la clasificación, lo cual suena bastante razonable porque toma regiones pequeñas del espacio, sin embargo, también es verdad que podemos encontrarnos que con problemas altamente no-lineales, en donde las suposiciones de esta técnica no funcionarían incluso si tomamos una región super pequeña.
  • Uno de los problemas más importantes de esta técnica es que no sabemos a ciencia cierta a qué otras instancias aplican las explicaciones que generamos, o exactamente a qué región del espacio. Solamente sabemos que es probable que se apliquen a las instancias que se encuentran más cercanas a la instancia que estamos examinando.
  • Si es que estamos enfrentando un problema que donde no usamos variables categóricas sino variables continuas, LIME discretiza sus valores y por lo tanto hay una pérdida de información debido a este proceso.

Anchors

Anchors, o anclas en español, es una técnica de la categoría “explicabilidad local” (explicaciones para una sola instancia) que genera explicaciones usando reglas if-then. Estas son reglas que utilizan el condicional si, en donde, si una condición se cumple, entonces “algo sucederá”. Por ejemplo, evaluemos el caso de un modelo black-box que predice si el salario de una persona será mayor a 50.000 dólares (50K). Además, supongamos que la regla if-then o anchor dice que si una persona posee una educación igual o inferior a la secundaria, entonces la persona tendrá de un salario inferior a los 50K.

(Ribeiro 2016)

Ya que esta instancia muestra que la persona posee una educación inferior a la educación secundaria, entonces es probable que nuestro modelo decida que esta persona tendrá un salario inferior a los 50K.

Anchors nace cómo una técnica que busca superar los problemas que LIME sufre, en particular, el problema de no saber si las explicaciones que se generaron para una instancia en específico pueden aplicarse a otras instancias. En cambio, anchors explica claramente a qué otras instancias estas explicaciones se generalizan. Lo interesante es que esta técnica fue desarrollada por los mismos autores de LIME, quienes reconocen el problema y proponen esta técnica como solución. Para desarrollar una intuición sobre la diferencia entre ambas técnicas, analicemos visualmente la siguiente gráfica.

(Ribeiro 2016)

Por un lado vemos como LIME separa el espacio en dos partes usando una línea, en donde podemos suponer que las explicaciones también se pueden aplicar a instancias que se encuentren en los alrededores de la instancia que estamos examinando (cruz azul). Pero como puedes ver, esto no es completamente cierto, ya que si una instancia se localiza en la zona rosada, las mismas explicaciones ya no serían válidas, ya que esta de hecho pertenece a otra clase. Por otro lado, anchors delimita claramente a qué región las explicaciones aplican, que en este caso es el cuadrado con líneas entrecortadas, lo cual indica que únicamente las instancias que se encuentran en esta región pueden tener las mismas explicaciones. Ciertamente, en el gráfico se puede ver que la zona dentro del cuadrado es casi toda del mismo color (azul), lo que nos dice que las instancias que aquí se localizan pertenecen a la misma clase y por lo tanto tiene más sentido que las mismas explicaciones se puedan aplicar.

En resumen, un anchor es una regla que tienen una alta probabilidad de cumplirse (ser verdadera) si las condiciones se cumplen. Veamos otro ejemplo sobre cómo podemos aplicar anchors a un caso de análisis de sentimiento.

(Ribeiro 2016)

En este ejemplo, el anchor nos dice que si el texto contiene las palabras “no” (not) y “mala” (bad), entonces el modelo se inclina a predecir que este texto tiene un sentimiento positivo, lo cual podemos corroborar, ya que el texto dice “Esta película no es mala” (This movie is not bad).

La pregunta interesante aquí es: ¿Cómo un anchor es definido? Para contestar esto necesitamos tener 3 ingredientes en mente: (1) un modelo black-box entrenado, (2) la instancia con la que vamos a trabajar y (3) la regla. Tomando nuestro ejemplo de arriba sobre análisis de sentimiento, donde la instancia sería “Esta película no es mala”, y la regla sería {no, mala}, hacemos lo siguiente:

  • Perturbamos nuestra instancia de interés. Este un proceso que genera otras intancias similares a la instancia que estamos examinando, de manera que resultan estar cerca las unas de las otras (en el espacio). Supongamos que: “Este audio no es malo”, “Esta novela no es mala”, y “Esta imagen no es mala” son el resultado que obtenemos al perturbar la instancia, que cómo podemos ver, son similares.
  • Después llamamos a nuestro modelo black-box con el que vamos a predecir la clase a la que pertenecerían las nuevas instancias que resultaron de la perturbación. Una vez que tenemos las predicciones, procedemos a calcular la probabilidad de las instancias de tener un “sentimiento positivo”, es decir, de pertenecer a la misma clase que la instancia de interés. Por ejemplo, supongamos que el modelo predijo que las 3 instancias tienen un sentimiento positivo, entonces mi probabilidad sería del 100%.
  • Finalmente, si nuestro grupo de instancias perturbadas cumple con la regla de contener las palabras “no” y “mala”, y si estas tienen una alta probabilidad de tener un “sentimiento positivo”, entonces podemos confirmar que la regla es un anchor. La probabilidad la define el usuario. Por ejemplo, para mí, una probabilidad del 95% sería aceptable.

Otra pregunta interesante que nos podemos hacer es: Cómo construyo las reglas? La respuesta a esta pregunta es un poco más compleja, por lo que recomiendo dirigirte a el libro de Christoph Molnar o puedes ir a mi tutorial original. Aunque para adelantar un poco el tema, puedes esperar que el cálculo involucre aleatoriedad.

También voy a saltarme la implementación de esta técnica, ya que no encontré la manera de implementarla en R. Sin embargo, es posible realizar la implementación en python mediante la librería que los mismo autores han creado.

Ventajas:

  • El uso de reglas if-then es bastante intuitivo y fácil de entender.
  • A diferencia de LIME, el usuario de esta técnica sabe exactamente cuando las explicaciones se generalizan a otras instancias.

Desventajas:

  • Anchors es capaz de generar explicaciones para instancias que se manejan en escenarios bastante complejos, sin embargo, la regla que explica la predicción tiende a hacerse muy grande.

Con esta técnica hemos llegado al final de este tercer tutorial, sin embargo, ya estoy preparando el último con el que culminaremos esta sesión sobre inteligencia artificial explicable, en donde revisaremos la última técnica que queda pendiente (Shapley values), un contraste entre todas las técnicas, y una guía para escoger las que más nos sean convenientes. Déjame saber si este tutorial te gustó (un poco de feedback siempre es bueno) y si tienes sugerencias de temas que podrían ser de interés para nuestra comunidad.

--

--

Evelyn Navarrete

Data science para los que hablamos español. Que el idioma no sea una barrera :)