Logotipo de Zephyrnet

Selección de funciones: Donde la ciencia se encuentra con el arte

Fecha:

By Mahbubul Alam, científico de datos, economista e investigador cuantitativo

Figura
Foto por David Clodo on Unsplash

 

Algunas personas dicen que la selección de funciones y la ingeniería es la parte más importante de los proyectos de ciencia de datos. En muchos casos, no son los algoritmos sofisticados, sino la selección de funciones lo que marca la diferencia en el rendimiento del modelo.

Muy pocas características pueden no encajar bien en un modelo. Por ejemplo, si desea predecir los precios de la vivienda, no es suficiente saber solo la cantidad de dormitorios y la superficie. Está omitiendo muchas variables importantes que le interesan a un comprador, como la ubicación, el distrito escolar, la antigüedad de la propiedad, etc.

También puede venir desde la otra dirección y elegir 100 características diferentes que describen cada pequeño detalle, como los nombres de los árboles en la propiedad. En lugar de agregar más información, estas funciones agregan ruido y complejidad. Muchas de las características elegidas pueden ser completamente irrelevantes. Además de eso, demasiadas características agregan costos computacionales para entrenar un modelo.

Entonces, para construir un buen modelo predictivo, ¿cuál es la cantidad correcta de funciones y cómo elegir qué funciones mantener, qué funciones descartar y qué nuevas funciones agregar? Esta es una consideración importante en los proyectos de aprendizaje automático en la gestión de lo que se conoce como el compensación de sesgo-varianza.

Aquí es también donde la "ciencia" se encuentra con las "artes".

El propósito de este artículo es desmitificar las técnicas de selección de características con alguna implementación simple. Las técnicas que describo a continuación deberían funcionar igualmente en problemas de regresión y clasificación. La clasificación no supervisada (por ejemplo, el agrupamiento) puede ser un poco complicada, por lo que hablaré de ello por separado.

Enfoque heurístico

 
 
No hablamos mucho sobre heurística en la ciencia de datos, pero es bastante relevante. Veamos la definición (fuente: Wikipedia ):

Una técnica heurística o heurística emplea un método práctico que no garantiza que sea óptimo, perfecto o racional, pero que sin embargo es suficiente para alcanzar una meta o aproximación inmediata a corto plazo.

Esta definición se aplica igualmente a la selección de características, si se hace con base en la intuición. Con solo mirar un conjunto de datos, tendrá la intuición de que tales y cuales características son fuertes predictores y que algunas otras no tienen nada que ver con la variable dependiente y siente que es seguro eliminarlas.

Si no está seguro, puede ir un paso más allá para verificar la correlación entre las características y la variable dependiente.

Con demasiadas características en el conjunto de datos, solo estas heurísticas (intuición y correlación) harán la mayor parte de su trabajo para elegir las características correctas.

Como ejemplo, supongamos que su empresa está asignando presupuestos para publicidad en diferentes canales (TV, radio, periódico). Desea predecir qué canal es más eficaz como plataforma de publicidad y cuál es el rendimiento esperado.

Antes de crear un modelo, observa los datos históricos y encuentra la siguiente relación entre los gastos publicitarios en diferentes plataformas y los ingresos por ventas correspondientes.



Diagramas de dispersión bivariados que muestran las relaciones entre las ventas y el gasto publicitario en diferentes plataformas (fuente de la figura: autor; fuente de datos: islr, licencia: GLP 2, dominio público).

 

Según los diagramas de dispersión, ¿cuáles cree que son las mejores funciones para explicar los ingresos publicitarios? Claramente, los anuncios de periódicos no tienen un impacto significativo en el resultado, por lo que es posible que desee eliminarlos del modelo.

Selección de características automatizada

 
 
Ahora entraremos en técnicas de selección de características automatizadas. La mayoría de ellos están integrados en el sklearn módulo, por lo que puede implementar la selección de funciones solo en unas pocas líneas de código en un formato estándar.

Para la demostración, usaré el conjunto de datos 'iris' (fuente: Aprendizaje automático Kaggle/UCI, licencia: CC0 dominio público). Es un conjunto de datos simple y tiene solo 5 columnas, sin embargo, obtendrá los puntos clave.

Carguemos el conjunto de datos de seaborn biblioteca.

# import seaborn library
import seaborn as sns# load iris dataset
iris = sns.load_dataset('iris')
iris.head(5)



# separate features (X) from the target (y) variable
X = iris.drop('species', axis=1)
y = iris['species']

En el conjunto de datos, "especies" es la que queremos predecir y las 4 columnas restantes son predictores. Confirmemos el número de características programáticamente:

# number of predictors in the current dataset
X.shape[1]>> 4

Avancemos ahora e implementemos algunas técnicas de selección de características.

1) Técnica basada en chi-cuadrado

 
 
La técnica basada en chi-cuadrado selecciona un número específico de características definidas por el usuario (k) en función de algunas puntuaciones. Estas puntuaciones se determinan calculando las estadísticas de chi-cuadrado entre las variables X (independiente) e y (dependiente).

sklearn tiene métodos incorporados para la selección de características basada en chi-cuadrado. Todo lo que tiene que hacer es determinar cuántas funciones desea conservar (digamos, k=3 para el conjunto de datos del iris).

# import modules
from sklearn.feature_selection import SelectKBest, chi2# select K best features
X_best = SelectKBest(chi2, k=3).fit_transform(X,y) 

Ahora confirmemos que tenemos las 3 mejores características de 4.

# number of best features
X_best.shape[1]>> 3

Para una gran cantidad de funciones, puede especificar un cierto porcentaje de funciones que desea conservar o descartar. Funciona de manera similar a la anterior. Digamos que queremos conservar el 75 % de las funciones y descartar el 25 % restante.

# keep 75% top features X_top = SelectPercentile(chi2, percentile = 75).fit_transform(X,y)# number of best features
X_top.shape[1]>> 3

2) Selección de funciones basada en impurezas

 
 
Los algoritmos basados ​​en árboles (por ejemplo, Random Forest Classifier) ​​tienen incorporado feature_importances_ atributo.

Un árbol de decisiones dividiría los datos usando una característica que disminuye la impureza (medida en términos de impureza gini or ganancia de información). Eso significa que encontrar la mejor característica es una parte clave de cómo funciona el algoritmo para resolver problemas de clasificación. Luego podemos acceder a las mejores funciones a través de feature_importances_ atributo.

Primero ajustemos el conjunto de datos "iris" a un clasificador de bosque aleatorio con 200 estimadores.

# import model
from sklearn.ensemble import RandomForestClassifier# instantiate model
model = RandomForestClassifier(n_estimators=200, random_state=0)# fit model
model.fit(X,y)

Ahora accedamos a la importancia de la función mediante la llamada de atributo.

# importance of features in the model
importances = model.feature_importances_print(importances)>> array([0.0975945 , 0.02960937, 0.43589795, 0.43689817])

El resultado anterior muestra la importancia de cada una de las 4 funciones para reducir la impureza en cada nodo/división.

Dado que Random Forest Classifier tiene muchos estimadores (por ejemplo, 200 árboles de decisión arriba), podemos calcular una estimación de la importancia relativa con un intervalo de confianza. Vamos a visualizarlo.

# calculate standard deviation of feature importances std = np.std([i.feature_importances_ for i in model.estimators_], axis=0)# visualizationfeat_with_importance = pd.Series(importances, X.columns)fig, ax = plt.subplots()
feat_with_importance.plot.bar(yerr=std, ax=ax)
ax.set_title("Feature importances")
ax.set_ylabel("Mean decrease in impurity")
fig.tight_layout()



Figura: Importancia de las características en las medidas de impurezas (fuente: autor)

 

Ahora que conocemos la importancia de cada función, podemos determinar manualmente (o visualmente) qué funciones mantener y cuáles descartar.

Alternativamente, podemos aprovechar el meta transformador de Scikit-Learn SelectFromModel para hacer este trabajo por nosotros.

# import the transformer
from sklearn.feature_selection import SelectFromModel# instantiate and select features
selector = SelectFromModel(estimator = model, prefit=True)
X_new = selector.transform(X)
X_new.shape[1]>> 2

3) Regularización

 
 
La regularización es un concepto importante en el aprendizaje automático para reducir el sobreajuste (léase: Evite sobreajustar con regularización). Si tiene demasiadas entidades, la regularización controla su efecto, ya sea reduciendo los coeficientes de entidad (llamado regularización L2/regresión de cresta) o estableciendo algunos coeficientes de entidad en cero (llamado regularización L1/regresión LASSO).

Algunos modelos lineales tienen regularización L1 integrada como un hiperparámetro para penalizar las características. Esas características se pueden eliminar usando el meta transformador. SelectFromModel.

Implementemos elLinearSVC algoritmo con hiperparámetro penalización = 'l1'. Entonces usaremos SelectFromModelpara eliminar algunas características.

# implement algorithm
from sklearn.svm import LinearSVC
model = LinearSVC(penalty= 'l1', C = 0.002, dual=False)
model.fit(X,y)# select features using the meta transformer
selector = SelectFromModel(estimator = model, prefit=True)
X_new = selector.transform(X)
X_new.shape[1]>> 2# names of selected features
feature_names = np.array(X.columns)
feature_names[selector.get_support()]>> array(['sepal_length', 'petal_length'], dtype=object)

4) Selección secuencial

 
 
La selección secuencial de características es una técnica estadística antigua. En este caso, agrega (o elimina) funciones al/del modelo una por una, verifica el rendimiento de su modelo y luego elige heurísticamente cuál desea conservar.

La selección secuencial tiene dos variantes. los selección de avance la técnica comienza con una característica cero, luego agrega una característica que minimiza el error al máximo; luego agrega otra característica, y así sucesivamente. los selección hacia atrás trabaja en la dirección opuesta. El modelo comienza con todas las características y calcula el error; luego elimina una característica que minimiza aún más el error, y así sucesivamente, hasta que quede el número deseado de características.

El módulo Scikit-Learn tiene SequentialFeatureSelector meta transformador para hacer la vida más fácil. Tenga en cuenta que funciona para sklearnv0.24 o posterior.

# import transformer class
from sklearn.feature_selection import SequentialFeatureSelector# instantiate model
model = RandomForestClassifier(n_estimators=200, random_state=0)# select features
selector = SequentialFeatureSelector(estimator=model, n_features_to_select=3, direction='backward')
selector.fit_transform(X,y).shape[1]>> 3# names of features selected
feature_names = np.array(X.columns)
feature_names[selector.get_support()]>> array(['sepal_width', 'petal_length', 'petal_width'], dtype=object)

Técnicas alternativas…

 
 
Además de las técnicas que acabo de describir, hay algunos otros métodos que puede probar. Algunos de ellos no están diseñados exactamente para la selección de funciones, pero si profundiza un poco más, descubrirá cómo se pueden aplicar creativamente para la selección de funciones.

  • Coeficientes beta: los coeficientes que obtiene después de ejecutar una regresión lineal (los coeficientes beta) muestran la sensibilidad relativa de la variable dependiente a cada característica. Desde aquí puede elegir las características con valores altos de coeficiente.
  • valor de p: Si implementa la regresión en un paquete estadístico clásico (p. ej. statsmodels ), notará que la salida del modelo incluye valores p para cada característica (mira esto). El valor p prueba la hipótesis nula de que el coeficiente es exactamente cero. Por lo tanto, puede eliminar las características asociadas con valores p altos.
  • Factor de inflación de varianza (VIF): Normalmente, VIF se usa para detectar multicolinealidad en el conjunto de datos. Los estadísticos generalmente eliminan las variables con VIF alto para cumplir con una suposición clave de regresión lineal.
  • Criterios de información bayesianos y de Akaike (AIC/BIC): Generalmente, AIC y BIC se utilizan para comparar el rendimiento entre dos modelos. Pero puede usarlo a su favor para la selección de funciones, por ejemplo, al elegir ciertas funciones que le brindan una mejor calidad de modelo medida en términos de AIC/BIC.
  • Análisis de componentes principales (PCA): Si sabe lo que es PCA, lo ha acertado. No es exactamente una técnica de selección de funciones, pero las propiedades de reducción de dimensionalidad de PCA pueden usarse para ese efecto, sin eliminar las funciones por completo.
  • Y muchos otros: Hay bastantes otras clases de selección de características que vienen con sklearn módulo, revisa la documentación. También se ha propuesto recientemente un algoritmo basado en agrupamiento en un artículo científico. Fisher's Score es otra técnica disponible.

¿Qué hay de la agrupación?

 
 
La agrupación en clústeres es un algoritmo de aprendizaje automático no supervisado, lo que significa que ingresa sus datos en un algoritmo de agrupación en clústeres y el algoritmo descubrirá cómo segmentar los datos en diferentes grupos en función de alguna "propiedad". Estas propiedades en realidad provienen de las características.

¿El agrupamiento requiere selección de características? Por supuesto. Sin las características adecuadas, los clústeres podrían ser inútiles. Supongamos que desea segmentar a los clientes para vender productos de gama alta, media y baja. Eso significa que estás usando implícitamente ingresos de clientes como factor También podrías a través educación en la mezcla. Sus edad  y años de experience? Por supuesto. Pero a medida que aumenta la cantidad de funciones, el algoritmo se confunde con respecto a lo que está tratando de lograr y, por lo tanto, es posible que los resultados no sean exactamente lo que estaba buscando.

Es decir, los científicos de datos no ejecutan algoritmos de agrupamiento en el vacío, a menudo tienen una hipótesis o una pregunta en mente. Por lo que las características deben corresponder a esa necesidad.

Resumen

 
 
Los científicos de datos se toman muy en serio la selección de funciones debido al impacto que tiene en el rendimiento del modelo. Para un conjunto de datos de baja dimensión, la heurística y la intuición funcionan perfectamente; sin embargo, para datos de alta dimensión, existen técnicas automatizadas para hacer el trabajo. Las técnicas más útiles incluyen chi-cuadrado y algoritmos basados ​​en impurezas, así como regularización y selección de características secuenciales. Además, existen técnicas alternativas que pueden resultar útiles, como los coeficientes beta en regresión, valor p, VIF, AIC/BIC y reducción de dimensionalidad.

En el título de este artículo dije “la ciencia se encuentra con el arte”. Es porque no hay una respuesta correcta o incorrecta cuando se trata de la selección de funciones. Podemos usar herramientas científicas, pero al final, puede ser una decisión subjetiva tomada por un científico de datos.

Gracias por leer. No dude en Suscríbase para ser notificado de mis próximos artículos o simplemente conectarse conmigo a través de Twitter or Etiqueta LinkedIn.

 
Bio: Mahbubul Alam tiene más de 8 años de experiencia laboral aplicando la ciencia de datos en la toma de decisiones políticas y comerciales, y ha trabajado en estrecha colaboración con las partes interesadas en organizaciones gubernamentales y no gubernamentales y ayudó a tomar mejores decisiones con soluciones basadas en datos. A Mab le apasiona el modelado estadístico y todos los aspectos de la ciencia de datos, desde el diseño de encuestas y la recopilación de datos hasta la creación de modelos predictivos avanzados. Mab también está enseñando/asesorando un curso de ciencia de datos y análisis empresarial diseñado para analistas de carrera temprana o media, líderes de equipo y profesionales de TI que están haciendo la transición a la ciencia de datos o desarrollando capacidades de ciencia de datos dentro de sus organizaciones.

Original. Publicado de nuevo con permiso.

Relacionado:

Fuente: https://www.kdnuggets.com/2021/12/feature-selection-science-meets-art.html

punto_img

Información más reciente

punto_img