使用EntitySets表示数据
EntitySet
EntitySet是实体及其之间关系的集合。它们对为特征工程准备原始结构化的数据集很有用。虽然Featuretools中很多函数将entities和relationships作为单独的参数,但建议创建一个EntitySet,以便自己可以更轻松地操作数据。
原始数据
两个与客户交易相关的数据表(表示为Pandas DataFrames)
第一个是transactions,sessions和customers的合并,视觉效果如下:

第二个DataFrame是这些transactions包含的一系列产品。

创建一个EntitySet
首先,初始化一个EntitySet。如果想为其命名,就可以选择向构造函数提供一个id。

添加entities
首先将transactions dataframe作为一个entity load。

这种方法load的dataframe中的每一列看作一个variable。

调用entity_from_dataframe时,指定了3个重要参数:
index:指定列,该列能够唯一标识dataframe中的行;
time_index:告知Featuretools何时创建数据;
variable_types:指定“product_id”应解释为分类变量,即便它是基础数据中的整数。
同样,也可以对products dataframe做同样操作。

以上,在当前的entity set中有两个entities,可以在它们之间建立关系。
添加关系
希望通过每个entity中“product_id”列来关联两个实体。每个product都有与其关联的多个transactions,因此将product实体称为父实体,transaction实体称为子实体。当指定关系时,首先在父实体中列出变量。注意: ft.Relationship必须表示一对多的关系,而不是一对一或者多对多关系。

从现有表中创建实体
处理原始数据时,通常有足够的信息来证明创建新实体的合理性。为了sessions创建新的实体和关系,将transaction实体“normalize”。

上面呈现了两步操作,第一步是基于transactions中的“session_id”和“session_start”变量,创建了一个名为“sessions”的新实体;第二步是增加了transactions和sessions之间的关联。通过查看transactions中的变量和新的sessions实体,可以发现其他两个自动执行的操作。

第一个操作是从transactions中删除了“device”、“customer_id”、“zip_code”、
“join_date”,并在sessions实体中创建了一个新变量。这减少了冗余信息,因为sessions的那些属性在transactions之间不会更改。
第二个操作是将“session_start”作为时间索引变量复制并标记到新的sessions实体中,以指示session的开始。如果基础实体具有时间索引,并且没有设置make_time_index,则规范化实体将为新实体创建时间索引。在这种情况下,它将使用每个会话的第一个事务的时间创建一个称为“first_transactions_time”的新时间索引。如果我们不希望创建此时间索引,则可以设置make_time_index=False。可视化数据如下:

为了完整准备数据集,以相同的方式创建customers实体。

使用EntitySet
最后,就可以调用Featuretools中的任何functionality使用EntitySet了。比如,为数据集中的每个product创建一个特征矩阵。

DFS生成的特征使用了实体集合中的关系结构。因此,仔细考虑生成的实体是很重要的。
参考官方链接:Representating Data with EntitySets
这篇博客介绍了如何使用Featuretools库创建和管理EntitySets,这是进行特征工程的重要步骤。首先,展示了如何从Pandas DataFrames初始化EntitySet并添加entities,如transactions和products。接着,通过Relationship对象建立了entities之间的关联,特别是基于产品ID的一对多关系。此外,还演示了如何从现有表格数据中创建新实体,如通过transactions DataFrame规范化得到sessions实体。最后,讨论了如何使用创建的EntitySet来生成特征矩阵,强调了理解实体关系在特征工程中的重要性。
9724





