Usando los valores SHAP para la interpretación del modelo en Aprendizaje Automático

Interpretación del modelo en Aprendizaje Automático con valores SHAP

 

Interpretabilidad del Aprendizaje Automático

 

La interpretabilidad del aprendizaje automático se refiere a técnicas para explicar y comprender cómo los modelos de aprendizaje automático hacen predicciones. A medida que los modelos se vuelven más complejos, se vuelve cada vez más importante explicar su lógica interna y obtener información sobre su comportamiento.

Esto es importante porque los modelos de aprendizaje automático se utilizan a menudo para tomar decisiones que tienen consecuencias en el mundo real, como en el ámbito de la salud, las finanzas y la justicia penal. Sin interpretabilidad, puede ser difícil saber si un modelo de aprendizaje automático está tomando buenas decisiones o si está sesgado.

Cuando se trata de la interpretabilidad del aprendizaje automático, existen diversas técnicas a considerar. Un método popular es determinar las puntuaciones de importancia de las características, que revelan las características que tienen el mayor impacto en las predicciones del modelo. Los modelos de SKlearn ofrecen puntuaciones de importancia de las características de forma predeterminada, pero también puedes utilizar herramientas como SHAP, Lime y Yellowbrick para una mejor visualización y comprensión de los resultados de tu aprendizaje automático.

Este tutorial cubrirá los valores SHAP y cómo interpretar los resultados del aprendizaje automático con el paquete SHAP de Python.

 

¿Qué son los valores SHAP?

 

Los valores SHAP se basan en los valores de Shapley de la teoría de juegos. En la teoría de juegos, los valores de Shapley ayudan a determinar cuánto ha contribuido cada jugador en un juego colaborativo al pago total.

Para un modelo de aprendizaje automático, cada característica se considera un “jugador”. El valor de Shapley para una característica representa la magnitud promedio de la contribución de esa característica en todas las combinaciones posibles de características.

En concreto, los valores SHAP se calculan comparando las predicciones de un modelo con y sin una característica particular presente. Esto se hace de forma iterativa para cada característica y cada muestra en el conjunto de datos.

Al asignar a cada característica un valor de importancia para cada predicción, los valores SHAP proporcionan una explicación local y coherente de cómo se comporta el modelo. Revelan qué características tienen un mayor impacto en una predicción específica, ya sea de manera positiva o negativa. Esto es valioso para comprender el razonamiento detrás de los modelos de aprendizaje automático complejos como las redes neuronales profundas.

 

Introducción a los valores SHAP

 

En esta sección, utilizaremos el conjunto de datos de clasificación de precios de teléfonos móviles de Kaggle para construir y analizar modelos de clasificación múltiple. Clasificaremos los precios de los teléfonos móviles en función de características como la memoria RAM, el tamaño, etc. La variable objetivo es <code>price_range</code> con valores de 0 (costo bajo), 1 (costo medio bajo), 2 (costo medio alto) y 3 (costo alto).

Nota: El código fuente con las salidas está disponible en el espacio de trabajo de Deepnote.

 

Instalando SHAP

 

Es bastante sencillo instalar <code>shap</code> en tu sistema utilizando los comandos <code>pip</code> o <code>conda</code>.

pip install shap

 

o

conda install -c conda-forge shap

 

Cargando los datos

 

El conjunto de datos está limpio y bien organizado, con categorías convertidas a numéricas utilizando codificadores de etiquetas.

import pandas as pd

mobile = pd.read_csv("train.csv")
mobile.head()

 

 

Preparando los datos

 

Para empezar, identificaremos las variables dependientes e independientes y luego las dividiremos en conjuntos de entrenamiento y prueba separados.

from sklearn.model_selection import train_test_split


X = mobile.drop('price_range', axis=1)
y = mobile.pop('price_range')

# División de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

 

Entrenamiento y evaluación del modelo 

 

Después de eso, entrenaremos nuestro modelo clasificador Random Forest utilizando el conjunto de entrenamiento y evaluaremos su rendimiento en el conjunto de pruebas. Hemos obtenido una precisión del 87%, lo cual es bastante bueno, y nuestro modelo está bien equilibrado en general.

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# Ajuste del modelo
rf = RandomForestClassifier()
rf.fit(X_train, y_train)

# Predicción
y_pred = rf.predict(X_test)

# Evaluación del modelo
print(classification_report(y_pred, y_test))

 

              precision    recall  f1-score   support

           0       0.95      0.91      0.93       141
           1       0.83      0.81      0.82       153
           2       0.80      0.85      0.83       158
           3       0.93      0.93      0.93       148

    accuracy                           0.87       600
   macro avg       0.88      0.87      0.88       600
weighted avg       0.87      0.87      0.87       600

 

Cálculo del valor SHAP

 

En esta parte, crearemos un explicador de árbol SHAP y lo utilizaremos para calcular los valores SHAP del conjunto de pruebas. 

import shap
shap.initjs()

# Calcular los valores SHAP
explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X_test)

 

Gráfico de resumen

 

El gráfico de resumen es una representación gráfica de la importancia de cada característica en el modelo. Es una herramienta útil para comprender cómo el modelo realiza predicciones y para identificar las características más importantes.

En nuestro caso, muestra la importancia de las características por clase objetivo. Resulta que la “ram”, “battery_power” y el tamaño del teléfono juegan un papel importante en la determinación del rango de precios.  

# Resumir los efectos de las características
shap.summary_plot(shap_values, X_test)

 

 

Ahora visualizaremos la importancia futura de la clase “0”. Podemos ver claramente que la “ram”, la batería y el tamaño del teléfono tienen efectos negativos para predecir teléfonos móviles de bajo costo. 

shap.summary_plot(shap_values[0], X_test)

   

Gráfico de dependencia

 

Un gráfico de dependencia es un tipo de gráfico de dispersión que muestra cómo las predicciones de un modelo se ven afectadas por una característica específica. En este ejemplo, la característica es “battery_power”. 

El eje x del gráfico muestra los valores de “battery_power” y el eje y muestra el valor SHAP. Cuando la potencia de la batería supera los 1200, comienza a afectar negativamente la clasificación de los modelos de teléfonos móviles de gama baja.

shap.dependence_plot("battery_power", shap_values[0], X_test, interaction_index="ram")

   

Gráfico de fuerza

 

Vamos a enfocarnos en una sola muestra. Específicamente, examinaremos más de cerca la muestra número 12 para ver qué características contribuyeron al resultado “0”. Para lograr esto, utilizaremos un gráfico de fuerza e ingresaremos el valor esperado, el valor SHAP y la muestra de prueba.

Resulta que la “ram”, el tamaño del teléfono y la velocidad del reloj tienen una mayor influencia en los modelos. También hemos observado que el modelo no predice la clase “0” ya que f(x) es menor. 

shap.plots.force(explainer.expected_value[0], shap_values[0][12,:], X_test.iloc[12, :], matplotlib = True)

 

 

Ahora visualizaremos el gráfico de fuerza para la clase “1” y podemos ver que es la clase correcta. 

shap.plots.force(explainer.expected_value[1], shap_values[1][12, :], X_test.iloc[12, :],matplotlib = True)

 

 

Podemos confirmar nuestra predicción al verificar el registro número 12 del conjunto de pruebas. 

y_test.iloc[12]
>>> 1

 

Gráfico de Decisión

 

Los gráficos de decisión pueden ser una herramienta útil para comprender el proceso de toma de decisiones de un modelo de aprendizaje automático. Nos pueden ayudar a identificar las características más importantes para las predicciones del modelo y a identificar posibles sesgos.

Para comprender mejor los factores que influyeron en la predicción del modelo de la clase “1”, examinaremos el gráfico de decisión. Según este gráfico, parece que la altura del teléfono tuvo un impacto negativo en el modelo, mientras que la RAM tuvo un impacto positivo.

shap.decision_plot(explainer.expected_value[1], shap_values[1][12,:], X_test.columns)

 

 

Conclusión

 

En esta publicación del blog, hemos presentado los valores SHAP, un método para explicar la salida de los modelos de aprendizaje automático. Hemos mostrado cómo se pueden usar los valores SHAP para explicar predicciones individuales y el rendimiento general de un modelo. También hemos proporcionado ejemplos de cómo se pueden utilizar los valores SHAP en la práctica.

A medida que el aprendizaje automático se expande a dominios sensibles como la salud, las finanzas y los vehículos autónomos, la interpretabilidad y la explicabilidad solo aumentarán en importancia. Los valores SHAP ofrecen un enfoque flexible y consistente para explicar predicciones y comportamiento del modelo. Se pueden usar para obtener información sobre cómo los modelos hacen predicciones, identificar posibles sesgos y mejorar el rendimiento de los modelos.     Abid Ali Awan (@1abidaliawan) es un profesional certificado en ciencia de datos que ama construir modelos de aprendizaje automático. Actualmente, se centra en la creación de contenido y escribir blogs técnicos sobre tecnologías de aprendizaje automático y ciencia de datos. Abid tiene una maestría en gestión de tecnología y una licenciatura en ingeniería de telecomunicaciones. Su visión es construir un producto de IA utilizando una red neuronal gráfica para estudiantes que luchan contra enfermedades mentales.  

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Meta AI presenta AnyMAL el futuro de los modelos de lenguaje multimodal que conecta texto, imágenes, videos, audio y datos de sensores de movimiento.

En inteligencia artificial, uno de los desafíos fundamentales ha sido permitir que las máquinas comprendan y generen ...

Aprendizaje Automático

Meta AI presenta I-JEPA revolucionario Un gran salto innovador en la visión por computadora que emula el aprendizaje y el razonamiento humano y animal.

Los humanos recogen una gran cantidad de información de fondo sobre el mundo simplemente observándolo. El equipo de M...

Inteligencia Artificial

RELU vs. Softmax en Vision Transformers ¿Importa la longitud de la secuencia? Ideas de un artículo de investigación de Google DeepMind

Hoy en día, una arquitectura común de aprendizaje automático es la arquitectura de transformer. Una de las partes pri...

Inteligencia Artificial

Optimiza el costo de implementación de los modelos base de Amazon SageMaker JumpStart con los puntos finales asincrónicos de Amazon SageMaker

En esta publicación, nos enfocamos en estas situaciones y resolvemos el problema de arriesgar altos costos al impleme...

Inteligencia Artificial

El año en que la inteligencia artificial se comió internet

Llamemos al 2023 el año en que muchos aprendimos a comunicarnos, crear, engañar y colaborar con robots.