2

假设我有两个数据集(对应于我的实体集中的两个实体):

第一个:customers (cust_id, name,birthdate, customer_since)
第二个:bookings (booking_id, service, chargeamount, booking_date)

现在我想创建一个数据集,其中包含从所有客户(无论他们何时成为客户)构建的特征,但只有过去两年的预订

我必须如何使用“last_time_index”?我可以只为一个实体设置“last_time_index”吗?在这种情况下,仅适用于预订实体,因为我想要所有客户,但不是所有预订。

如果使用此代码创建功能:

feature_matrix, features = ft.dfs(entityset=es,
                              target_entity="customers",
                              cutoff_time= pd.to_datetime('30/05/2018'),
                              training_window = ft.Timedelta(2*365,"d"),
                              agg_primitives=["count"],
                              trans_primitives=["time_since","year"],
                              cutoff_time_in_index = True)
4

1 回答 1

2

实体的time_index指定实例首次有效使用的时间。这样,您在设置时间索引时所做的选择会影响您的最终结果。根据您设置的方式time_index,可以ft.dfs完全使用示例中的设置来获得所需的输出。这是一个类似于您描述的数据的玩具示例:

bookings_df = pd.DataFrame()
bookings_df['booking_id'] = [1, 2, 3, 4]
bookings_df['cust_id'] = [1, 1, 2, 5]
bookings_df['booking_date'] = pd.date_range('1/1/2014', periods=4, freq='Y')

customer_df = pd.DataFrame()
customer_df['cust_id'] = [1, 2, 5]
customer_df['customer_since']  = pd.to_datetime(['2014-01-01', '2016-01-01', '2017-01-01'])

es = ft.EntitySet('Bookings')
es.entity_from_dataframe('bookings', bookings_df, 'booking_id', time_index='booking_date')
es.entity_from_dataframe('customers', customer_df, 'cust_id')

es.add_relationship(ft.Relationship(es['customers']['cust_id'], es['bookings']['cust_id']))

bookings_df在过去的四年里,我们每年举办一次活动。数据框如下所示:

    booking_id  cust_id  booking_date
0    1           1        2014-12-31
1    2           1        2015-12-31
2    3           2        2016-12-31
3    4           5        2017-12-31

请注意,我们没有为 设置时间索引customers,这意味着所有客户数据始终有效使用。不带参数运行 DFStraining_window将返回

         YEAR(customer_since)   COUNT(bookings)
cust_id     
1         2014                   2.0
2         2016                   1.0
5         2017                   1.0

而通过添加training_window两年(如您的示例),我们只看到使用前四个预订中的两个的结果:

         YEAR(customer_since)   COUNT(bookings)
cust_id     
1         2014                   0.0
2         2016                   1.0
5         2017                   1.0
于 2018-06-08T14:31:05.053 回答