Featuretools 学习5 - 处理时间

当对时间数据执行特征工程的时候,谨慎选择用于计算的数据是十分必要的。通过使用一个time index列注释实体 并且 在计算中提供一个cutoff time时,Featuretools会自动过滤截止时间之后的任何数据,然后再运行计算。

什么是Time Index?

时间索引是数据中的列,用于指定何时知道每一行中的数据,例如:检查一个客户交易表。
在这里插入图片描述
上表中,每笔transaction都有一行数据,而transaction_time列指定了交易发生的时间。这意味着transaction_time是时间索引,因为它指示每行中的信息何时变为已知并可用于要素计算。
但是,并非每个datatime列都是一个时间索引。考虑客户实体:
在这里插入图片描述
上表中,有join_date和date_of_birth两个时间列。虽然两列都可能对创建特征有用,但是应该将join_date用作时间索引,因为它指示该客户首次在数据集中可用的时间。
**注意:**时间索引定义为第一次可以使用行中的任何信息。如果在计算特征的时候指定了截止时间,则时间索引值较高的行将被自动忽略。

什么是Cutoff Time?

cutoff_time指定了可用于特征计算的一行数据的最后时间点。此时间点之后的所有数据都将在计算特征之前被过滤掉。
例如:考虑一个带有时间戳的客户交易数据集,要在该数据集中预测客户1、2和3在1月1日04:00到当天结束之间是否会花费¥500。为该预测问题构建特征时,需要确保在计算中不使用04:00之后的数据。
传递cutoff time到featuretools.df() 或者 featuretools.calculate_feature_matrix()如下使用cutoff_time参数:
在这里插入图片描述
即使实体集包含每个客户的完整交易历史记录,但只有时间索引最高且包括截止时间的数据才用于计算上述特征。

使用Cutoff Time DataFrame

通常,机器学习的训练示例来自不同的时间点。要为结果特征矩阵的每一行指定唯一的截止时间,可以传递一个dataframe,它包括instance id的一列和对应cutoff time的另一列。这些列可以按任何顺序排列,但是必须正确命名。具有instance id的列必须命名为instance_id,或者与目标实体索引具有相同的名称。具有cutoff time的列必须命名为time或与目标实体time_index相同的名称。
instance ids的列名和cutoff time的值都应该明确。传递同时包含和target entity index同名的一列 和 名为instance_id的列 的dataframe会导致错误。同样地,cutoff time dataframe同时包含与target entity time_index同名的一列 和 名为time的一列 会导致错误。
**注意:**仅仅与instance ids和cutoff times相关的列被用来计算特征。传递的所有其他列都将附加在结果特征矩阵中。这通常用于传递机器学习标签,以保证它们的特征矩阵保持一致。
在这里插入图片描述
在这里插入图片描述
可以看出,特征矩阵的每一行都是在截止时间数据帧中的相应时间计算的。因为在不同的时间计算每一行,所以可能会有回头客。上例中,在04:00和08:00都为客户1计算了特征向量。

训练窗口

默认情况下,将使用直到截止时间(包括截止时间)的所有数据。可以使用“training window”来限制选择的历史数据量。比如:使用2h的训练窗口。
在这里插入图片描述
可以看出,同样的count特征的值在缩小了训练窗口之后变小了。
在这里插入图片描述

设置一个Last Time Index

Featuretools的training window限制了在计算特定特征向量时可以使用的过去数据量。如果实体的时间索引的值在训练窗口之前或之后,则将其过滤掉。这适用于在单个时间点发生行的实体,但是有时可能会持续存在一行。
例如:一个客户的会话具有多个交易,并且可以在不同的时间点发生。如果需要计算用户在给定时间段内的sessions数量,通常希望计算在训练时段内所有transaction的所有sessions。因此,不仅需要知道session何时开始,还要知道何时结束。一个Entity的last_time_index存储了instance最后一次出现在数据中的时间。可以比较上面会话实体的时间索引和最后一个时间索引:
在这里插入图片描述
Featuretools可以通过运行EntitySet.add_last_time_indexes()自动将上次索引添加到实体集中的每个实体。如果已经设置last_time_index,Featuretools将检查last_time_index是否在训练窗口开始之后。结合截止时间,DFS可以发现与给定训练窗口相关的数据。

参考官方链接:Handling Time

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值