功能工具 cutoff_time 无法正常工作

我尝试在 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




慕哥9229398
浏览 184回答 1
1回答

Qyouu

当您为 cutoff_time 传入具有“instance_id”和“时间”列的 DataFrame 时,dfs 将计算由其“instance_id”标识的每个实例,直至并包括相应的“时间”。“instance_id”标识目标实体中的行。因此,当您传入es_demo['transaction'].df['id']for时cutoff_times_demo['instance_id'],您会告诉dfs()在 '2017-01-01' 处计算第 1 行,在 '2018-01-01' 处计算第 2 行,在 '2018-05-23' 处计算第 3 行,在 '2018-05-23' 处计算第 2 行2018-12-21' 等。这会为返回的 feature_matrix 中的第一行生成 NaN 值,因为在 2017-01-01 之前和之前的第 1 行没有数据。要获得您期望的输出,请将您设置的 instance_id 列更改为:cutoff_times_demo['instance_id'] = es_demo['transaction'].df['index']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python