使用ft.dfs
获取特征定义时,where_primitives
参数基于实体的有趣变量过滤值。是否也可以手动定义种子特征的" were"子句?
是的,可以使用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
然后,我们可以定义以下内容:
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子句。在幕后,tematureTools删除了在计算Count
之前,其中的功能评估为false的任何行。
现在我们准备计算该功能:
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
原始词。我们可以看到它等效于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