用于ft.dfs
获取特征定义时,该where_primitives
参数根据实体的感兴趣变量过滤值。是否也可以手动定义种子功能的“where 子句”?
问问题
206 次
1 回答
2
where
是的,可以使用参数基于聚合原语为任何种子特征手动定义 where 子句。
假设您要定义“计算金额大于 15 的客户的交易次数”。您可以执行以下操作:
import featuretools as ft
from featuretools.primitives import Count, NumTrue
es = ft.demo.load_mock_customer(return_entityset=True)
print(es)
Entityset: transactions
Entities:
customers (shape = [5, 3])
sessions (shape = [35, 4])
products (shape = [5, 2])
transactions (shape = [500, 5])
Relationships:
transactions.product_id -> products.product_id
transactions.session_id -> sessions.session_id
sessions.customer_id -> customers.customer_id
然后我们可以定义 where 子句如下:
greater_15 = ft.Feature(es['transactions']['amount']) > 15
count_greater_15 = Count(es['transactions'][‘transaction_id’],
parent_entity=es[‘customers’],
where=greater_15)
首先,我们创建一个布尔特征来确定交易金额是否大于 15。然后,我们使用Count
原语并指定 where 子句。在幕后,Featuretools 在计算之前删除 where 特征评估为 false 的任何行Count
。
现在我们准备计算特征:
fm = ft.calculate_feature_matrix(features=[count_greater_15],
instance_ids=[1, 2, 3])
print(fm)
COUNT(transactions WHERE amount > 15)
customer_id
1 121
2 112
3 72
为了验证这是否符合我们的预期,让我们使用NumTrue
计算 True 值数量的原语。我们可以看到它相当于count_greater_15
num_greater_15 = NumTrue(greater_15, parent_entity=es["customers"])
fm = ft.calculate_feature_matrix(features=[num_greater_15],
instance_ids=[1, 2, 3])
print(fm)
NUM_TRUE(transactions.amount > 15)
customer_id
1 121
2 112
3 72
于 2018-03-29T18:06:08.970 回答