如何解决FeatureTools:为什么dfs进行冗余计算?
下面是来自官方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相关的交易更多。在功能图中,关键区别在于{{1} }首先加入交易实体。即使按会话分组,您也不会以开始时就结束了,因为每笔交易现在都有自己的价值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。