Понимание примитивного вывода PercentTrue в featuretools

Я играл с учебным пособием по предикату-назначению-ношоу, и меня смущает вывод PERCENT_TRUE примитивный.

Насколько я понимаю, после генерации функции столбец locations.PERCENT_TRUE(appointments.sms_received) дает процент строк, для которых sms_received Истинно, учитывая одно местоположение, которое было определено как его собственное Entity ранее. Я ожидаю, что этот столбец будет одинаковым для всех строк в одном месте, потому что это то, на чем он был обусловлен, но я не считаю, что это так. Есть идеи почему?

Вот пример из этой записной книжки для демонстрации:

>>> fm.loc[fm.neighborhood == 'HORTO', 'locations.PERCENT_TRUE(appointments.sms_received)'].describe()

count 144.00
mean 0.20
std 0.09
min 0.00
25% 0.20
50% 0.23
75% 0.26
max 0.31
Name: locations.PERCENT_TRUE(appointments.sms_received), dtype: float64

Хотя местоположение ограничено только 'HORTO'столбец колеблется от 0,00 до 0,31. Как это рассчитывается?

1 ответ

Решение

Это результат использования времен отсечения при расчете этой матрицы признаков.

В этом примере мы делаем прогнозы для каждой встречи во время ее назначения. Особенность locations.PERCENT_TRUE(appointments.sms_received) поэтому рассчитывается в определенное время, определяемое временем отключения. Он рассчитывает для каждой встречи "процент встреч в этом месте, полученных с помощью смс до scheduled_time"

Эта конструкция необходима для предотвращения утечки будущей информации в прогноз для этой строки в то время. Если бы мы были рассчитаны PERCENT_TRUE используя весь набор данных, мы обязательно будем использовать информацию о встречах, которые еще не произошли, что недопустимо для прогнозного моделирования.

Если вы хотите сделать прогнозы после того, как все данные известны, все, что вам нужно сделать, это удалить cutoff_time аргумент ft.dfs вызов:

fm, features = ft.dfs(entityset=es,
                      target_entity='appointments',
                      agg_primitives=['count', 'percent_true'],
                      trans_primitives=['weekend', 'weekday', 'day', 'month', 'year'],
                      max_depth=3,
                      approximate='6h',
                      # cutoff_time=cutoff_times[20000:],
                      verbose=True)

Теперь вы можете видеть, что функция одинакова, когда мы задаем условия в определенном месте.

fm.loc[fm.neighborhood == 'HORTO', 'locations.PERCENT_TRUE(appointments.sms_received)'].describe()
count   175.00
mean      0.32
std       0.00
min       0.32
25%       0.32
50%       0.32
75%       0.32
max       0.32

Вы можете прочитать больше о том, как Featuretools обрабатывает время в документации.

Другие вопросы по тегам