Понимание примитивного вывода PercentTrue в featuretools - PullRequest
0 голосов
/ 13 сентября 2018

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

Насколько я понимаю, после генерации объекта в столбце, подобном locations.PERCENT_TRUE(appointments.sms_received), указывается процент строк, для которых sms_received имеет значение True, для одного местоположения, которое ранее было определено как его собственное 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 Ответ

0 голосов
/ 13 сентября 2018

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

В этом примере мы делаем прогнозы для каждой встречи во время ее назначения. Таким образом, функция 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 обрабатывает время, можно прочитать в документации .

...