es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La lógica para la creación de características agregadas con Featuretools.

Tengo un conjunto de datos que contiene varias columnas, incluyendo date, instance_id, numerical_x, y categorical_y. Utilizo el paquete featuretools para la generación de características ya que tiene una poderosa capacidad para tener en cuenta los desplazamientos de tiempo.

Lo que quiero obtener es una característica como mean(numerical_x groupby categorical_y) y unirla al cuadro principal en la columna categorical_y. ¿Cómo puedo crearlo con featuretools por sí solo? ¿Cómo debería verse mi EntitySet y qué características primitivas debería incluir?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear la funcionalidad deseada, se puede utilizar la función featuretools.dfs, que significa síntesis profunda de características, para generar múltiples características con una variedad de primitivas estadísticas, que incluyen promedio, suma y conteo. Esta función utiliza un conjunto de entidades, que es una colección de tablas, cada una representando un tipo diferente de datos, como una tabla de instancias, una tabla de fechas, una tabla de variables numéricas y una tabla de variables categóricas. La columna date se puede considerar como un índice de tiempo y se puede utilizar para crear características dependientes del tiempo.

    En primer lugar, es necesario crear un conjunto de entidades y agregar los marcos de datos con las columnas requeridas. Se puede comenzar creando un conjunto de entidades con una entidad que representa las instancias utilizando el método es.entity_from_dataframe. Luego, se agregará otra entidad que representa las variables categóricas y se vincularán las dos entidades mediante la relación de clave externa. Aquí hay un ejemplo de fragmento de código para crear el conjunto de entidades:

    import featuretools as ft
    import pandas as pd
    
    # crear la entidad de instancia
    instances = pd.read_csv('instances.csv')
    es = ft.EntitySet('my_entity_set')
    es.entity_from_dataframe(entity_id='instances', dataframe=instances, index='instance_id', time_index='date')
    
    # create the categorical entity
    categories = pd.read_csv('categories.csv')
    es.entity_from_dataframe(entity_id='categories', dataframe=categories, index='categorical_y')
    
    # crear una relación entre las entidades
    es.add_relationship(
        ft.Relationship(es['categories']['categorical_y'], es['instances']['categorical_y'])
    )
    

    Una vez que haya creado el conjunto de entidades con las entidades necesarias, puede utilizar featuretools.dfs para generar automáticamente nuevas características. Aquí le mostramos cómo generar la media de numerical_x agrupada por categorical_y:

    # crear la característica deseada
    feature = ft.dfs(entityset=es,
                     target_entity='categories',
                     agg_primitives=['mean'],
                     agg_columns={'instances': ['numerical_x']},
                     trans_primitives=[],
                     groupby_trans_primitives=[],
                     max_depth=1,
                     where_primitives=[])
    
    # renombrar la característica para indicar que es una característica media
    feature = feature.rename(columns={'MEAN(instances.numerical_x)': 'mean_numerical_x_by_y'})
    
    # combinar esta característica con la tabla de instancias original:
    instances = instances.merge(feature, on='categorical_y')
    

    Esto creará una nueva característica mean_numerical_x_by_y que representa la media de numerical_x para cada valor de categorical_y. La característica se fusionará en la tabla de instances, unida por la columna categorical_y.

    En resumen, para crear una característica media agrupada por una variable categórica utilizando featuretools, se deberá crear un conjunto de entidades con al menos dos entidades, una que contenga los datos de instances y otra entidad que contenga los datos categóricos. Se vincularán las dos entidades utilizando una columna común, en este caso categorical_y. Luego, se puede utilizar featuretools.dfs para generar nuevas características, especificando la entidad de destino como la entidad categórica y las primitivas agg que se desean aplicar. El parámetro agg_columns especifica las columnas de la entidad de instancias a las que se debe aplicar la operación groupby. Finalmente, se puede combinar la característica generada con la tabla de instancias mediante una unión en la columna categorical_y.

Comments are closed.