GithubHelp home page GithubHelp logo

uncertainty_quantification_xai's Introduction

Más allá de la métrica

Este taller complementa a la mayoría de los cursos introductorios sobre aprendizaje automático (machine learning) supervisado, que a menudo se centran solamente en optimizar métricas de rendimiento. Si no has realizado un curso introductorio sobre aprendizaje automático supervisado, encontrarás un resumen en el Jupyter Notebook llamado Exploration_and_Classification.ipynb.

El análisis completo es una serie de 3 Jupyter Notebooks, en este orden:

  • Exploration_and_Classification.ipynb donde exploramos y preparamos los datos, probamos varios modelos de aprendizaje automático supervisado para clasificación, explicamos las métricas de rendimiento y el umbral de decisión, y elegimos el modelo que nos da mejor rendimiento,
  • XAI.ipynb donde aplicamos varios métodos de explicabilidad o XAI, y
  • UQ.ipynb donde aplicamos varios métodos de cuantificación de incertidumbre o UQ.

Para profundizar en la aplicación de la UQ, ver el cuarto Jupyter Notebook UQ_multiclass.ipynb donde se incluye el código para la explicación de este mini curso de Christoph Molnar y el quinto Jupyter Notebook UQ_TimeSeriesClassification.ipynb donde aplicamos UQ a la clasificación de series temporales.

Si prefieres solo mirar el contenido sin ejecutarlo, aquí tienes los enlaces a cada uno de los temas:

NBViewer Exploración de los datos y selección del modelo de aprendizaje supervisado para la Clasificación

NBViewer Herramientas de Explicabilidad (XAI)

NBViewer Herramientas de Cuantificación de Incertidumbre (UQ)

NBViewer Conformal Predictors (CP) para la UQ en ejemplo de clasificación multiclase

NBViewer Conformal Predictors (CP) para la UQ en un ejemplo de clasificación de series temporales

y el enlace a las diapositivas de las presentaciones introductorias (contienen animaciones, mejor verlas en modo presentación):

Como decíamos, ésta es una serie introductoria y no incluimos explicaciones exhaustivas ni demostraciones matemáticas (hay muchas otras fuentes, ver la lista de materiales en la intro de los Jupyter Notebooks), mejor mencionaremos algunas características intuitivas sobre la explicabiliad y la cuantificación de la incertidumbre y nos enfocaremos en su implementación en Scikit-learn (una de las librerías de Python más utilizadas en aprendizaje automático) y paquetes compatibles.

Exactitud con certidumbre

En inteligencia artificial, medimos la calidad de las predicciones de un modelo de aprendizaje automático supervisado a través de métricas de rendimiento. Por ejemplo, la métrica de exactitud (accuracy) en una tarea de clasificación cuenta cuántas veces el modelo nos dió la solución correcta. El error cuadrático medio (MSE) en una tarea de regresión mide a qué distancia se quedó el modelo de la solución correcta. Sin embargo, las métricas de rendimiento no nos ofrecen certeza sobre las predicciones del modelo y esto es un gran problema, sobre todo si es un modelo no interpretable por las personas, también llamados modelos de caja opaca (‘black box models’).

Un ejemplo es el de un modelo utilizado para clasificar radiografías de tórax según la gravedad de una neumonía. Había detectado una marca de la placa cuando la radiografía se había realizado en la planta UCI y ese factor circunstancial era el que primaba en su predicción ("AI for radiographic COVID-19 detection selects shortcuts over signal"). Eran un modelo muy exacto, con una métrica de exactitud de más del un 90% de aciertos, pero en una tarea distinta, no deseada (queríamos detectar una enfermedad, no de dónde venía la radiografía). El modelo simplemente encontró una correlación espuria y cogió el atajo. Y sin poder avisarnos, arrojó predicciones sesgadas.

Como segundo ejemplo imaginemos otro modelo clasificador, esta vez entrenado para predecir si llueve (clase 1) o no llueve (clase 0) dada la temperatura y la humedad del día. Si cuando lo ponemos en producción el resultado de un día es “0.8”, muchos libros, cursos,… concluyen que eso significa que “hay un 80% de probabilidad de que llueva ese día y un 20% de probabilidad de que no llueva ese día”. Sin embargo, esos resultados no están calibrados, es decir, no tienen en cuenta cuántos días llovió de verdad, y por tanto no son verdaderas probabilidades. Pero la cosa empeora, ¿qué ocurre si lo que le mostramos al modelo son los datos de un día con temperatura y humedad muy distintas a las que se usaron en su entrenamiento? Por ejemplo, las de un día en el planeta Venus. El modelo no tiene manera de decirnos “no tengo ni idea de qué es esto”, simplemente arrojará un resultado, que en el mejor de los casos estará cerca de “0.5” pero no hay ninguna garantía de que así sea. Y se quedará tan pancho, porque no le hemos dado herramientas para mostrar la incertidumbre.

Al automatizar predicciones, si solamente nos fijamos en las métricas de rendimiento, estos problemas pueden pasar fácilmente desapercibidos y aumentar el tamaño del training set no necesariamente los soluciona. Podemos cerciorarnos de que esto no nos pasa incorporando a nuestro modelo ya entrenado ciertas herramientas sencillas para que pueda indicarnos cuándo su predicción es fiable y cuándo no. Estas herramientas matemáticas (ya desarrolladas como librerías de Python y R) explican en qué se fijó el modelo para producir sus predicciones (gracias a métodos de explicabilidad o “XAI”, como los SHAP values, LIME,…) o nos proveen de probabilidades calibradas e intervalos de predicción que incluyen con certeza el valor verdadero para que el modelo pueda avisarnos cuando no debemos confiar en su predicción (gracias a métodos de cuantificación de incertidumbre o “UQ”, como los Conformal Predictors). Y todas son herramientas post-hoc (no hay que volver a entrenar el modelo), model-agnostic (sirven para cualquier modelo y tarea), y muy ligeras (se implementan con pocas líneas de código y se ejecutan muy rápido).

👍🤓

Instrucciones

  1. Clona este repositorio en el ordenador o nube donde vayas a trabajar. Si no tienes el paquete git instalado, aquí explica cómo hacerlo. Para clonar el repositorio, pincha en el botón verde que dice 'Code', copia al portapapeles la dirección htpps, y pégala en una terminal donde vayas a trabajar, escribiendo git clone, un espacio, y la dirección htpps de este repositorio, tardará unos segundos en descargarse.

  2. Si no tienes el administrador de paquetes conda instalado, puedes simplemente instalar miniconda siguiendo las instrucciones para tu sistema operativo aquí. Al instalar miniconda se instala Python también, viene incluido. Después, abre una terminal (de Bash si estás en Linux o Mac, Anaconda Prompt si estás en Windows) y escribe:

  • conda env create -f environment.yml

    ⚠️ Crear el entorno por primera vez puede tardar unos 10 minutos pero puede que más, porfa, tráelo ya hecho cuando vengas al taller.

  1. Activa el entorno escribiendo en la terminal:
  • conda activate intro_UQ_XAI

    Cuando acabes con este proyecto, desactiva el entorno escribiendo en la terminal:

  • conda deactivate

  1. Con el entorno activo, vamos a instalar los paquetes de XAI LIME y SHAP y el paquete de UQ MAPIE que es mejor instalarlos via pip en lugar de usar conda, tardarán unos pocos minutos en instalarse, para ello escribe en la terminal
  • python3 -m pip install lime shap MAPIE
  1. Siempre con el entorno activo, abre la aplicación de Jupyter para editar y ejecutar el código en Jupyter Notebooks escribiendo en la terminal:
  • jupyter notebook

Jupyter se abrirá en el browser que tengas por defecto (Firefox, Chrome,...). Los Jupyter Notebooks son los ficheros con extensión .ipynb, se abren clicando en ellos. Sigue las instrucciones escritas allí. Aconsejamos empezar por Exploration_and_Classification.ipynb.

📝 Este taller se realizó por primera vez en la PyConES22 viernes 30 de Septiembre de 2022 de 15:30h a 17:30h. En el taller de la PyConES22 damos este Jupyter Notebook por sabido y empezamos directamente con XAI.ipynb. Todas las charlas de la PyConES 2022 que se mencionan como material complementario en los Jupyter Notebooks pueden encontrarse en la lista de reprodución del canal de youtube de Python Espana.

uncertainty_quantification_xai's People

Contributors

mmdecastro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

thejosess

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.