featuretools:为什么 dfs() 会做冗余计算?

featuretools: why does dfs() do redundant calculation?

下面是来自官方的示例代码docs

import featuretools as ft
es = ft.demo.load_mock_customer(return_entityset=True)

feature_matrix, feature_defs = ft.dfs(
    entityset=es,
    target_entity="customers",
    agg_primitives=["sum", "mode"],
    trans_primitives=["cum_max", "month", "cum_count"],
    max_depth=2
)

feature_defs

>> 
[<Feature: zip_code>,
 ....
 <Feature: MODE(sessions.device)>,
 <Feature: MODE(transactions.sessions.device)>,
 ...
 ]

经过分析graph_feature()的计算,MODE(sessions.device)MODE(transactions.sessions.device)虽然计算方式不同,但看起来是一样的。如果我是对的,为什么 dfs 会多余地计算这个?

感谢提问!虽然它们看起来很相似,但它们实际上是不同的功能。 MODE(sessions.device) 是客户所有会话的设备模式,而 MODE(transactions.sessions.device) 是客户所有交易的设备模式。

作为演示差异的简单示例,假设客户有 3 个会话:

session_id        device
------------------------
         A        Mobile
         B            PC              
         C            PC

还有 5 笔交易,每笔交易都与以下会话之一相关联:

transaction_id      session_id     sessions.device
--------------------------------------------------
             0               A              Mobile
             1               A              Mobile
             2               A              Mobile
             3               B                  PC
             4               C                  PC

在这种情况下,MODE(sessions.device) 将是 PC,但 MODE(transactions.sessions.device) 将是移动设备,因为与会话 A 关联的交易更多。在特征图中,主要区别在于 MODE(transactions.sessions.device) 首先加入交易实体。即使您按会话分组,您也不会以开始时的结果结束,因为每笔交易现在都有自己的价值。