了解特征工具中的 PercentTrue 基元输出



我一直在玩预测约会无显示笔记本教程,我对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 之间。这是如何计算的?

这是在计算此特征矩阵时使用截止时间的结果。

在此示例中,我们将在安排约会时对每个约会进行预测。因此,要素locations.PERCENT_TRUE(appointments.sms_received)是在截止时间给定的特定时间计算的。它正在计算每个约会"此位置的约会在scheduled_time之前收到短信的百分比">

该构造对于防止将来的信息泄漏到当时对该行的预测中是必要的。如果我们使用整个数据集PERCENT_TRUE计算,我们必然会使用尚未发生的约会信息,这对于预测建模无效。

如果您想在所有数据已知后进行预测,您所要做的就是删除ft.dfs调用的cutoff_time参数:

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

您可以在文档中阅读有关功能工具如何处理时间的更多信息。

最新更新