Вручную определить "где пункт" из начальных функций?
Когда используешь ft.dfs
чтобы получить определения характеристик, where_primitives
Параметр фильтрует значения на основе интересных переменных объекта. Можно ли также вручную определить "где предложение" начального объекта?
1 ответ
Да, можно вручную определить предложение 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 оценивается как ложная перед вычислением 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
примитив, который считает количество истинных значений. Мы можем видеть, что это эквивалентно 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