¿Sus características son importantes? No significa que sean buenos - KDnuggets

¿Sus características son importantes? No significa que sean buenos – KDnuggets

Nodo de origen: 2893531

¿Sus características son importantes? No significa que sean buenos
[Imagen del autor]

 

El concepto de "importancia de la característica" se utiliza ampliamente en el aprendizaje automático como el tipo más básico de explicabilidad del modelo. Por ejemplo, se utiliza en la eliminación recursiva de características (RFE), para eliminar de forma iterativa la característica menos importante del modelo.

Sin embargo, existe una idea errónea al respecto.

¡El hecho de que una característica sea importante no implica que sea beneficiosa para el modelo!

De hecho, cuando decimos que una característica es importante, significa simplemente que la característica aporta una gran contribución a las predicciones realizadas por el modelo. Pero deberíamos considerar que tal contribución puede estar equivocada.

Tomemos un ejemplo sencillo: un científico de datos olvida accidentalmente el ID de cliente entre las características de su modelo. El modelo utiliza la identificación del cliente como una característica altamente predictiva. Como consecuencia, esta característica tendrá una gran importancia incluso si en realidad está empeorando el modelo, porque no puede funcionar bien con datos invisibles.

Para que quede más claro, tendremos que hacer una distinción entre dos conceptos:

  • Contribución de predicción: qué parte de las predicciones se debe a la característica; esto es equivalente a la importancia de la característica.
  • Contribución de errores: qué parte de los errores de predicción se debe a la presencia de la característica en el modelo.

En este artículo, veremos cómo calcular estas cantidades y cómo usarlas para obtener información valiosa sobre un modelo predictivo (y mejorarlo).

Nota: este artículo se centra en el caso de regresión. Si estás más interesado en el caso de clasificación, puedes leer "¿Qué características son perjudiciales para su modelo de clasificación?"

Supongamos que construimos un modelo para predecir los ingresos de las personas en función de su trabajo, edad y nacionalidad. Ahora usamos el modelo para hacer predicciones sobre tres personas.

Así, tenemos la verdad fundamental, la predicción del modelo y el error resultante:

 

¿Sus características son importantes? No significa que sean buenos
Verdad fundamental, predicción de modelos y error absoluto (en miles de dólares). [Imagen del autor]

 

Cuando tenemos un modelo predictivo, siempre podemos descomponer las predicciones del modelo en las contribuciones aportadas por las características individuales. Esto se puede hacer a través de valores SHAP (si no sabes cómo funcionan los valores SHAP, puedes leer mi artículo: Los valores de SHAP se explican exactamente como desea que le expliquen a alguien).

Entonces, digamos que estos son los valores SHAP relativos a nuestro modelo para los tres individuos.

 

¿Sus características son importantes? No significa que sean buenos
Valores SHAP para las predicciones de nuestro modelo (en miles de dólares). [Imagen del autor]

 

La principal propiedad de los valores SHAP es que son aditivos. Esto significa que, al tomar la suma de cada fila, obtendremos la predicción de nuestro modelo para ese individuo. Por ejemplo, si tomamos la segunda fila: 72k $ +3k $ -22k $ = 53k $, que es exactamente la predicción del modelo para el segundo individuo.

Ahora bien, los valores SHAP son un buen indicador de la importancia de una característica para nuestras predicciones. De hecho, cuanto mayor sea el valor (absoluto) de SHAP, más influyente será la característica para la predicción sobre ese individuo específico. Tenga en cuenta que estoy hablando de valores SHAP absolutos porque el signo aquí no importa: una característica es igualmente importante si empuja la predicción hacia arriba o hacia abajo.

Por lo tanto, la contribución de predicción de una característica es igual a la media de los valores SHAP absolutos de esa característica. Si tiene los valores SHAP almacenados en un marco de datos de Pandas, esto es tan simple como:

prediction_contribution = shap_values.abs().mean()

En nuestro ejemplo, este es el resultado:

 

¿Sus características son importantes? No significa que sean buenos
Contribución de predicción. [Imagen del autor]

 

Como puedes ver, el trabajo es claramente la característica más importante ya que, en promedio, representa 71.67k $ de la predicción final. La nacionalidad y la edad son, respectivamente, el segundo y el tercer rasgo más relevante.

Sin embargo, el hecho de que una característica determinada represente una parte relevante de la predicción final no dice nada sobre el rendimiento de la característica. Para considerar también este aspecto, necesitaremos calcular la "Contribución de error".

Digamos que queremos responder la siguiente pregunta: "¿Qué predicciones haría el modelo si no tuviera la característica?" trabajo?” Los valores SHAP nos permiten responder a esta pregunta. De hecho, como son aditivos, basta con restar los valores SHAP relativos a la característica trabajo de las predicciones realizadas por el modelo.

Por supuesto, podemos repetir este procedimiento para cada característica. En pandas:

y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)

Este es el resultado:

 

¿Sus características son importantes? No significa que sean buenos
Predicciones que obtendríamos si elimináramos la característica respectiva. [Imagen del autor]

 

Esto significa que, si no tuviéramos la función trabajo, entonces el modelo predeciría 20 $ para el primer individuo, -19 $ para el segundo y -8 $ para el tercero. En cambio, si no tuviéramos la función edad , el modelo predeciría 73 $ para el primer individuo, 50 $ para el segundo, y así sucesivamente.

Como puede ver, las predicciones para cada individuo varían mucho si eliminamos diferentes características. Como consecuencia, también los errores de predicción serían muy diferentes. Podemos calcularlos fácilmente:

abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())

El resultado es el siguiente:

 

¿Sus características son importantes? No significa que sean buenos
Errores absolutos que obtendríamos si elimináramos la característica respectiva. [Imagen del autor]

 

Estos son los errores que obtendríamos si elimináramos la característica respectiva. Intuitivamente, si el error es pequeño, eliminar la función no es un problema (o incluso es beneficioso) para el modelo. Si el error es alto, eliminar la función no es una buena idea.

Pero podemos hacer más que esto. De hecho, podemos calcular la diferencia entre los errores del modelo completo y los errores que obtendríamos sin la característica:

error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)

Qué es:

 

¿Sus características son importantes? No significa que sean buenos
Diferencia entre los errores del modelo y los errores que tendríamos sin la característica. [Imagen del autor]

 

Si este número es:

  • negativo, entonces la presencia de la característica conduce a una reducción en el error de predicción, por lo que la característica funciona bien para esa observación.
  • positivo, entonces la presencia de la característica conduce a un aumento en el error de predicción, por lo que la característica es mala para esa observación.

Podemos calcular la "contribución del error" como la media de estos valores, para cada característica.. En pandas:

error_contribution = error_diff.mean()

Este es el resultado:

 

¿Sus características son importantes? No significa que sean buenos
Contribución de errores. [Imagen del autor]

 

Si este valor es positivo, significa que, en promedio, la presencia de la característica en el modelo conduce a un error mayor. Por lo tanto, sin esa característica, la predicción habría sido mejor en general. En otras palabras, ¡la característica está haciendo más daño que bien!

Por el contrario, cuanto más negativo sea este valor, más beneficiosa será la característica para las predicciones, ya que su presencia conduce a errores menores.

Intentemos utilizar estos conceptos en un conjunto de datos real.

De ahora en adelante, usaré un conjunto de datos tomado de Pycaret (una biblioteca de Python bajo Licencia MIT). El conjunto de datos se llama "Oro" y contiene series temporales de datos financieros.

 

¿Sus características son importantes? No significa que sean buenos
Muestra de conjunto de datos. Todas las características se expresan en porcentaje, por lo que -4.07 significa un rendimiento del -4.07%. [Imagen del autor]

 

Las características consisten en los rendimientos de los activos financieros respectivamente 22, 14, 7 y 1 días antes del momento de observación (“T-22”, “T-14”, “T-7”, “T-1”). Aquí está la lista exhaustiva de todos los activos financieros utilizados como funciones predictivas:

 

¿Sus características son importantes? No significa que sean buenos
Lista de los activos disponibles. Cada activo se observa en los momentos -22, -14, -7 y -1. [Imagen del autor]

 

En total, tenemos 120 funciones.

El objetivo es predecir el precio (rendimiento) del oro con 22 días de anticipación (“Gold_T+22”). Echemos un vistazo a la variable objetivo.

 

¿Sus características son importantes? No significa que sean buenos
Histograma de la variable. [Imagen del autor]

 

Una vez que cargué el conjunto de datos, estos son los pasos que realicé:

  1. Divida el conjunto de datos completo de forma aleatoria: el 33 % de las filas del conjunto de datos de entrenamiento, otro 33 % en el conjunto de datos de validación y el 33 % restante en el conjunto de datos de prueba.
  2. Entrene un regresor LightGBM en el conjunto de datos de entrenamiento.
  3. Realice predicciones sobre conjuntos de datos de entrenamiento, validación y prueba utilizando el modelo entrenado en el paso anterior.
  4. Calcule los valores SHAP de conjuntos de datos de entrenamiento, validación y prueba, utilizando la biblioteca de Python "shap".
  5. Calcule la contribución de predicción y la contribución de error de cada característica en cada conjunto de datos (entrenamiento, validación y prueba), utilizando el código que hemos visto en el párrafo anterior.

Comparemos la contribución al error y la contribución a la predicción en el conjunto de datos de entrenamiento. Usaremos un diagrama de dispersión, de modo que los puntos identifiquen las 120 características del modelo.

 

¿Sus características son importantes? No significa que sean buenos
Contribución de la predicción frente a contribución del error (en el conjunto de datos de entrenamiento). [Imagen del autor]

 

Existe una correlación muy negativa entre la contribución de la predicción y la contribución del error en el conjunto de entrenamiento.

Y esto tiene sentido: Dado que el modelo aprende del conjunto de datos de entrenamiento, tiende a atribuir gran importancia (es decir, alta contribución de predicción) a aquellas características que conducen a una gran reducción en el error de predicción (es decir, contribución de error altamente negativa)..

Pero esto no aporta mucho a nuestro conocimiento, ¿verdad?

De hecho, lo que realmente nos importa es el conjunto de datos de validación. De hecho, el conjunto de datos de validación es el mejor proxy que podemos tener sobre cómo se comportarán nuestras funciones con datos nuevos. Entonces, hagamos la misma comparación con el conjunto de validación.

 

¿Sus características son importantes? No significa que sean buenos
Contribución de predicción versus contribución de error (en el conjunto de datos de Validación). [Imagen del autor]

 

De esta trama podemos extraer información mucho más interesante.

Las características en la parte inferior derecha del gráfico son aquellas a las que nuestro modelo asigna correctamente una gran importancia, ya que en realidad traen una reducción en el error de predicción.

Además, tenga en cuenta que "Gold_T-22" (la devolución del oro 22 días antes del período de observación) está funcionando muy bien en comparación con la importancia que le atribuye el modelo. Esto significa que esta característica posiblemente no sea adecuada. Y este dato es particularmente interesante ya que el oro es el activo que intentamos predecir (“Gold_T+22”).

Por otra parte, Las características que tienen una contribución de error superior a 0 empeoran nuestras predicciones.. Por ejemplo, “US Bond ETF_T-1” cambia en promedio la predicción del modelo en un 0.092 % (contribución de la predicción), pero lleva al modelo a hacer una predicción en promedio un 0.013 % (contribución del error) peor de lo que habría sido sin esa característica. .

Podemos suponer que todas las funciones con una contribución de error alta (en comparación con su contribución de predicción) probablemente estén sobreajustadas o, en general, tienen comportamiento diferente en el conjunto de entrenamiento y en el conjunto de validación.

Veamos qué funciones tienen la mayor contribución de errores.

 

¿Sus características son importantes? No significa que sean buenos
Funciones ordenadas por contribución de errores decreciente. [Imagen del autor]

 

Y ahora las funciones con menor contribución de error:

 

¿Sus características son importantes? No significa que sean buenos
Funciones ordenadas por contribución de errores creciente. [Imagen del autor]

 

Curiosamente, podemos observar que todas las características con mayor contribución de error son relativas a T-1 (1 día antes del momento de observación), mientras que casi todas las características con menor contribución de error son relativas a T-22 (22 días antes del momento de observación). ).

Esto parece indicar que Las características más recientes son propensas a sobreajustarse, mientras que las características más distantes en el tiempo tienden a generalizarse mejor..

Tenga en cuenta que, sin la contribución del error, nunca hubiéramos conocido esta información.

Los métodos tradicionales de eliminación recursiva de funciones (RFE) se basan en la eliminación de funciones sin importancia. Esto equivale a eliminar primero las funciones con una pequeña contribución de predicción.

Sin embargo, según lo que dijimos en el párrafo anterior, tendría más sentido eliminar primero las funciones con mayor contribución de error.

Para comprobar si nuestra intuición es verificada, comparemos los dos enfoques:

  • RFE tradicional: eliminar primero las funciones inútiles (contribución de predicción más baja).
  • Nuestro RFE: eliminar características dañinas la primera (mayor contribución de error).

Veamos los resultados en el conjunto de validación:

 

¿Sus características son importantes? No significa que sean buenos
Error absoluto medio de las dos estrategias en el conjunto de validación. [Imagen del autor]

 

Se ha marcado con un círculo la mejor iteración para cada método: es el modelo con 19 características para el RFE tradicional (línea azul) y el modelo con 17 características para nuestro RFE (línea naranja).

En general, parece que nuestro método funciona bien: eliminar la función con la mayor contribución de error conduce a un MAE consistentemente menor en comparación con eliminar la función con la mayor contribución de predicción.

Sin embargo, puede pensar que esto funciona bien simplemente porque estamos sobreajustando el conjunto de validación. Después de todo, lo que nos interesa es el resultado que obtendremos en el conjunto de prueba.

Entonces, veamos la misma comparación en el conjunto de prueba.

 

¿Sus características son importantes? No significa que sean buenos
Error absoluto medio de las dos estrategias en el conjunto de prueba. [Imagen del autor]

 

El resultado es similar al anterior. Incluso si hay menos distancia entre las dos líneas, el MAE obtenido al eliminar el mayor contribuyente de error es claramente mejor que el MAE obtenido eliminando el menor contribuyente de predicción.

Dado que seleccionamos los modelos que conducen al MAE más pequeño en el conjunto de validación, veamos su resultado en el conjunto de prueba:

  • Contribución de predicción RFE (19 funciones). MAE en el equipo de prueba: 2.04.
  • Contribución de error RFE (17 funciones). MAE en el equipo de prueba: 1.94.

¡Así que el mejor MAE que utiliza nuestro método es un 5% mejor en comparación con el RFE tradicional!

El concepto de importancia de las características juega un papel fundamental en el aprendizaje automático. Sin embargo, la noción de “importancia” a menudo se confunde con la de “bondad”.

Para distinguir entre estos dos aspectos hemos introducido dos conceptos: Contribución de la Predicción y Contribución del Error. Ambos conceptos se basan en los valores SHAP del conjunto de datos de validación, y en el artículo hemos visto el código Python para calcularlos.

También los probamos en un conjunto de datos financieros reales (en el que la tarea es predecir el precio del oro) y demostramos que la eliminación de funciones recursivas basada en la contribución del error conduce a un error absoluto medio un 5% mejor en comparación con el RFE tradicional basado en la contribución de la predicción.

Todo el código utilizado para este artículo se puede encontrar en este cuaderno.

¡Gracias por leer!

 
 
Samuele Mazzanti Es científico de datos líder en Jakala y actualmente vive en Roma. Se licenció en Estadística y sus principales intereses de investigación giran en torno a las aplicaciones del aprendizaje automático para la industria. También es un creador de contenidos independiente.

 
Original. Publicado de nuevo con permiso.
 

Sello de tiempo:

Mas de nuggets