【问题标题】:Understanding the PercentTrue primitive output in featuretools了解特征工具中的 PercentTrue 原始输出
【发布时间】:2019-02-17 14:33:58
【问题描述】:

我一直在使用predict-appointment-noshow notebook tutorial,但我对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。这是如何计算的?

【问题讨论】:

    标签: featuretools


    【解决方案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
    

    您可以在documentation 中阅读有关 Featuretools 如何处理时间的更多信息。

    【讨论】:

    • 好的,那么如果它们是根据某个时间计算的,那么该字段的第一行按时间顺序总是为 0.00 吗?因为以前没有收到过 SMS 的实例?如果是这样,有没有办法使用有关初始 sms_received 速率的先验信息来播种?
    • 没错。我不清楚我们如何用初始信息播种它。如果您有其他数据来计算该值,则可以将其作为实体集的一部分提供。另一种选择是从截止时间列表中删除第一个约会。将使用来自这些约会的数据,但在结果特征矩阵中不会有一行对应于这些约会
    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2020-08-25
    • 2018-12-13
    相关资源
    最近更新 更多