如何获取无聚合的深度特征合成输出并与原始连接数据对比?
在Featuretools中获取无聚合的多行DFS输出方案
要实现不做聚合、得到每个客户对应多行的结果,确实不能直接给agg_primitives=[]并以customers为目标——因为DFS的核心逻辑就是为每个目标实体实例生成一行特征,当目标是customers时,关联的子实体(比如订单、交易)数据必须通过聚合原语压缩到客户维度,空聚合原语自然无法生成任何特征,所以会触发报错。
不过有两种方法可以满足你的需求:
方法1:切换目标实体到子实体,关联父实体信息
把目标设为与customers关联的子实体(比如orders),并开启include_entities=True参数,这样就能得到每行对应子实体实例、同时包含所属客户信息的结果,也就是每个客户对应多行(对应他们的子实体记录数)。
示例代码:
fm, features = ft.dfs( entityset=es, target_dataframe_name="orders", # 切换为子实体作为目标 agg_primitives=[], trans_primitives=[], include_entities=True # 包含关联的父实体(customers)的字段 ) fm.head()
这个结果里,每个客户会对应其所有订单的行,同时带上客户的原始属性,和你要的“处理后输出与原始连接数据对比”的需求匹配。
方法2:直接获取实体集的原始连接数据
如果只是需要和原始连接数据对比,也可以跳过DFS,直接用Featuretools实体集的merge_dataframes方法生成合并后的原始数据:
merged_raw_df = es.merge_dataframes(dataframes=["customers", "orders"])
这样得到的就是未经过DFS处理的原始连接结果,和方法1的输出对比更直观。
内容的提问来源于stack exchange,提问作者jmatsen
相关产品推荐
相关产品推荐

