0

我一直在玩predict-appointment-noshow 笔记本教程,但我对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。这是如何计算的?

4

1 回答 1

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 如何处理时间的更多信息。

于 2018-09-13T13:40:42.693 回答