Вручную определить "где пункт" из начальных функций?

Когда используешь 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
Другие вопросы по тегам