【问题标题】:featuretools cutoff_time does not work properly功能工具 cutoff_time 无法正常工作
【发布时间】:2019-09-17 07:12:34
【问题描述】:

我尝试在 featuretool 的 dfs 函数中添加一个 cutoff_time 数据帧,以便我的数据帧中的每一行都有一个特定的截止时间。但我无法让 cutoff_time 数据帧按预期工作

文档说 cutoff_time 的第一列应该是“instance_id”。我不确定这意味着什么。我尝试了来自目标实体(交易)的索引和来自目标实体的 customer_id(id) (交易)。他们都会弄乱feature_matrix

merkle_fake = pd.DataFrame()

transaction_fake['order_date'] = ['2019-01-01','2018-01-01','2017-01-01','2018-05-23','2019-02-02','2018-12-21']
transaction_fake['product_category'] = ['cat2','cat3','cat2','cat1','cat2','cat2']
transaction_fake['id'] = ['1','2','1','3','1','2']
transaction_fake['order_date'] = pd.to_datetime(transaction_fake['order_date'])
transaction_fake['index'] = transaction_fake.index.tolist()

merkle_fake['cust_id'] = ['1','2','3']

es_demo = ft.EntitySet(id = 'demo')
es_demo.entity_from_dataframe(entity_id='transaction', dataframe= transaction_fake,time_index = 'order_date',index = 'index')
es_demo.entity_from_dataframe(entity_id='merkle', dataframe= merkle_fake,index = 'cust_id')
relationship_fake = ft.Relationship(es_demo["merkle"]["cust_id"],es_demo["transaction"]["id"])
es_demo = es_demo.add_relationship(relationship_fake)

cutoff_times_demo = pd.DataFrame()
cutoff_times_demo['instance_id'] = es_demo['transaction'].df['id']
cutoff_times_demo['time'] = es_demo['transaction'].df['order_date']

feature_matrix_demo, feature_defs_demo = ft.dfs(entityset=es_demo,
                                               agg_primitives=['count'],
                                               trans_primitives=[],
                                               target_entity='transaction',
                                               cutoff_time= cutoff_times_demo,
                                               features_only = False)

feature_matrix_demo 

我希望输出是这样的:

    product_category    id  merkle.COUNT(transaction)
2   cat2    1   1
1   cat3    2   1
3   cat1    3   1
5   cat2    2   2
0   cat2    1   2
4   cat2    1   3

但它给了我:

    product_category    id  merkle.COUNT(transaction)
index           
1   NaN NaN 0
2   cat2    1   1
3   cat1    3   1
2   cat2    1   1
1   cat3    2   2
1   cat3    2   2

【问题讨论】:

    标签: python featuretools


    【解决方案1】:

    当您为 cutoff_time 传入带有“instance_id”和“time”列的 DataFrame 时,dfs 将计算由其“instance_id”标识的每个实例,直至并包括相应的“时间”。 “instance_id”标识目标实体中的行。

    因此,当您将 es_demo['transaction'].df['id'] 传递给 cutoff_times_demo['instance_id'] 时,您是在告诉 dfs() 在 '2017-01-01' 处计算第 1 行,在 '2018-01-01' 处计算第 2 行,在 '2018-01-01' 处计算第 3 行'2018-05-23'、'2018-12-21' 的第 2 行等。这会为返回的 feature_matrix 中的第一行生成 NaN 值,因为在 2017-01 之前和之前的第 1 行没有数据- 01.

    要获得您期望的输出,请将您设置的 instance_id 列更改为:

    cutoff_times_demo['instance_id'] = es_demo['transaction'].df['index']

    【讨论】:

      猜你喜欢
      • 2017-09-23
      • 2013-11-06
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多