Estás leyendo la publicación: Una guía para explicar la importancia de las características en las redes neuronales usando SHAP
Los valores SHAP (SHapley Additive exPlanations) son una herramienta increíble para comprender sus modelos complejos de redes neuronales y otros modelos de aprendizaje automático, como árboles de decisión, bosques aleatorios. Básicamente, le muestra visualmente qué característica es importante para hacer predicciones. En este artículo, entenderemos los valores SHAP, por qué es una herramienta importante para interpretar modelos de redes neuronales y, al final, implementaremos valores SHAPS para interpretar redes neuronales. Los puntos principales que se tratarán en este artículo se enumeran a continuación.
Tabla de contenido
- Introducción al valor SHAP
- Importancia de los valores SHAP
- Cálculo de valores SHAP de redes neuronales.
Primero comprendamos las características de SHAP.
Introducción al valor SHAP
El valor SHAP es una herramienta realmente revolucionaria en la interpretación del aprendizaje automático. El valor SHAP puede funcionar tanto en problemas de regresión como de clasificación. También funciona en diferentes tipos de modelos de aprendizaje automático como regresión logística, SVM, modelos basados en árboles y modelos de aprendizaje profundo como redes neuronales.
En un problema de regresión, incluso si las características están correlacionadas, el valor SHAP puede asignar correctamente la importancia de la característica. Por lo tanto, cada desarrollador de ML debe tener esta herramienta en su conjunto de habilidades para representar los resultados del modelo.
¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos? echa un vistazo aquí.
Importancia de los valores SHAP
Después de implementar modelos de aprendizaje automático, nuestro siguiente paso es analizar el modelo. El valor SHAP ayuda a seleccionar qué función es importante y qué función es inútil al trazar gráficos. El valor SHAP se convirtió en una herramienta famosa en un período de tiempo muy corto porque antes solo teníamos interpretación en forma tabular, por lo que era complicado obtener el resultado, pero en la representación visual de la importancia de las características, podemos obtener el resultado a primera vista.
Cálculo de valores SHAP de redes neuronales
En esta sección, implementaremos una red neuronal y luego calcularemos el valor SHAP.
En primer lugar, instale el paquete shap value en su entorno.
(Nota: implementación realizada en google colab)
!pip forma de instalación
Cargue bibliotecas esenciales que nos ayudarán a implementar redes neuronales, trazar gráficos y cálculos.
#load library import tensorflow as tf from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt plt.style.use(‘fivethirtyeight’) import seaborn as sns import matplotlib.pyplot as plt import pandas as pd import numpy as np import sklearn import lifelines import shap # Esto establece un tamaño común para todas las figuras que dibujaremos. plt.rcParams[‘figure.figsize’] = [10, 7]
Ahora importaremos nuestros datos tomados del hackatón de fin de semana de MachineHack en pandas DataFrame. Nuestra variable objetivo es “IsUnderRisk”, donde 1 significa bajo riesgo, 0 significa sin riesgo.
df = pd.read_csv(‘/content/Train.csv’) df
Los datos no tienen ningún problema, elijo deliberadamente estos datos porque el preprocesamiento no es nuestro motivo. Así que convierto directamente el marco de datos en una matriz para que pueda pasar a la red neuronal.
#convierte los datos en conjunto de datos de matriz = conjunto de datos df.values
Seleccionar valores X e Y
X = conjunto de datos[:, 0:7]
y = conjunto de datos[:, 7]
Almacene todos los nombres de funciones en una matriz y guárdelo en la variable “características”
caracteristicas = [‘City’, ‘Location_Score’, ‘Internal_Audit_Score’,
‘External_Audit_Score’, ‘Fin_Score’, ‘Loss_score’, ‘Past_Results’
]
Convertir los valores en forma estándar
#procesar los datos de sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scale = scaler.fit_transform(X) X_scale
Dividir datos en entrenamiento y prueba en 80 : 20
#dividir los datos 80 % de entrenamiento y 20 % de prueba X_train, X_test, y_train, y_test = train_test_split(X_scale, y, test_size=0.2, random_state = 4)
Construcción y compilación de modelos.
#Construir el modelo modelo = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation=’relu’),
tf.keras.layers.Dense(256, activation=’relu’),
tf.keras.layers.Dense(256, activation=’relu’),
tf.keras.layers.Dense(1, activation=’sigmoid’) # 1 because its a binary classification
]) #Compila el modelo model.compile( loss = tf.keras.losses.binary_crossentropy, Optimizer = tf.keras.optimizers.Adam(lr = 0.02), metrics = [
tf.keras.metrics.BinaryAccuracy(name=”accuracy”),
tf.keras.metrics.Precision(name=”precision”),
tf.keras.metrics.Recall(name=”recall”)
]
) hist = model.fit(X_tren, y_tren, épocas=100)
Ahora comenzaremos a calcular los valores de forma. Primero comience con la definición de un explicador, y en la segunda línea hemos calculado los valores de forma. Tenga en cuenta que el cálculo del valor de forma es extremadamente lento, por lo que antes de aplicarlo, asegúrese de que llevará mucho tiempo, mis datos de prueba tienen solo 109 filas, por lo que no tengo que preocuparme. Después de ejecutar el siguiente código, verá la barra de progreso.
e = shap.KernelExplainer(modelo, X_train) shap_values = e.shap_values(X_test)
Podemos usar los valores bien formados para interpretar nuestro modelo.
shap.initjs() # visualiza la explicación de la primera predicción con un diagrama de fuerza shap.force_plot(e.expected_value[0]valores_shap[0][0]caracteristicas = caracteristicas)
Podemos usar los valores bien formados para interpretar nuestro modelo. ‘force_plot’ que muestra cómo cada característica influye en la salida. ‘External_Audit_Score’, ‘Internal_Audit_Score’, ‘Fin_Score’ son los principales contribuyentes a la hora de hacer predicciones.
shap.summary_plot(shap_values[0]X_test, feature_names=características)
La barra de colores lateral de mayor a menor indica el valor de la función, y en el eje x indica el riesgo, el lado positivo indica que hay riesgo y el lado negativo indica que no hay riesgo. En realidad, el lado negativo es 0 y el lado positivo es 1.
Entonces el bajo valor de “puntuación_auditoría_interna” determina que no hay riesgo, y un valor más alto determina que hay riesgo. Pero mira que el “Ubicación_Puntuación” un valor alto determina que no hay riesgo y un valor bajo determina que no hay riesgo. Las características se ordenan por su importancia en los datos. Podemos ver eso “puntuación_auditoría_interna” es la característica más importante.
Ultimas palabras
Comenzamos con la introducción al valor shap y luego comprendemos por qué esta herramienta es muy importante para interpretar los modelos ML. Luego, al final, vimos prácticamente cómo el valor de forma hace la vida tan fácil al interpretar los modelos ML.
Referencias
- Clasificar datos estructurados con columnas de características
- SHAP Repositorio oficial de Git-Hub
- Enlace para los códigos anteriores