1

用于ft.dfs获取特征定义时,该where_primitives参数根据实体的感兴趣变量过滤值。是否也可以手动定义种子功能的“where 子句”?

4

1 回答 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 回答