Понимание примитивного вывода 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 обрабатывает время в документации.