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)
首先加入交易实体。即使您按会话分组,您也不会以开始时的结果结束,因为每笔交易现在都有自己的价值。
下面是来自官方的示例代码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)
首先加入交易实体。即使您按会话分组,您也不会以开始时的结果结束,因为每笔交易现在都有自己的价值。